Flutter 如何检查xml rss源中是否存在元素

Flutter 如何检查xml rss源中是否存在元素,flutter,dart,Flutter,Dart,我有一个显示rss提要的小部件。但并非所有项目都包含所有元素。如何检查元素是否存在 线路故障: child: Image.network(item.media.contents.first.url, height: 105, width: 105), 没有媒体元素。我如何检查和跳过违规行 @override Widget build(BuildContext context) { print (this.feed3.items.length); return Scaff

我有一个显示rss提要的小部件。但并非所有项目都包含所有元素。如何检查元素是否存在

线路故障:

child: Image.network(item.media.contents.first.url, height: 105, width: 105),
没有媒体元素。我如何检查和跳过违规行

  @override
  Widget build(BuildContext context) {
    print (this.feed3.items.length);
    return Scaffold(
      body: ListView.builder(
          itemCount: this.feed3.items.length,
          itemBuilder: (BuildContext ctxt, int index) {
            final item = this.feed3.items[index];
            return   InkWell(
          child: ListTile(
              leading: ConstrainedBox(
                constraints: BoxConstraints(
                  minWidth: 105,
                  minHeight: 105,
                  maxWidth: 105,
                  maxHeight: 105,
                ),
                child: Image.network(item.media.contents.first.url, height: 105, width: 105),
              ),
              title: Text(item.title),
              subtitle: Text(item.pubDate),
              contentPadding: EdgeInsets.all(16.0),
            ),
          onTap: () {
            showLink(item.link);
          },
        );
          }),
    );
  }
这是我建议您使用的软件包。因此,更容易检测地图中是否存在任何密钥

我使用下面的代码显示了从feed获取的一些字段:

import 'dart:async';
import 'dart:io';

import 'package:wnetworking/wnetworking.dart';

typedef JMap = Map<String, dynamic>;

class RssApp {
  static const _base = 'https://rss.app/feeds';

  static FutureOr<void> fetchFeeds() async {
    var url = '$_base/_DawozSyanCYfGaQg.xmlRSS Feed';
    stdout.write('Fetching feeds... ');
    var feeds = <JMap>[];

    await HttpReqService.getXml2Json<JMap>(url, convention: X2JConvention.Badgerfish)
      .then((response) {
        if (response != null) {
          var items = response['rss']['channel']['item'] as List;
          items.forEach((item) {
            feeds.add({
              'title': item['title']['__cdata'],
              'pubDate': item['pubDate']['\$'],
              'url': item['media:content']?['@url'],
              'medium': item['media:content']?['@medium'],
            });
          });
        };
      })
      .whenComplete(() {
        print('done.');
        print('Number of feeds: ${feeds.length}\n');
        print(feeds);
      });
  }
}

void main(List<String> args) async {
  await RssApp.fetchFeeds();
  print('\nJob done!');
}
HttpReqService.getXml2Json
函数(来自尚未准备好发布的
wnetworking
包,抱歉)使用
Xml2Json
对象来转换XML数据,需要注意的是所使用的
约定
,此代码对
Xml2Json
对象使用
獾鱼

Fetching feeds... done.
Number of feeds: 25

[{title: New York State wants to hear from you.  Share your thoughts regarding re-opening schools on the Thought Exchange at http..., pubDate: Thu, 20 May 2021 14:32:58 GMT, url: https://external-ort2-2.xx.fbcdn.net/safe_image.php?d=AQGgr5DIPtLjqzbO&w=540&h=282&url=https%3A%2F%2Fdpe2badxax7zn.cloudfront.net%2Fmw%2F5.0.0.b122%2Fassets%2Fte-meta-tag-1200x628.png&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&ccb=3-5&_nc_hash=AQEhucF_63qRKaF4, medium: image},
....
{title: https://www.huffpost.com/…/kids-movies-celebrate-diversity_…, pubDate: Sun, 14 Mar 2021 20:18:40 GMT, url: https://external-sea1-1.xx.fbcdn.net/safe_image.php?d=AQE-pzCH1t0n6utx&w=540&h=282&url=https%3A%2F%2Fimg.huffingtonpost.com%2Fasset%2F600b08c6260000140bacf867.png%3Fcache%3DfhVGM0z574%26ops%3D1778_1000&cfs=1&upscale=1&fallback=news_d_placeholder_publisher&ccb=3-5&_nc_hash=AQGSesvbHTiaclsF, medium: image}]

Job done!