我有NewEditProductScreen
是从ProductsScreen
(这是BottomNavigatorBar
的屏幕之一)中的按钮推动的。
Navigator.push(
context,
MaterialPageRoute(
builder: (_) =>
BlocProvider.value(
value: BlocProvider.of<
ProductBloc>(context),
child: NewEditProductScreen(
type: 'New',
user: widget.user,
cityDb: widget.cityDb,
regionDb: widget.regionDb,
countryDb:
widget.countryDb),
),
),
);
在NewEditProductScreen
中,有一个按钮发送以阻塞SaveProduct
事件以将产品表保存到sembast中,并显示一个包含Dialog
的{{1}}。
CircularProgressIndicator
然后在 showDialog(
context: context,
barrierDismissible: false,
useRootNavigator: true,
builder: (BuildContext context) {
return Dialog(
child: new Row(
mainAxisSize: MainAxisSize.min,
children: [
new CircularProgressIndicator(),
new Text("Saving product"),
],
),
);
},
);
收到BlocListener
状态时,我用通常的ProductSaved
关闭屏幕。
Navigator.pop(context)
问题是if (state is ProductSaved) {
Navigator.pop(context);
}
停留在屏幕上。
如果我将CircularProgressIndicator
参数设置为false,那么该对话框将被关闭,而useRootNavigator:
不会。
为什么要也解雇NewEditProductScreen
,我也必须打电话给Dialog
Navigator.of(context, rootNavigator: true).pop(context);
吗? BlocListener
和Navigator
是否引用同一个导航器? ..我想我误解了一些基本的Navigator概念。
Navigator.of
是因为推动if (state is ProductSaved) {
// pops CircularProgressIndicator Dialog
Navigator.of(context, rootNavigator: true).pop(context);
// pops the screen
Navigator.pop(context);
}
的{{1}}与显示对话框的那个不同吗?请帮助我理解这一点。
非常感谢。