我正在嘗試從initState
方法中的 api 獲取用戶,但它不顯示用戶串列。似乎無法重建螢屏
當我放置一個提升的按鈕并按下它時它可以從 api 獲取資料..但是在這里我不想放置任何按鈕..它應該顯示在加載應用程式中
這是我的代碼
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
List<dynamic> userlist = [];
bool isloading = false;
void fetchdata() async
{
setState(() {
isloading = true;
});
//var res = await http.get(Uri.https("dummyjson.com", "users"));
var res = await http.get(
Uri.parse('https://jsonplaceholder.typicode.com/posts'));
if (res.statusCode == 200) {
var jsondata = jsonDecode(res.body);
print(jsondata);
print(jsondata['users']);
setState(() {
userlist = jsondata;
isloading = false;
});
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
fetchdata();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: MyBody(),
));
}
MyBody() {
return userlist.isNotEmpty
? Column(
children: [
Text('List Of Users'),
SizedBox(
height: 20,
),
Expanded(
child: ShowUser(userlist:userlist),
)
],
)
: Center(
child: Text('No user found'),
);
}
}
uj5u.com熱心網友回復:
洗掉此行 print(jsondata['users']);
if (res.statusCode == 200) {
var jsondata = jsonDecode(res.body);
print(jsondata);
// print(jsondata['users']); <= remove this line. this is caused error..
setState(() {
userlist = jsondata;
isloading = false;
});
以獲得更好的編程風格。在獲取 api 時,我建議使用try{} catch{}
. 如果有任何錯誤,它將幫助您處理。使用您當前的代碼,在列印 null 不存在值時會發生錯誤。但你沒有catch
任何錯誤。所以你不知道出了什么問題。
try{
var res = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
.... here another code
} catch (e){
print(e); // here you can handle the error
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/524841.html
標籤:扑
上一篇:影響2種不同狀態的按鈕