Ben*_*Ben 1 provider selector dart flutter
我有一个任务管理器应用程序,它在 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,
),
]);
}
Run Code Online (Sandbox Code Playgroud)
正如Selector 的文档所述,您应该创建自定义类或使用包tuple。
要选择多个值而不必编写实现 == 的类,最简单的解决方案是使用元组中的“元组”:
Run Code Online (Sandbox Code Playgroud)Selector<Foo, Tuple2<Bar, Baz>>( selector: (_, foo) => Tuple2(foo.bar, foo.baz), builder: (_, data, __) { return Text('${data.item1} ${data.item2}'); } )
| 归档时间: |
|
| 查看次数: |
2019 次 |
| 最近记录: |