flutter - 为什么这个异步数据不在 initState 上加载?
问题描述
在查看了包括这个 SO post在内的资源之后,我仍然不确定为什么我的数据没有加载到 initState 上:
class _MyAppState extends State<MyApp> {
List<NewsItem> itemList = [];
void _getNews() async {
final news = await http.get(Uri.parse(
'https://newsapi.org/...'));
if (news.statusCode == 200) {
itemList.clear();
var articles = jsonDecode(news.body)['articles'];
for (int i = 0; i < articles.length; i++) {
var newsItem = articles[i];
var item = NewsItem.fromJson(newsItem);
itemList.add(item);
}
} else {
throw Exception('Failed to retrieve news.');
}
}
Future<void> _getData() async {
setState(() {
_getNews();
});
}
@override
void initState() {
super.initState();
_getNews();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'NewsAPI.org Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(title: const Text("News App")),
body: RefreshIndicator(
onRefresh: _getData,
child: ListView.builder(
itemCount: itemList.length,
itemBuilder: (context, i) {
return GestureDetector(
onTap: () {
if (itemList[i].url != null) {
var _url = itemList[i].url!;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DisplayWebPage(_url)),
);
}
},
child: Card(
elevation: 10,
shadowColor: Colors.black,
child: Padding(
padding: const EdgeInsets.all(10),
child: Column(
children: [
Image.network(itemList[i].urlToImage ?? ''),
Text(itemList[i].title ?? '',
style: const TextStyle(
fontWeight: FontWeight.bold, fontSize: 14)),
Text(itemList[i].description ?? ''),
const Divider(
color: Colors.black,
height: 25,
thickness: 2,
),
],
),
),
),
);
},
),
),
),
);
}
}
当应用程序加载时,屏幕是空白的。如果我拉刷新,即调用_getData()
,然后加载预期的网络数据。我认为setState()
在初始化期间调用并不重要,但我也尝试_getNews()
在启动时调用。(没关系。)
代码应该是什么,以便在应用程序启动时加载 Web 数据?
解决方案
推荐阅读
- reactjs - 显示个人资料图片
- python - 当我按下一个按钮时,两个按钮被按下,pygame
- c# - .NET Core 2.2 将 cshtml 呈现为字符串
- java - Java x*0.01 和 x/100.0 不一样,为什么?
- javascript - 使用键盘存储以前的剑道下拉列表选项
- elasticsearch - 在 _reindex api 中的字段上使用 geo_point 数据类型
- ruby - 为什么 Ruby base64 编码的字符串与所有其他 base64 编码的字符串不同?
- mongodb-atlas - mongodb atlas alert 的调试流程
- python - 如何在两个值之间随机选择?
- spring-security - 如何绕过 Spring Boot 管理客户端中的 Spring Boot 安全性?