如果我直接调用Navigator.pushname方法,我会收到一条消息,告诉我不要跨异步间隙使用‘BuildContext’.我不知道如何解决这个问题并移动到下一个屏幕. 这就是代码

                color: Colors.blueAccent,
                title: 'Register',
                onPressed: () async {
                  try {
                    final newUser = await _auth.createUserWithEmailAndPassword(
                        email: email, password: password);
                    if (newUser.user != null) {
                      await Future.delayed(Duration.zero);
                      Navigator.of(context).pushNamed(ChatScreen.id);
                    }
                  } catch (e) {
                    print(e);
                  }
                },
              ),
    ```

推荐答案

在Widget的同步操作期间执行异步任务时,必须判断该Widget是否仍然可用.

对于您的情况,在第Navigator行之前添加此行

if (!mounted) return;

通过这样做,您判断当前的Widgetmounted and usable.如果Widget正在重建或销毁,判断它是否已挂载将返回false.

如果返回true,则表示Widget已准备就绪,您几乎可以在任何地方使用异步/同步任务.

如果这没有帮助或不适合您的情况,请让我知道,我会提供更多的支持,快乐的编码!

Flutter相关问答推荐

创建多个具有适当填充和对齐的按钮的最佳方法

ListTile未正确显示在flutter中

为什么我不能看到类音频源在flutter?'

如何创建一个按钮来在Ffltter Webview中转到上一页?

Riverpod状态管理-在调用请求时更新用户界面

为什么要在值列表中两次放入空安全性

如何在不注销的情况下刷新Firebase身份验证用户

如何让两个展开的Widget根据其子窗口的屏幕大小

Flutter GestureDetector单击问题-堆叠外面的按钮不可点击

Flutter 未处理的异常 - 对 null 值使用 Null 判断运算符

自定义绘画未显示 - Flutter

通过在父窗口小部件功能上设置状态来浏览屏幕

在 flutter 中获取最喜欢的文档

如何从底部导航栏打开 bottomModal 表?

当项目较少时收缩列表视图

Flutter snapShot.hasData 为假但响应有数据

如何从 Firebase `get()` 获取 `DocumentReference`

如何使用列Flutter 中文本占用的空间来控制svg宽度

使用 Chaquopy 插件后 Gradle Sync 无法正常工作

参数类型Future>不能分配给参数类型Future>?