我有一个任务管理器应用程序,该应用程序在ListView中显示了许多TaskWidget小部件,并且当前正在尝试修改我的应用程序以使用Provider进行状态管理。我有一个TaskListModel类作为ChangeNotifier类,其中包含TaskModel列表以及一些调用notifyListeners()的getter和setter。 (TaskModel不是ChangeNotifier)
当用户修改列表中单个任务的数据时,我想重建该窗口小部件而不重建列表中的所有其他窗口小部件。除了需要访问TaskModel中的所有字段以重建相应的TaskWidget之外,Selector几乎可以满足我的要求,而Selector似乎只能用于单个字段。我尝试通过使用列表索引将选择器设置为TaskModel的实例来使用选择器。我认为这是行不通的,因为它正在监听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,
),
]);
}
最佳答案
如the documentation of Selector所述,您应该创建一个自定义类或使用tuple
包。