我有一个异步功能来注销,它等待呼叫,然后它重定向到第一个屏幕. Linter抱怨我正在访问上下文对象以判断它是否已挂载,但我只是判断它是否已挂载,以便继续.正因为如此,我发表了一条忽略的 comments :

  _logOut(BuildContext context) async {
    await Supabase.instance.client.auth.signOut();

    // ignore: use_build_context_synchronously
    if (!context.mounted) return;

    Navigator.of(context)
        .pushNamedAndRemoveUntil(Intro.routeName, (_) => false);
  }

问题是:我不知道在这种非常特殊的情况下忽视是否安全.你能确认一下吗?有没有其他方法可以更干净地实现这一点?

推荐答案

这是一个实验性的皮棉规则,你所做的实际上是推荐的.

在以后的版本中,它可能会在Flutter 中得到修复.

您可以在下面访问更多信息

https://dart-lang.github.io/linter/lints/use_build_context_synchronously.html

编辑: 由于以下代码不会产生LINT警告,因此计算方式似乎存在一些分析错误

 _logOut(BuildContext context) async {
    await Future.delayed(const Duration(seconds: 8));

    if (context.mounted) {
      Navigator.of(context).pushNamedAndRemoveUntil(Intro.routeName, (_) => false);
    }
  }

但如果添加任何带有context.mounted的运算符,则会出现警告.例如if(!context.mounted)if(context.mounted ==false).

我也在DART-SDK上打开了一个GitHub问题. https://github.com/dart-lang/linter/issues/4223

Flutter相关问答推荐

无法将Flutter 连接到Firebase

Flutter 中的面向对象模式

如何在Firebase项目中更改包名称和包ID

在fltter_widget_from_html中启动url

如何将Xpriter代码页更改为代码页27?

无法在我的Flutter 应用程序中使用GoRouter测试导航

为什么在setState之后Ffltter Pageview重置为第0页

Flutter :URI的目标不存在

如何将请求字段正确添加到DART多部分请求

Wired Firebase错误-[CLOUD_FIRESTORE/UNAvailable]该服务当前不可用

在使用FutureProvider时,我想显示用于加载的指示器,但无法自定义大小

为什么我的Flutter 动画过渡没有发生?

尽管 onCollision 处理了我的角色还是从平台上掉了下来

如何在 Flutter 中以背景 colored颜色 制作圆圈的一部分

如何在两个不同的路由(屏幕)之间正确设置 BlocProvider?

Flutter 构建方法使用的是旧版本的变量?

Banner Ad.test 广告单元 ID 是否已过时?

Flutter Firestore 数据库排序最近 24 小时内最喜欢的文档

setState 不会在第一次更新 - Flutter

Flutter 评级栏包选中和未选中的容器