Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 具有嵌套使用者的特定实例的ChangeNotifierProvider_Flutter_State Management_Flutter Widget_Flutter State_Flutter Change Notifier - Fatal编程技术网

Flutter 具有嵌套使用者的特定实例的ChangeNotifierProvider

Flutter 具有嵌套使用者的特定实例的ChangeNotifierProvider,flutter,state-management,flutter-widget,flutter-state,flutter-change-notifier,Flutter,State Management,Flutter Widget,Flutter State,Flutter Change Notifier,我对弗利特是个新手,尤其是ChangeNotifierProvider。我有很多AModel的IStance,它们扩展了ChangeNotifier。这些对象位于包含模型列表的类中。此类还扩展了ChangeNotifier。这是因为当AModel中的某些内容发生变化时,我希望使用AModel重建单个小部件,当列表本身发生变化时,我希望重建整个小部件树。 因此,当我必须重建所有小部件时,我使用以下代码: Widget getWidget(List<AModel> listOfModel

我对弗利特是个新手,尤其是ChangeNotifierProvider。我有很多AModel的IStance,它们扩展了ChangeNotifier。这些对象位于包含模型列表的类中。此类还扩展了ChangeNotifier。这是因为当AModel中的某些内容发生变化时,我希望使用AModel重建单个小部件,当列表本身发生变化时,我希望重建整个小部件树。 因此,当我必须重建所有小部件时,我使用以下代码:

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,
    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 col.children.length == 0 ? null : col;
}
Widget-getWidget(列表

我想删除Z5。我希望在Y2中只看到两个矩形。一个用于Z4,一个用于Z6。相反,Z5出现了…为什么?谢谢