0

我正在开发一个 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'),
            ),
          ],
        ),
      );
    }
  });
}

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

4

1 回答 1

1

您需要BuildContextcontext变量传递 a,并且在进行调用时需要在树中安装该上下文(相应的元素)。

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

于 2019-01-08T08:02:58.233 回答