Flutter-从RSS feed获取图像

问题描述 投票:0回答:1

我正在尝试从此供稿获取图像URL:

<item>
<title>Tuborg Classic er ikke en pilsner</title>
<link>
https://durst.nu/2020/05/14/tuborg-classic-er-ikke-en-pilsner/
</link>
<wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">
https://durst.nu/2020/05/14/tuborg-classic-er-ikke-en-pilsner/feed/
</wfw:commentRss>
<slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://2.gravatar.com/avatar/b36123a06ead4213d98787e5913b6eb7?s=96&d=identicon&r=G" medium="image">
<media:title type="html">chrcph</media:title>
</media:content>
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=566" medium="image"/>
<description>
Som pilsner ekspert er det ok at være en pedant, ikke? Pille løs i stort og småt. Være træls. På tværs. Tæt på ulidelig. Det er vel nærmest forventeligt, når man har skrevet en grundbog om pilsner, &#8220;Den nøgne øl&#8221; &#8230; <a href="https://durst.nu/2020/05/14/tuborg-classic-er-ikke-en-pilsner/">Continue reading <span class="meta-nav">&#8594;</span></a>
</description>
<content:encoded>
<figure class="wp-block-image size-large"><img data-attachment-id="2192" data-permalink="https://durst.nu/tuborg-classic/" data-orig-file="https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg" data-orig-size="1934,3500" data-comments-opened="1" data-image-meta="{&#34;aperture&#34;:&#34;0&#34;,&#34;credit&#34;:&#34;&#34;,&#34;camera&#34;:&#34;&#34;,&#34;caption&#34;:&#34;&#34;,&#34;created_timestamp&#34;:&#34;0&#34;,&#34;copyright&#34;:&#34;&#34;,&#34;focal_length&#34;:&#34;0&#34;,&#34;iso&#34;:&#34;0&#34;,&#34;shutter_speed&#34;:&#34;0&#34;,&#34;title&#34;:&#34;&#34;,&#34;orientation&#34;:&#34;0&#34;}" data-image-title="tuborg-classic" data-image-description="" data-medium-file="https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=166" data-large-file="https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=566" src="https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=566" alt="" class="wp-image-2192" srcset="https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=566 566w, https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=1132 1132w, https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=83 83w, https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=166 166w, https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=768 768w" sizes="(max-width: 566px) 100vw, 566px" /></figure> <p>Som pilsner ekspert er det ok at være en pedant, ikke?</p> <p>Pille løs i stort og småt. Være træls. På tværs. Tæt på ulidelig.</p> <p>Det er vel nærmest forventeligt, når man har skrevet en grundbog om pilsner, &#8220;Den nøgne øl&#8221; på 380 sider.</p> <p>Tag nu goe gamle Tuborg Classic.&#160;</p> <p>En &#8220;traditionel pilsner&#8221; står der på etiketten &#8211; og med &#8220;frisk og fyldig pilsnersmag&#8221;.</p> <p>Nej, Tuborg Classic er ikke en pilsner.&#160;</p> <p>Det er nok nærmere en wienerøl. </p> <p>Wienerøl er &#8211; modsat classic-betegnelsen &#8211; en certificeret øltype. </p> <p>Jeg er med på, at der var stilforvirring blandt de ølkyndige i 1993, da Tuborg Classic blev lanceret. Fx ingen Beer Judge Certification Program, men hvis folkene fra markedsføringsafdelingen havde rådført sig med en kyndig brygmester, pilsner brygger, inden lanceringen, kom der næppe til at stå &#8216;traditionel pilsner&#8217; på Tuborg Classic.</p> <p>Hos Beer Judge Certification Program (BJCP), det højeste organ for certificering af øl, har wienerøl en selvstændig kategori, Vienna Lager (7A).&#160;</p> <p>Men måske Tuborg Classic skal placeres i en lidt anden kategori hos BJCP, for Tuborg Classic er jo industribryg og så får kategorien præfixet &#8220;international&#8221; hos BJCP.&#160;</p> <p>Så den rette kategori for Tuborg Classic er nok International Amber Lager (2B).</p> <p>Ih, sjovt at være træls.</p> <p></p>
</content:encoded>
<category>Uncategorized</category>
<category>classic</category>
<category>pilsner</category>
<category>Tuborg</category>
<pubDate>Thu, 14 May 2020 07:02:30 GMT</pubDate>
<comments>
https://durst.nu/2020/05/14/tuborg-classic-er-ikke-en-pilsner/#respond
</comments>
<guid isPermaLink="false">http://durst.nu/?p=2191</guid>
<dc:creator>chrcph</dc:creator>
<dc:date>2020-05-14T07:02:30Z</dc:date>
</item>
<item>

