【发布时间】:2021-09-28 08:30:46
【问题描述】:
我有一个 ListView.builder 小部件包裹在一个 RefreshIndicator 中,然后是一个 FutureBuilder。刷新不会更新我的列表,我必须关闭应用程序并再次打开它,但刷新代码与我的FutureBuilder 相同。
请在下面查看我的代码,当我阅读它时,我希望小部件树肯定会更新。
@override
void initState() {
super.initState();
taskListFuture= TaskService().getTasks();
}
@override
Widget build(BuildContext context) {
return Consumer<TaskData>(builder: (context, taskData, child) {
return FutureBuilder(
future: taskListFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
taskData.tasks = (snapshot.data as ApiResponseModel).responseBody;
return RefreshIndicator(
onRefresh: () async {
var responseModel = await TaskService().getTasks();
setState(() {
taskData.tasks = responseModel.responseBody;
});
},
child: ListView.builder(
...
...
如果需要更多代码,请告诉我,提前致谢!
积分
- 我正在使用 StatefulWidget
- 任务数据是一个扩展 ChangeNotifier 的类
- 调试刷新时,我可以在列表中看到新数据,但 UI 没有更新
getTasks()
Future<ApiResponseModel> getTasks() async {
try {
var _sharedPreferences = await SharedPreferences.getInstance();
var userId = _sharedPreferences.getString(PreferencesModel.userId);
var response = await http.get(
Uri.parse("$apiBaseUrl/$_controllerRoute?userId=$userId"),
headers: await authorizeHttpRequest(),
);
var jsonTaskDtos = jsonDecode(response.body);
var taskDtos= List<TaskDto>.from(
jsonTaskDtos.map((jsonTaskDto) => TaskDto.fromJson(jsonTaskDto)));
return ApiResponseModel(
responseBody: taskDtos,
isSuccessStatusCode: isSuccessStatusCode(response.statusCode));
} catch (e) {
return null;
}
}
【问题讨论】:
-
TaskService().getTasks()看起来怎么样? -
@rckrd 我刚刚添加了它