Flutter 颤振提供者选择-如何处理复杂的返回类型,如列表或映射

Flutter 颤振提供者选择-如何处理复杂的返回类型,如列表或映射,flutter,dart,flutter-provider,state-management,Flutter,Dart,Flutter Provider,State Management,我正在尝试使用,但在上下文方面遇到问题。当返回的类型是具有未更改引用的复杂对象(如Map或List)时,请选择()。 即使我通知侦听器我的模型,我的小部件也不会重建,我怀疑这是因为我在原地修改我的对象 下面是一个简单的代码 类MyModel扩展了ChangeNotifier{ 最终列表=[0,1,2,3,4,5]; 无效推送(){ //在这里,我就地修改列表,即使调用'notifyListeners()`,'MyWidget`也不会重新生成 list.add(list.length); noti

我正在尝试使用,但在
上下文方面遇到问题。当返回的类型是具有未更改引用的复杂对象(如
Map
List
)时,请选择()。 即使我通知侦听器我的模型,我的小部件也不会重建,我怀疑这是因为我在原地修改我的对象

下面是一个简单的代码

类MyModel扩展了ChangeNotifier{
最终列表=[0,1,2,3,4,5];
无效推送(){
//在这里,我就地修改列表,即使调用'notifyListeners()`,'MyWidget`也不会重新生成
list.add(list.length);
notifyListeners();
}
}
类MyScreen扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回ChangeNotifierProvider(
创建:()=>MyModel(),
子项:MyWidget(),
);
}
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
@凌驾
小部件构建(构建上下文){
//当列表被修改时它不会被重建,如果我添加
//context.select((myModel)=>myModel.list.length);
//比如说
//我怀疑这是因为'myModel.list'的引用没有改变
最终列表=context.select((myModel)=>myModel.list);
返回容器(
子:列(
儿童:[
文本(list.join(“,”),
文本按钮(
子项:常量文本('Add'),
已按下:(){
context.read().push();

//setState((){});您的
列表应该是不可变的:

class MyModel extends ChangeNotifier {
  List<int> list = <int>[0, 1, 2, 3, 4, 5];

  void push() {
    list = [...list, list.length];
    notifyListeners();
  }
}
类MyModel扩展了ChangeNotifier{
列表=[0,1,2,3,4,5];
无效推送(){
list=[…list,list.length];
notifyListeners();
}
}
否则,对象引用相同,小部件不会重新生成