如何在不使 main() 异步的情况下将异步对象注册到 get_it 包?

Posted

技术标签:

【中文标题】如何在不使 main() 异步的情况下将异步对象注册到 get_it 包?【英文标题】:How can I register the async object to get_it package without making the main() async? 【发布时间】:2021-05-05 09:20:31 【问题描述】:

我想在 get_it 包中注册 SharedPrefrences 对象,以便从应用程序的所有地方访问它,而不是使 main() 异步。

    方法对吗? 我该怎么做?

我就是这样做的,但是它抛出了一个异常。代码:

  appLocator.registerLazySingletonAsync<SharedPreferences>(() async 
    final sh = await SharedPreferences.getInstance();
    return sh;
  );

例外:

未处理的异常:'package:get_it/get_it_impl.dart':失败 断言:第 342 行 pos 14:'instanceFactory.isReady':你试图 访问尚未准备好的 SharedPreferences 实例

【问题讨论】:

您是否尝试过使用StreamProvider 我在我的项目中使用了flutter_bloc。但是我不知道如何使用 RepositoryProvider 来处理依赖注入。 无法帮助您解决flutter_bloc :( 【参考方案1】:

你有什么理由不想让你的主异步?使您的主要方法异步没有任何问题。它在您将看到的大多数项目中完成。

我是一名专业的 Flutter 开发人员并且使用 get_it,它的影响为零,所以我不明白你为什么不这样做。

【讨论】:

好的。它没有性能问题。但是,异常呢?我该如何解决?

以上是关于如何在不使 main() 异步的情况下将异步对象注册到 get_it 包?的主要内容,如果未能解决你的问题,请参考以下文章

C# 中有没有办法在不使调用者也异步的情况下调用异步方法? [复制]

您可以在不使其无状态的情况下将 Spring Security 与 REST 服务一起使用吗?

如何在不返回 Promise 的情况下从对象的`get()` 获取异步数据

Flutter:如何在不阻塞 UI 的情况下异步地从资产中读取文件

如何在不重新加载页面的情况下将用户重定向到 redux saga 上的另一个页面

我们如何在不将 ViewController 对象推入其中的情况下将对象分配给 `UINavigationController`。