【发布时间】:2020-05-01 15:06:13
【问题描述】:
我有一个任务管理器应用程序,它在 ListView 中显示许多 TaskWidget 小部件,目前我正在尝试修改我的应用程序以使用 Provider 进行状态管理。我有一个TaskListModel 类作为我的ChangeNotifier,它包含一个TaskModel 列表以及一些调用notifyListeners() 的getter 和setter。 (TaskModel 不是 ChangeNotifier)
当用户修改列表中单个任务的数据时,我想重建该小部件而不重建列表中的所有其他小部件。 Selector 几乎可以满足我的要求,只是我需要访问 TaskModel 中的所有字段来重建相应的 TaskWidget,而 Selector 似乎只适用于单个字段。我尝试通过使用列表索引将选择器设置为 TaskModel 的实例来使用 Selector。我认为这不起作用,因为它正在侦听 TaskModel 的引用(不会更改)而不是 TaskModel 中的所有字段。我有一个简单的方法来做到这一点吗?我已经在下面包含了 TaskWidget 的构建方法以供参考。
Widget build(BuildContext context) {
return Column(children: <Widget>[
Selector<TaskListModel, TaskModel>(
selector: (_, taskListModel) => taskListModel.taskList[index],
builder: (_, taskModel, child) {
print("rebuilding " + index.toString());
return Material(
color: taskModel.color,
child: ListTile(
title: Column(children: <Widget>[
Text(
taskModel.name,
style: _taskFont,
textAlign: TextAlign.center,
),
Text(
taskModel.formattedTime,
style: _taskFont,
textAlign: TextAlign.center,
),
]),
),
);
},
),
Divider(
height: 0.0,
),
]);
}
【问题讨论】:
标签: flutter dart selector provider