【发布时间】:2021-06-22 10:43:43
【问题描述】:
我想从 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 上没有更新,我的代码有什么问题提前谢谢。
【问题讨论】:
-
你的数据在服务器上是不是地图列表?
-
你可以看到这个答案它会帮助你stackoverflow.com/questions/67844897/…
-
另外一件事是,在从服务器获取数据时不要使用 POST 方法
标签: flutter dart listview dart-async