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.

73 lignes
2.3 KiB

  1. import 'package:intl/intl.dart';
  2. import 'package:webfeed/domain/dublin_core/dublin_core.dart';
  3. import 'package:webfeed/domain/media/media.dart';
  4. import 'package:webfeed/domain/rss_category.dart';
  5. import 'package:webfeed/domain/rss_content.dart';
  6. import 'package:webfeed/domain/rss_enclosure.dart';
  7. import 'package:webfeed/domain/rss_item_itunes.dart';
  8. import 'package:webfeed/domain/rss_source.dart';
  9. import 'package:webfeed/util/xml.dart';
  10. import 'package:xml/xml.dart';
  11. class RssItem {
  12. final String title;
  13. final String description;
  14. final String link;
  15. final List<RssCategory> categories;
  16. final String guid;
  17. final DateTime pubDate;
  18. final String author;
  19. final String comments;
  20. final RssSource source;
  21. final RssContent content;
  22. final Media media;
  23. final RssEnclosure enclosure;
  24. final DublinCore dc;
  25. final RssItemItunes itunes;
  26. RssItem({
  27. this.title,
  28. this.description,
  29. this.link,
  30. this.categories,
  31. this.guid,
  32. String pubDate,
  33. this.author,
  34. this.comments,
  35. this.source,
  36. this.content,
  37. this.media,
  38. this.enclosure,
  39. this.dc,
  40. this.itunes,
  41. }) : this.pubDate = _parsePubDate(pubDate);
  42. factory RssItem.parse(XmlElement element) {
  43. return RssItem(
  44. title: findElementOrNull(element, "title")?.text,
  45. description: findElementOrNull(element, "description")?.text,
  46. link: findElementOrNull(element, "link")?.text,
  47. categories: element.findElements("category").map((element) {
  48. return RssCategory.parse(element);
  49. }).toList(),
  50. guid: findElementOrNull(element, "guid")?.text,
  51. pubDate: findElementOrNull(element, "pubDate")?.text,
  52. author: findElementOrNull(element, "author")?.text,
  53. comments: findElementOrNull(element, "comments")?.text,
  54. source: RssSource.parse(findElementOrNull(element, "source")),
  55. content: RssContent.parse(findElementOrNull(element, "content:encoded")),
  56. media: Media.parse(element),
  57. enclosure: RssEnclosure.parse(findElementOrNull(element, "enclosure")),
  58. dc: DublinCore.parse(element),
  59. itunes: RssItemItunes.parse(element),
  60. );
  61. }
  62. static _parsePubDate(pubDate) {
  63. if (pubDate == null) return null;
  64. //Locale for pubDate is always en_US, regardless of device locale
  65. return DateFormat('EEE, dd MMM yyyy HH:mm:ss Z', 'en_US').parse(pubDate);
  66. }
  67. }