我正在从供稿中获取标题和描述,但是我很想获取图像--以下是我的Flutter代码。请注意,有2种媒体内容-如何从Feed中将此URL https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=566获取到Flutter中?

import 'package:flutter/material.dart';
import 'package:webfeed/webfeed.dart';
import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart';
import 'package:cached_network_image/cached_network_image.dart';


class News extends StatefulWidget {
  News() : super ();
  final String title = 'Rss feed Demo';
  @override
  _NewsState createState() => _NewsState();
}

class _NewsState extends State<News> {
  //static const String FEED_URL = 'https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss';
  static const String FEED_URL = 'http://www.rssmix.com/u/11631847/rss.xml';
  RssFeed _feed;
  String _title;
  static const String loadingFeedMsg = 'Loading feed....';
  static const String feedLoadErrorMsg = 'Error loading feed';
  static const String feedOpenErrorMsg = 'Error opening Feed';
  static const String placeholderImg = 'images/no_image.png';
  GlobalKey<RefreshIndicatorState> _refreshKey;

  updateTitle(title){
    setState(() {
      _title = title;
    });
  }
  updateFeed(feed){
    setState(() {
      _feed = feed;
    });
  }

  Future<void> openFeed(String url) async {
    if(await canLaunch((url))){
      await launch(url, forceSafariVC: true, forceWebView: false,
      );
      return;

    }
    updateTitle(feedOpenErrorMsg);
  }

  load() async {
    updateTitle(loadingFeedMsg);
    loadFeed().then((result){
      if(null == result ||result.toString().isEmpty){
        updateTitle(feedLoadErrorMsg);
        return;

      }
      updateFeed(result);
      updateTitle(_feed.title);
    });
  }

  Future<RssFeed> loadFeed() async{
    try{
      final client = http.Client();
      final response = await client.get(FEED_URL);
      return RssFeed.parse(response.body);

    }catch (e){
      return null;

    }
  }

  @override
  void initState() {

    super.initState();
    _refreshKey = GlobalKey<RefreshIndicatorState>();
    updateTitle(widget.title);
    load();


  }
  title(title){
    return Text(
      title,
      style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.w500),
      maxLines: 2,
        overflow: TextOverflow.ellipsis,
    );
  }

  subtitle(subtitle){
    return Text(
      subtitle,
      style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.w200),
      maxLines: 1,
      overflow: TextOverflow.ellipsis,
    );
  }

  thumbnail(imageUrl){
    return Padding(
      padding: EdgeInsets.only(left: 15.0),
      child: CachedNetworkImage(
        placeholder: (context, url) => Image.asset(placeholderImg),
        imageUrl: imageUrl,
        height: 50,
        width: 70,
        alignment: Alignment.center,
        fit: BoxFit.fill,
      ),
    );
  }

  rightIcon(){
    return Icon(
      Icons.keyboard_arrow_right, color: Colors.grey, size: 30.0,
    );
  }

  list(){
    return ListView.builder(
      itemCount: _feed.items.length,
      itemBuilder: (BuildContext context, int index){
        final item = _feed.items[index];
        return ListTile(
         title: title(item.title),
          subtitle: subtitle(item.description),
          leading: thumbnail(item.media.content.url),
          trailing: rightIcon(),
          contentPadding: EdgeInsets.all(5.0),
          onTap: () => openFeed(item.link),


        );

      },
    );
  }

  isFeedEmpty(){
    return null == _feed || null == _feed.items;
  }

  body(){
    return isFeedEmpty() ? Center(
      child: CircularProgressIndicator(),
    )
    :RefreshIndicator(
      key: _refreshKey,
      child: list(),
      onRefresh: () => load(),
    );



  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(_title),
      ),
      body:  body(),
    );
  }
}


