无论用户在应用程序中的何处,如何打开Flutter对话框

时间:2019-01-08 06:25:32

标签: dart dialog flutter flutter-navigation

我正在开发Flutter项目,无论用户在应用程序中的哪个位置,我都需要能够向用户显示对话框。目前,我正在main()启动的根级窗口小部件中执行showDialog()函数。
  该小部件实现了WidgetsBindingObserver,因此我可以通过didChangeAppLifecycleState()函数侦听应用程序从后台移至前景的时间。每当发生这种情况时,我都会向服务提供商提出请求,并根据结果需要显示一个对话框。
  每当发生这种情况时,都会将用户导航到其他路线,这似乎使我陷入麻烦。下面是执行API调用和随后的showDialog()尝试的精简函数。但是什么也没有发生。我尝试将其包装在2秒钟的计时器中,以为这可能只是重新回到前台的问题,但这并没有改变。

void _fetchSuperAwesomeStuff() {
  final apiCaller = new SuperAwesomeStuffAPI();
  apiCaller.fetchSuperAwesomeStuff().then((List<SuperAwesomeStuff> superAwesomeStuffs) {
    if (superAwesomeStuffs != null && superAwesomeStuffs.length > 0) {
      SuperAwesomeStuff superAwesomeStuff = superAwesomeStuffs[0];

      // .... DOING STUFF WITH THIS SUPER AWESOME STUFF .... //

      // NEED TO SHOW A DIALOG.
      showDialog(
        context: context,
        builder: (_) => new AlertDialog(
          title: Text('Test Title'),
          actions: <Widget>[
            new FlatButton(
              onPressed: () {
                Navigator.pop(context);
              },
              child: new Text('Close'),
            ),
          ],
        ),
      );
    }
  });
}

任何帮助,将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

您需要为BuildContext变量传递一个context,并且在进行调用时需要在树中挂载该上下文(对应的元素)。

或者,您可以将消息/流从您的超棒逻辑发送到具有上下文并侦听该流的应用程序的任何部分。从这里可以调用对话框。