gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:09:37 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com