```
flutter rss feed
1个回答
0
投票

您可以在下面复制粘贴运行完整代码您可以使用包https://pub.dev/packages/xml2json并解析到相关的Payload类,您可以查看完整代码中的类定义代码段

http.Response response =
        await http.get("http://www.rssmix.com/u/11631847/rss.xml");
    if (response.statusCode == 200) {
      xml2json.parse(response.body);

      String jsonData = xml2json.toGData();

      Payload payload = payloadFromJson(jsonData);
      print(payload.rss.channel.item[0].mediaContent[1]["url"]);

      for (int i = 0; i < payload.rss.channel.item.length; i++) {
        var mediaContent = payload.rss.channel.item[i].mediaContent;
        if (mediaContent != null && mediaContent.length >= 2) {
          var mediaContentItem1 = payload.rss.channel.item[i].mediaContent[1];
          if (mediaContentItem1!= null && mediaContentItem1.containsKey("url")) {
            var url = mediaContentItem1["url"];
            if (url != null) {
              print(url);
            }
          }
        }
      }
    }

输出

I/flutter (27743): https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=566
I/flutter (27743): https://chrcph.files.wordpress.com/2020/05/tuborg-classic.jpg?w=566
I/flutter (27743): https://ousensoel.files.wordpress.com/2020/05/img_20200506_095714_846.jpg?w=1024
I/flutter (27743): https://chrcph.files.wordpress.com/2020/04/45-days-extra-natural-octo.jpg?w=1024
I/flutter (27743): https://chrcph.files.wordpress.com/2020/04/paulanersalvator.jpg?w=300
I/flutter (27743): https://chrcph.files.wordpress.com/2020/04/pc3a5skebryg-herslev.jpg?w=640
I/flutter (27743): https://chrcph.files.wordpress.com/2020/03/gb_witbier.png?w=800
I/flutter (27743): https://2.gravatar.com/avatar/80b9081c0062489b95364a72652cd533?s=96&d=identicon&r=G
I/flutter (27743): https://2.gravatar.com/avatar/80b9081c0062489b95364a72652cd533?s=96&d=identicon&r=G
I/flutter (27743): https://ousensoel.files.wordpress.com/2020/02/img_20200103_162444_232.jpg?w=1024
I/flutter (27743): https://chrcph.files.wordpress.com/2020/02/interic3b8r-the-phil-.jpg?w=550
I/flutter (27743): https://chrcph.files.wordpress.com/2020/01/mikkeller-weird-weather.jpg?w=683
I/flutter (27743): https://chrcph.files.wordpress.com/2020/01/chai-de-lermitage-.jpg?w=1000
I/flutter (27743): https://chrcph.files.wordpress.com/2020/01/dab-frisch-vom-fass.jpg?w=474
I/flutter (27743): https://2.gravatar.com/avatar/80b9081c0062489b95364a72652cd533?s=96&d=identicon&r=G
I/flutter (27743): https://2.gravatar.com/avatar/80b9081c0062489b95364a72652cd533?s=96&d=identicon&r=G
I/flutter (27743): https://chrcph.files.wordpress.com/2019/12/foerster-udenfor.jpg?w=1000

完整代码

import 'package:flutter/material.dart';
import 'package:xml2json/xml2json.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;

Payload payloadFromJson(String str) => Payload.fromJson(json.decode(str));

String payloadToJson(Payload data) => json.encode(data.toJson());

class Payload {
  String version;
  String encoding;
  Rss rss;

  Payload({
    this.version,
    this.encoding,
    this.rss,
  });

  factory Payload.fromJson(Map<String, dynamic> json) => Payload(
        version: json["version"],
        encoding: json["encoding"],
        rss: Rss.fromJson(json["rss"]),
      );

  Map<String, dynamic> toJson() => {
        "version": version,
        "encoding": encoding,
        "rss": rss.toJson(),
      };
}

class Rss {
  String version;
  List<Xmln> xmlns;
  String xmlnsContent;
  String xmlnsDc;
  Channel channel;

  Rss({
    this.version,
    this.xmlns,
    this.xmlnsContent,
    this.xmlnsDc,
    this.channel,
  });

  factory Rss.fromJson(Map<String, dynamic> json) => Rss(
        version: json["version"],
        xmlns: List<Xmln>.from(json["xmlns"].map((x) => Xmln.fromJson(x))),
        xmlnsContent: json["xmlns\u0024content"],
        xmlnsDc: json["xmlns\u0024dc"],
        channel: Channel.fromJson(json["channel"]),
      );

  Map<String, dynamic> toJson() => {
        "version": version,
        "xmlns": List<dynamic>.from(xmlns.map((x) => x.toJson())),
        "xmlns\u0024content": xmlnsContent,
        "xmlns\u0024dc": xmlnsDc,
        "channel": channel.toJson(),
      };
}

class Channel {
  Description title;
  Description link;
  Description description;
  Description generator;
  List<Item> item;

  Channel({
    this.title,
    this.link,
    this.description,
    this.generator,
    this.item,
  });

  factory Channel.fromJson(Map<String, dynamic> json) => Channel(
        title: Description.fromJson(json["title"]),
        link: Description.fromJson(json["link"]),
        description: Description.fromJson(json["description"]),
        generator: Description.fromJson(json["generator"]),
        item: List<Item>.from(json["item"].map((x) => Item.fromJson(x))),
      );

  Map<String, dynamic> toJson() => {
        "title": title.toJson(),
        "link": link.toJson(),
        "description": description.toJson(),
        "generator": generator.toJson(),
        "item": List<dynamic>.from(item.map((x) => x.toJson())),
      };
}

class Description {
  String t;

  Description({
    this.t,
  });

  factory Description.fromJson(Map<String, dynamic> json) => Description(
        t: json["\u0024t"],
      );

  Map<String, dynamic> toJson() => {
        "\u0024t": t,
      };
}

class Item {
  Description title;
  Description link;
  WfwCommentRss wfwCommentRss;
  SlashComments slashComments;
  dynamic mediaContent;
  Description description;
  Description contentEncoded;
  dynamic category;
  Description pubDate;
  Description comments;
  Guid guid;
  Description dcCreator;
  Description dcDate;
  PostId postId;
  MediaThumbnail mediaThumbnail;

  Item({
    this.title,
    this.link,
    this.wfwCommentRss,
    this.slashComments,
    this.mediaContent,
    this.description,
    this.contentEncoded,
    this.category,
    this.pubDate,
    this.comments,
    this.guid,
    this.dcCreator,
    this.dcDate,
    this.postId,
    this.mediaThumbnail,
  });

  factory Item.fromJson(Map<String, dynamic> json) => Item(
        title: Description.fromJson(json["title"]),
        link: Description.fromJson(json["link"]),
        wfwCommentRss: json["wfw\u0024commentRss"] == null
            ? null
            : WfwCommentRss.fromJson(json["wfw\u0024commentRss"]),
        slashComments: json["slash\u0024comments"] == null
            ? null
            : SlashComments.fromJson(json["slash\u0024comments"]),
        mediaContent: json["media\u0024content"],
        description: Description.fromJson(json["description"]),
        contentEncoded: json["content\u0024encoded"] == null
            ? null
            : Description.fromJson(json["content\u0024encoded"]),
        category: json["category"],
        pubDate: Description.fromJson(json["pubDate"]),
        comments: json["comments"] == null
            ? null
            : Description.fromJson(json["comments"]),
        guid: Guid.fromJson(json["guid"]),
        dcCreator: Description.fromJson(json["dc\u0024creator"]),
        dcDate: Description.fromJson(json["dc\u0024date"]),
        postId:
            json["post-id"] == null ? null : PostId.fromJson(json["post-id"]),
        mediaThumbnail: json["media\u0024thumbnail"] == null
            ? null
            : MediaThumbnail.fromJson(json["media\u0024thumbnail"]),
      );

  Map<String, dynamic> toJson() => {
        "title": title.toJson(),
        "link": link.toJson(),
        "wfw\u0024commentRss":
            wfwCommentRss == null ? null : wfwCommentRss.toJson(),
        "slash\u0024comments":
            slashComments == null ? null : slashComments.toJson(),
        "media\u0024content": mediaContent,
        "description": description.toJson(),
        "content\u0024encoded":
            contentEncoded == null ? null : contentEncoded.toJson(),
        "category": category,
        "pubDate": pubDate.toJson(),
        "comments": comments == null ? null : comments.toJson(),
        "guid": guid.toJson(),
        "dc\u0024creator": dcCreator.toJson(),
        "dc\u0024date": dcDate.toJson(),
        "post-id": postId == null ? null : postId.toJson(),
        "media\u0024thumbnail":
            mediaThumbnail == null ? null : mediaThumbnail.toJson(),
      };
}

class Guid {
  String isPermaLink;
  String t;

  Guid({
    this.isPermaLink,
    this.t,
  });

  factory Guid.fromJson(Map<String, dynamic> json) => Guid(
        isPermaLink: json["isPermaLink"],
        t: json["\u0024t"],
      );

  Map<String, dynamic> toJson() => {
        "isPermaLink": isPermaLink,
        "\u0024t": t,
      };
}

class MediaContentElement {
  String url;
  Medium medium;
  List<Xmln> xmlns;
  String xmlnsMedia;
  MediaTitle mediaTitle;

  MediaContentElement({
    this.url,
    this.medium,
    this.xmlns,
    this.xmlnsMedia,
    this.mediaTitle,
  });

  factory MediaContentElement.fromJson(Map<String, dynamic> json) =>
      MediaContentElement(
        url: json["url"],
        medium: mediumValues.map[json["medium"]],
        xmlns: List<Xmln>.from(json["xmlns"].map((x) => Xmln.fromJson(x))),
        xmlnsMedia: json["xmlns\u0024media"],
        mediaTitle: json["media\u0024title"] == null
            ? null
            : MediaTitle.fromJson(json["media\u0024title"]),
      );

  Map<String, dynamic> toJson() => {
        "url": url,
        "medium": mediumValues.reverse[medium],
        "xmlns": List<dynamic>.from(xmlns.map((x) => x.toJson())),
        "xmlns\u0024media": xmlnsMedia,
        "media\u0024title": mediaTitle == null ? null : mediaTitle.toJson(),
      };
}

class MediaTitle {
  Type type;
  String t;

  MediaTitle({
    this.type,
    this.t,
  });

  factory MediaTitle.fromJson(Map<String, dynamic> json) => MediaTitle(
        type: typeValues.map[json["type"]],
        t: json["\u0024t"],
      );

  Map<String, dynamic> toJson() => {
        "type": typeValues.reverse[type],
        "\u0024t": t,
      };
}

enum Type { HTML }

final typeValues = EnumValues({"html": Type.HTML});

enum Medium { IMAGE }

final mediumValues = EnumValues({"image": Medium.IMAGE});

class Xmln {
  Xmln();

  factory Xmln.fromJson(Map<String, dynamic> json) => Xmln();

  Map<String, dynamic> toJson() => {};
}

class MediaThumbnail {
  String url;
  List<Xmln> xmlns;
  String xmlnsMedia;

  MediaThumbnail({
    this.url,
    this.xmlns,
    this.xmlnsMedia,
  });

  factory MediaThumbnail.fromJson(Map<String, dynamic> json) => MediaThumbnail(
        url: json["url"],
        xmlns: List<Xmln>.from(json["xmlns"].map((x) => Xmln.fromJson(x))),
        xmlnsMedia: json["xmlns\u0024media"],
      );

  Map<String, dynamic> toJson() => {
        "url": url,
        "xmlns": List<dynamic>.from(xmlns.map((x) => x.toJson())),
        "xmlns\u0024media": xmlnsMedia,
      };
}

class PostId {
  Xmlns xmlns;
  String t;

  PostId({
    this.xmlns,
    this.t,
  });

  factory PostId.fromJson(Map<String, dynamic> json) => PostId(
        xmlns: xmlnsValues.map[json["xmlns"]],
        t: json["\u0024t"],
      );

  Map<String, dynamic> toJson() => {
        "xmlns": xmlnsValues.reverse[xmlns],
        "\u0024t": t,
      };
}

enum Xmlns { COM_WORDPRESS_FEED_ADDITIONS_1 }

final xmlnsValues = EnumValues(
    {"com-wordpress:feed-additions:1": Xmlns.COM_WORDPRESS_FEED_ADDITIONS_1});

class SlashComments {
  List<Xmln> xmlns;
  String xmlnsSlash;
  String t;

  SlashComments({
    this.xmlns,
    this.xmlnsSlash,
    this.t,
  });

  factory SlashComments.fromJson(Map<String, dynamic> json) => SlashComments(
        xmlns: List<Xmln>.from(json["xmlns"].map((x) => Xmln.fromJson(x))),
        xmlnsSlash: json["xmlns\u0024slash"],
        t: json["\u0024t"],
      );

  Map<String, dynamic> toJson() => {
        "xmlns": List<dynamic>.from(xmlns.map((x) => x.toJson())),
        "xmlns\u0024slash": xmlnsSlash,
        "\u0024t": t,
      };
}

class WfwCommentRss {
  List<Xmln> xmlns;
  String xmlnsWfw;
  String t;

  WfwCommentRss({
    this.xmlns,
    this.xmlnsWfw,
    this.t,
  });

  factory WfwCommentRss.fromJson(Map<String, dynamic> json) => WfwCommentRss(
        xmlns: List<Xmln>.from(json["xmlns"].map((x) => Xmln.fromJson(x))),
        xmlnsWfw: json["xmlns\u0024wfw"],
        t: json["\u0024t"],
      );

  Map<String, dynamic> toJson() => {
        "xmlns": List<dynamic>.from(xmlns.map((x) => x.toJson())),
        "xmlns\u0024wfw": xmlnsWfw,
        "\u0024t": t,
      };
}

class EnumValues<T> {
  Map<String, T> map;
  Map<T, String> reverseMap;

  EnumValues(this.map);

  Map<T, String> get reverse {
    if (reverseMap == null) {
      reverseMap = map.map((k, v) => new MapEntry(v, k));
    }
    return reverseMap;
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  Xml2Json xml2json = Xml2Json();

  void _incrementCounter() async {
    http.Response response =
        await http.get("http://www.rssmix.com/u/11631847/rss.xml");
    if (response.statusCode == 200) {
      xml2json.parse(response.body);

      String jsonData = xml2json.toGData();

      Payload payload = payloadFromJson(jsonData);
      print(payload.rss.channel.item[0].mediaContent[1]["url"]);

      for (int i = 0; i < payload.rss.channel.item.length; i++) {
        var mediaContent = payload.rss.channel.item[i].mediaContent;
        if (mediaContent != null && mediaContent.length >= 2) {
          var mediaContentItem1 = payload.rss.channel.item[i].mediaContent[1];
          if (mediaContentItem1!= null && mediaContentItem1.containsKey("url")) {
            var url = mediaContentItem1["url"];
            if (url != null) {
              print(url);
            }
          }
        }
      }
    }

    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.