The Webfeed Flutter package for Appeto SDK.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

79 lignes
2.4 KiB

  1. import 'package:webfeed/domain/atom_category.dart';
  2. import 'package:webfeed/domain/atom_generator.dart';
  3. import 'package:webfeed/domain/atom_item.dart';
  4. import 'package:webfeed/domain/atom_link.dart';
  5. import 'package:webfeed/domain/atom_person.dart';
  6. import 'package:webfeed/util/datetime.dart';
  7. import 'package:webfeed/util/xml.dart';
  8. import 'package:xml/xml.dart';
  9. class AtomFeed {
  10. final String id;
  11. final String title;
  12. final DateTime updated;
  13. final List<AtomItem> items;
  14. final List<AtomLink> links;
  15. final List<AtomPerson> authors;
  16. final List<AtomPerson> contributors;
  17. final List<AtomCategory> categories;
  18. final AtomGenerator generator;
  19. final String icon;
  20. final String logo;
  21. final String rights;
  22. final String subtitle;
  23. AtomFeed({
  24. this.id,
  25. this.title,
  26. this.updated,
  27. this.items,
  28. this.links,
  29. this.authors,
  30. this.contributors,
  31. this.categories,
  32. this.generator,
  33. this.icon,
  34. this.logo,
  35. this.rights,
  36. this.subtitle,
  37. });
  38. factory AtomFeed.parse(String xmlString) {
  39. var document = XmlDocument.parse(xmlString);
  40. XmlElement feedElement;
  41. try {
  42. feedElement = document.findElements('feed').first;
  43. } on StateError {
  44. throw ArgumentError('feed not found');
  45. }
  46. return AtomFeed(
  47. id: findElementOrNull(feedElement, 'id')?.text,
  48. title: findElementOrNull(feedElement, 'title')?.text,
  49. updated: parseDateTime(findElementOrNull(feedElement, 'updated')?.text),
  50. items: feedElement.findElements('entry').map((element) {
  51. return AtomItem.parse(element);
  52. }).toList(),
  53. links: feedElement.findElements('link').map((element) {
  54. return AtomLink.parse(element);
  55. }).toList(),
  56. authors: feedElement.findElements('author').map((element) {
  57. return AtomPerson.parse(element);
  58. }).toList(),
  59. contributors: feedElement.findElements('contributor').map((element) {
  60. return AtomPerson.parse(element);
  61. }).toList(),
  62. categories: feedElement.findElements('category').map((element) {
  63. return AtomCategory.parse(element);
  64. }).toList(),
  65. generator:
  66. AtomGenerator.parse(findElementOrNull(feedElement, 'generator')),
  67. icon: findElementOrNull(feedElement, 'icon')?.text,
  68. logo: findElementOrNull(feedElement, 'logo')?.text,
  69. rights: findElementOrNull(feedElement, 'rights')?.text,
  70. subtitle: findElementOrNull(feedElement, 'subtitle')?.text,
  71. );
  72. }
  73. }