flutter - Flutter RSS Feed XML 请求问题
问题描述
谁能告诉我出了什么问题?据我所知,这段代码是正确的,但我不明白我在 bash 中从哪里得到这个 XMLHttpRequest 错误。
我最初遵循这个 - https://www.youtube.com/watch?v=F0xh7LMr_V0,我还发现其他教程解释了同样的事情,但没有人真正提到这个错误。
任何帮助将不胜感激,
最亲切的问候,
乙
import 'package:ad/main.dart';
import 'package:flutter/material.dart';
import 'dart:async';
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 NewsFeed extends StatefulWidget {
NewsFeed() : super();
final String title = 'RSS Feed';
@override
NewsFeedState createState() => NewsFeedState();
}
class NewsFeedState extends State<NewsFeed> {
static const String FEED_URL =
'https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss';
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) {
print(e);
// handle any exceptions here
}
return null;
}
@override
void initState() {
super.initState();
_refreshKey = GlobalKey<RefreshIndicatorState>();
updateTitle(widget.title);
load();
}
title(title) {
return Text(
title,
style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.w500),
maxLines: 2,
overflow: TextOverflow.ellipsis,
);
}
subtitle(subTitle) {
return Text(
subTitle,
style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.w100),
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(
return ListTile(
title: title(item.title),
//subtitle: subtitle(item.description),
subtitle: subtitle(item.description),
leading: item.enclosure?.url != null
? thumbnail(item.enclosure.url)
: SizedBox.shrink(), // Replace Container() with SizedBox.shrink()
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(
drawer: DrawerCodeOnly(),
appBar: AppBar(
title: Text(_title),
),
body: body(),
);
}
}
解决方案
来自 Google Flutter Group 的 Flutter Group 建议,代码在同一台服务器上工作,但认为问题与 CORS 有关,现在将进一步调查:) 再次感谢!
推荐阅读
- android - 詹金斯:':app:processDevManifest'任务步骤中的NullPointerException
- apache-kafka - 我如何询问 kafka 哪些主题具有非凡的覆盖?
- php - 无法将 where 子句添加到 eloquent 模型
- c# - 从复选框集合中返回一串选定值
- excel - 将多个选项卡复制到新工作簿中,粘贴为值
- javascript - 使用 bot 框架向 slack 发送主动消息
- jquery - 使用 jquery 执行自动完成时没有结果
- python - 如何使用 Python 在 Selenium 中解决元素不可点击的问题
- database - Docker 和 Mongo 上的 Cocorico 问题
- excel - Countifs:需要计算某个范围内给定日期前 12 个月的单元格数