Flutter - 不要跨异步间隙使用 BuildContexts

Flutter - Do not use BuildContexts across async gaps

在我的 flutter Api 中,我有如下代码,但 lint 2.0.1 在 Navigator.pushnamed(context

处警告我

Do not use BuildContext across async gaps

这个 有一些信息,但如果我尝试使用该解决方案,我会收到一个错误,提示 mounted is undefined。我不知道如何按照下面的答案将我的 Api class 转换为 StatefulWidget。

class Api {

Future<List<Author>> getAuthors(BuildContext context) async {
List<Author> authors = [];

try {
  final response = await _helper.get(context, "/authors");

  if (response.statusCode == 200) {
    var parsed = json.decode(response.body);

    if (parsed is List<dynamic>) {
      for (var author in parsed) {
        authors.add(Author.fromJson(author));
      }
    }
  } else {
    Navigator.pushNamed(context, RoutePaths.login);
    return authors;
  }
} catch (e) {
  return authors;
}

return authors;
}
}

更改为 StatefulWidget 而不是 StatelessWidget。这将为您提供要使用的 mounted 变量。

编辑:

基于您的评论和您的第一次编辑。您之前将那段代码 (class Api) 排除在外。现在它显示了您的代码中的一些结构性问题。您将 ui 代码与您的业务逻辑混合在一起。您在这里使用的是 BuildContext,它来自您的小部件!

不要在这里做路由。您不应该在此 class 中使用 BuildContext!我强烈反对这样做。但是,如果您愿意,请尝试将 mounted 标志从调用此“Api-class”的小部件传递到此 class,然后看看会发生什么。再一次,我强烈反对这样做。