我有一个从ChangeNotifier继承的对象列表。我删除了这些类型只是为了简化内容。
class TaskListsState with ChangeNotifier {
List _lists = List();
_currentList;
List get lists => _lists;
get currentList => _currentList;
set lists(List newValue) {
this._lists = newValue;
notifyListeners();
}
set currentList(newValue) {
this._currentList = newValue;
notifyListeners();
}
TaskListsState() {
this._lists = [
ToDoListState(),
ToCreateListState(),
ToDecideListState(),
BalancedMeListState()
];
this._currentList = this._lists[0];
}
}
所有对象都继承自基类,但是通常,这是它们的外观
class ToCreateListState with ChangeNotifier implements TaskListState {
String title = "TO CREATE LIST";
String alias = "tocreate";
bool _loading = false;
List<TaskState> _tasks;
bool get loading => _loading;
List<TaskState> get tasks => _tasks;
set tasks(List<TaskState> newValue) {
this._tasks = newValue;
notifyListeners();
}
set loading(bool newValue) {
_loading = newValue;
notifyListeners();
}
ToCreateListState();
removeTask(TaskState task) {
this._tasks.remove(task);
notifyListeners();
}
}
现在,当我更新列表对象之一时,它们不会在UI中更新。我该如何解决?
当前,这是我在视图中的使用方式:
MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => TaskListsState(),
),
],
child: MaterialApp(
title: '',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
fontFamily: 'Montserrat',
visualDensity: VisualDensity.adaptivePlatformDensity,
),
initialRoute: defaultHome,
onGenerateRoute: onGenerateRoute,
),
);
然后,当我想使用屏幕中的一项时,我会Provider.of<TaskListsState>(context).lists[index].whateverValue =. anotherValue;
但是,它不会更新。
答案 0 :(得分:2)
运行sex
时不会调用Provider.of<TaskListsState>(context).lists[index].whateverValue =. anotherValue;
,因为它不会更新notifyListeners()
本身。
您可以简单地在lists
内创建一个为您进行修改的方法,然后调用TaskListsState
notifyListeners()
您应将class TaskListsState with ChangeNotifier {
...
void updateWhateverValue(int index, dynamic value) {
lists[index].whateverValue = value;
notifyListeners();
}
...
}
替换为您拥有的对象。
答案 1 :(得分:0)
这是另一种解释: 想象一下我们有这个班
class Products with ChangeNotifier
{
List<String> prods =new List() :
List<String> getProds => prods;
Void addprod()
{
prods.add('chocolate');
prods.add('beer');
notifyListeners();
}
Products()
{
addprod();
}
}
因此,我们有一个已经有两个产品的类产品。
如果我们致电
,则删除产品的情况 Provider.of<Products>(context)().products.remove('beer')
啤酒将被删除,但所有其他消费者将不会得到通知,因为remove是预定义的函数,在Products类中不作为通知程序存在。
确保每次调用函数时,它实际上是在更新数据模型类中的某些内容,以便您可以注意到更改。
希望能阐明您的愿景。