![](/img/trans.png)
[英]flutter don't catch error from node js api call with try and catch block, what am i doing wrong?
[英]Unable to load data from API when changing min SDK to 2.12.0 from 2.7.0. what am I doing wrong? (Flutter)
我正在使用顫振制作一個練習移動應用程序,我通過調用第三方 API 來加載數據。 我想使用 late 關鍵字來集成我需要將 min SDK 版本從 2.7.0 更改為 2.12.0 的功能。 但在這樣做之后,我無法從 API 加載數據。 我正在使用未來的構建器,並且在更改之前和之后共享它的代碼。
在將 min sdk 更改為 2.12.0 之前:
Widget build(BuildContext context) {
final ApiService client = ApiService(pageIndex);
return FutureBuilder(
future: client.getArticle(),
builder: (BuildContext context, AsyncSnapshot<List<Article>> snapshot) {
List article = snapshot.data;
if (snapshot.hasData) {
return ListView.separated(
separatorBuilder: (context, index) {
return SizedBox(
height: 10,
);
},
padding: EdgeInsets.all(15),
itemCount: article.length,
itemBuilder: (context, i) {
return NewsScreenWidget(
author: article[i].author,
title: article[i].title.toString(),
description: article[i].description.toString(),
url: article[i].url.toString(),
urlToImage: article[i].urlToImage,
publishedAt: DateTime.parse(article[i].publishedAt),
content: article[i].content.toString(),
);
});
}
return Center(
child: CircularProgressIndicator(
color: Colors.black,
strokeWidth: 5,
),
);
},
);
}
將 min SDK 更改為 2.12.0 后
Widget build(BuildContext context) {
final ApiService client = ApiService(widget.pageIndex);
return FutureBuilder(
future: client.getArticle(),
builder: (BuildContext context, AsyncSnapshot<List<Article>> snapshot) {
var article = snapshot.data;
if (article == null) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
var datalength = article.length;
if (datalength == 0) {
return const Center(
child: Text('No data found'),
);
} else {
return ListView.separated(
separatorBuilder: (context, index) {
return SizedBox(
height: 10,
);
},
padding: EdgeInsets.all(15),
itemCount: datalength,
itemBuilder: (context, i) {
return NewsScreenWidget(
author: article[i].author,
title: article[i].title.toString(),
description: article[i].description.toString(),
url: article[i].url.toString(),
urlToImage: article[i].urlToImage,
publishedAt: DateTime.parse(article[i].publishedAt),
content: article[i].content.toString(),
);
},
);
}
}
},
);
}
目前,我只是看到 CircularProgressIndicator 使用上面的代碼,但是當我切換回 min SDK 為 2.7.0 的分支時,一切正常(但不能使用 late 關鍵字)。
任何幫助都會很棒:)謝謝。
這些是構建未來構建器時的最佳實踐:
FutureBuilder<YOUR CLASS>(
future: future,
builder: (context, snapshot) {
if (snapshot.hasData) {
// do something with logic
return WIDGET;
}
if(snapshot.hasError) {
return Text(snapshot.error);
}
return const Center(child: CircularProgressIndicator());
},
),
更多信息: https ://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.