我有一个任务管理器应用程序,该应用程序在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包。

07-27 23:00