我有一个Textfield、一个搜索按钮和一个ListView.Builder.当我点击搜索按钮时,系统会请求获取一些数据,并将其放入列表中.我希望ListView使用我们发回的数据进行更新,但这并没有发生.我认为问题是setState
个唯一的工作在树下,这两个小部件在不同的子树中.对吗?也许我需要更改小部件的 struct 才能使其正常工作?
void _updateLocationOptions(List<Location> locations) {
locationOptions.clear();
locationOptions = locationOptions.toList();
setState(() {
locationOptions = locations;
});
}
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: TextFormField(
key: const ValueKey("locationField"),
onChanged: (String value) {
setState(() {
locationFieldController.text = value;
});
},
),
),
IconButton(
onPressed: () async {
final res = await eventsRepo.fetchLocationOptions(client, locationFieldController.text);
_updateLocationOptions(res);
print("locationOptions: $locationOptions"); // Correct value
},
icon: const Icon(Icons.search),
),
],
),
ListView.builder(
shrinkWrap: true,
itemCount: locationOptions.length,
itemBuilder: (BuildContext context, int index) {
if (locationOptions.isEmpty) {
return null;
}
return Text(locationOptions[index].name!);
},
),
],
),
如果我执行热重新加载,我可以获得要在屏幕上显示的正确数据,但不会自动显示所需的数据.