解决flutter移动开发中出现的不能异步间隙使用BuildContest的问题

79 阅读1分钟

解决flutter移动开发中出现的不能异步间隙使用BuildContest的问题。

网上搜了一圈没找到解决方法,自己没写出来,最后在ai的帮助下解决了这个问题,下面是我遇到的具体问题以及解决方法:

在一个需要弹窗的地方,由于这里使用showDialog会出现不能异步间隙使用BuildContext的问题,我的代码如下:

Widget build(
    BuildContext context) {
        return Scaffold(
          body:
            Row( 
              IconButton(
                onPressed: () async {
                  showDialog(
                    context: context,
                    builder: (BuildContext context) {
                      return AlertDialog(
                        title:Text('1'),
                        content:Text('2'),
                        actions:[
                        TextButton(
                          child:Text('3'),
                          onPressed:() async {
                            Navigator.pop(context);
                          }
                        )]
                       }
                    )
                )
               );
           }
解决方法如下:

在这种情况下,我们可以将BuildContext存储放在一个变量中,然后在异步操作中使用该变量。

Widget build(
    BuildContext context) {
        return Scaffold(
          body:
            Row( 
              IconButton(
                onPressed: () async {
                // 存储BuildContext 
                BuildContext dialogContext;
                showDialog(
                context: context,
                builder: (BuildContext context) {
                    dialogContext = context; // 存储BuildContext
                    return AlertDialog(
                        title:Text('1'),
                        content:Text('2'),
                        actions:[
                            TextButton(
                                child:Text('3'),
                                onPressed:() async {
                                    Navigator.pop(dialogContext); // 关闭弹窗,使用存储的BuildContext
                          }
                        )]
                       }
                    )
                )
               );
           }