为什么Dialog需要关闭Navigator.of(context,rootNavigator:true).pop(context)?扑

时间:2020-07-05 20:28:54

标签: flutter dialog navigator

我有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);吗? BlocListenerNavigator是否引用同一个导航器? ..我想我误解了一些基本的Navigator概念。

Navigator.of

是因为推动if (state is ProductSaved) { // pops CircularProgressIndicator Dialog Navigator.of(context, rootNavigator: true).pop(context); // pops the screen Navigator.pop(context); } 的{​​{1}}与显示对话框的那个不同吗?请帮助我理解这一点。 非常感谢。

0 个答案:

没有答案