setState 不更新 ListView 数据
setState doesn't update the ListView data
我只想从 API 加载 ListView
上的数据,而不是 initState()
中的按钮单击事件。我从服务器获取数据但未在 ListView 上更新。
我搜索了这个但没有得到任何合适的解决方案,我是 flutter 的新手。
这是我的代码:
@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;
}
}
我正在正确地到达这里“数据计数”,请查看下面的 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 = []。当您的构建方法被 setState() 调用时,ListData 再次分配给 []。
尝试使用您的构建方法分配 ListData = []
从构建方法中删除您的 ListData。原因是每次重建方法时都会调用 setState,因此每次都会使您的 ListData 为空。
List<dynamic> ListData = [];
`@override
Widget build(BuildContext context) {
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;
}
}`
我只想从 API 加载 ListView
上的数据,而不是 initState()
中的按钮单击事件。我从服务器获取数据但未在 ListView 上更新。
我搜索了这个但没有得到任何合适的解决方案,我是 flutter 的新手。
这是我的代码:
@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;
}
}
我正在正确地到达这里“数据计数”,请查看下面的 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 = []。当您的构建方法被 setState() 调用时,ListData 再次分配给 []。
尝试使用您的构建方法分配 ListData = []
从构建方法中删除您的 ListData。原因是每次重建方法时都会调用 setState,因此每次都会使您的 ListData 为空。
List<dynamic> ListData = [];
`@override
Widget build(BuildContext context) {
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;
}
}`