问题描述
我对 Flutter 很陌生,尤其是 ChangeNotifierProvider。我有很多扩展 ChangeNotifier 的 AModel 实例。这些对象位于包含列表 listofModels 的类中。此类还扩展了 ChangeNotifier。这是因为我想在 AModel 中的某些内容发生更改时使用 AModel 重建单个 Widget,并且我想在列表本身发生更改时重建整个 Widgets 树。 因此,当我必须重建所有小部件时,我使用以下代码:
Widget getWidget(List<AModel> listofModels) {
final List<ChangeNotifierProvider<aModel>> rootWidgets = [];
for (var model in listofModels.where((e) => e.foo == bar)) {
rootWidgets.add(ChangeNotifierProvider(
create: (context) => model,child: Padding(
padding: EdgeInsets.all(5),child: Consumer<AModel>(
builder: (context,myModel,child) {
return AStatelessWidget(
internalWidget:
getChildWidget(listofModels,myModel.id),id: myModel.id,name: myModel.name,onTap: _selectdeselect,onDelete: _delete,selected: myModel.selected
);
}))));
}
return Row(children: <Widget>[Container()] + rootWidgets);
}
Widget? getChildWidget(
List<AModel> listofModels,int? fatherId) {
if (fatherId == null) return null;
var col = Wrap(
direction: Axis.vertical,children: [],spacing: 5,runSpacing: 5,alignment: WrapAlignment.start);
for (var model in listofModels.where((e) => e.fatherId == fatherId)) {
col.children.add(ChangeNotifierProvider(
create: (context) => model,selected: myModel.selected
);
}))));
}
return col.children.length == 0 ? null : col;
}
当我将元素添加到 listofModels 时,一切似乎都正常了。我可以选择和取消选择 AStatelessWidget 仅执行该单个小部件的重建。当我尝试从 listofModels 中删除一个元素时,问题就出现了。出于某种原因,消费者仍然访问旧的 AModel 实例。假设我遇到了这种情况:
我想删除 Z5。我希望在 Y2 内只看到两个矩形。一种用于 Z4,一种用于 Z6。反而出现了Z5……为什么?谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)