The Webfeed Flutter package for Appeto SDK.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

68 líneas
2.1 KiB

  1. import 'package:webfeed/domain/atom_category.dart';
  2. import 'package:webfeed/domain/atom_link.dart';
  3. import 'package:webfeed/domain/atom_person.dart';
  4. import 'package:webfeed/domain/atom_source.dart';
  5. import 'package:webfeed/domain/media/media.dart';
  6. import 'package:webfeed/util/datetime.dart';
  7. import 'package:webfeed/util/xml.dart';
  8. import 'package:xml/xml.dart';
  9. class AtomItem {
  10. final String id;
  11. final String title;
  12. final DateTime updated;
  13. final List<AtomPerson> authors;
  14. final List<AtomLink> links;
  15. final List<AtomCategory> categories;
  16. final List<AtomPerson> contributors;
  17. final AtomSource source;
  18. final String published;
  19. final String content;
  20. final String summary;
  21. final String rights;
  22. final Media media;
  23. AtomItem({
  24. this.id,
  25. this.title,
  26. this.updated,
  27. this.authors,
  28. this.links,
  29. this.categories,
  30. this.contributors,
  31. this.source,
  32. this.published,
  33. this.content,
  34. this.summary,
  35. this.rights,
  36. this.media,
  37. });
  38. factory AtomItem.parse(XmlElement element) {
  39. return AtomItem(
  40. id: findElementOrNull(element, 'id')?.text,
  41. title: findElementOrNull(element, 'title')?.text,
  42. updated: parseDateTime(findElementOrNull(element, 'updated')?.text),
  43. authors: element.findElements('author').map((element) {
  44. return AtomPerson.parse(element);
  45. }).toList(),
  46. links: element.findElements('link').map((element) {
  47. return AtomLink.parse(element);
  48. }).toList(),
  49. categories: element.findElements('category').map((element) {
  50. return AtomCategory.parse(element);
  51. }).toList(),
  52. contributors: element.findElements('contributor').map((element) {
  53. return AtomPerson.parse(element);
  54. }).toList(),
  55. source: AtomSource.parse(findElementOrNull(element, 'source')),
  56. published: findElementOrNull(element, 'published')?.text,
  57. content: findElementOrNull(element, 'content')?.text,
  58. summary: findElementOrNull(element, 'summary')?.text,
  59. rights: findElementOrNull(element, 'rights')?.text,
  60. media: Media.parse(element),
  61. );
  62. }
  63. }