我在The the中使用的方法看起来像这样,并将项目添加到列表视图中:
provider
对于UI,整个屏幕都包裹在一个void addEntry(http.Response response) {
Group group = Group.fromJson(jsonDecode(response.body));
groups.add(group);
notifyListeners();
}
中。从屏幕上的按钮调用此方法正常工作,并且列表已更新。从使用
Consumer
创建的弹出窗口调用此方法不会更新UI。
如何确保通知UI的更改?
update#1:
我有一个按钮,可以打电话showModalBottomSheet
这样:
showModalBottomSheet
因此,它创建了一个带有单独的小部件的弹出窗口。当按下另一个按钮时,该单独的小部件依次执行此操作:
showModalBottomSheet<void>(
...
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.of(context).viewInsets,
child: AddWidget(model: Provider.of<GroupsProvider>(context)),
);
},
);
这种方法最终调用
widget.model.createGroup(name, icon);
。正如我所说的,如果没有弹出弹出,这一切都很好,但在弹出窗口中根本不起作用:/
topersheets之类的pop-ups很可能是从根导航器打开的,因此提供了不同的上下文,如果未在根导航器上方(即材料应用上方)上方创建您的提供商,它将导致此问题。 来自the的
addEntry
在调用
context
之前,您可以创建对提供商的引用,然后将其传递给addwidget.
builder
使用
showModalBottomSheet
并用它包裹小部件。
showModalBottomSheet
var provider = Provider.of<GroupsProvider>(context, listen:false);
showModalBottomSheet<void>(
...
context: context,
builder: (context) {
return Padding(
padding: MediaQuery.of(context).viewInsets,
child: AddWidget(model: provider),
);
},
);