问题描述
我只想在 ListView
之外的按钮点击事件上从 API 加载 initState()
上的数据。我从服务器获取数据但未在 ListView 上更新。
这是我的代码:
@override
Widget build(BuildContext context) {
List<dynamic> ListData = [];
Future _getData() async {
String apiUrl = "http://myURL";
final params = {"id": "1","keyword": "xyz"};
var response = await http.post(
Uri.parse(apiUrl),body: params,);
var jsonData = jsonDecode(response.body);
List<dynamic> DATA = [];
DATA = jsonData['data'];
setState(() {
ListData = DATA;
});
print('DATA COUNT: ${ListData.length}');
return ListData;
}
}
我正确地到达这里“DATA COUNT”,检查下面的 button
和 ListView
代码。
SizedBox(
height: 45,width: 60,child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.orangeAccent,),onpressed: () async {
await _getData();
print('button pressed ${ListData.length}');
},child: Text(
'${ListData.length}',style: TextStyle(
fontSize: 18.0,fontWeight: FontWeight.bold,Expanded(
child: ListView.builder(
itemCount: ListData.length,itemBuilder: (context,index) {
return ListTile(
title: Text('${ListData[index]}'),);
},
我在这里“按下按钮”也正确获取数据,但未在 button text
和 ListView builder
上更新,我的代码有什么问题,提前致谢。
解决方法
您在构建 Methode 时分配 ListData = []。当您的构建 Methode 被 setState() 调用时,ListData 再次分配给 []。
尝试分配 ListData = [] 关于你的构建方法
,从构建方法中删除您的 ListData。原因是每次调用 setState 方法时都会重建,因此每次都会使 ListData 为空。
{{1}}
}`