flutter - 从 Selector 访问多个字段(在 Flutter 中使用 Provider 状态管理时)?

标签 flutter dart selector provider

我有一个任务管理器应用程序,它在 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,
  ),
]);

  }

最佳答案

the documentation of Selector 所述,您应该创建一个自定义类或使用包 tuple

To select multiple values without having to write a class that implements ==, the easiest solution is to use a "Tuple" from tuple:

Selector<Foo, Tuple2<Bar, Baz>>(
  selector: (_, foo) => Tuple2(foo.bar, foo.baz),
  builder: (_, data, __) {
    return Text('${data.item1}  ${data.item2}');
  }
)

关于flutter - 从 Selector 访问多个字段(在 Flutter 中使用 Provider 状态管理时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59741405/

相关文章:

flutter - 又抛出异常: A AppNotifier was used after being disposed

android - Flutter - 如何将数据从网站解析为 ListView

android - 调试时失去与设备的连接

flutter - 如何在 flutter 中为小部件添加阴影?

jquery - 使用 jQuery 查找特定元素后面的元素

JQuery:属性选择器未按预期工作

android - “package :flutter/src/widegets/text. dart”:断言失败:第 235 行 pos 15: 'data ! = NULL ':不正确

Flutter自定义字体多重粗细无法正常工作

dart - Http响应正文中未显示阿拉伯字母- flutter

html - 有没有办法在 css 中选择一个打开的选择框?