Flutter 具有嵌套使用者的特定实例的ChangeNotifierProvider
我对弗利特是个新手,尤其是ChangeNotifierProvider。我有很多AModel的IStance,它们扩展了ChangeNotifier。这些对象位于包含模型列表的类中。此类还扩展了ChangeNotifier。这是因为当AModel中的某些内容发生变化时,我希望使用AModel重建单个小部件,当列表本身发生变化时,我希望重建整个小部件树。 因此,当我必须重建所有小部件时,我使用以下代码: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
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出现了…为什么?谢谢