- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在同步提供程序创建时遇到问题。我是 Flutter 的新手,我会尽力解释得更好。
在我的 main.dart 中,我有两个提供程序,一个用于用户身份验证,一个用于代码中的另一个小部件,它只是有一个要显示的列表。我使用 ChangeNotifierProxyProvider,因为所有其他提供商都需要访问用户身份验证 token 和详细信息。用户存储、读取 token 的所有方法都在 userProvider 中。
当调用 UserProvder.init() 时,对象已创建但由于 http 请求仍未准备就绪,主代码中的代码继续执行并将 UserProvider 传递给认为 UserProvider 已准备就绪的 Conto Provider 但它是不是。当 ContoProvider 开始使用 UserProvider 中的 token 检索列表时,通过 userService 访问失败了调用,因为它仍然为 null。
那么,我怎样才能同步提供者的创建,以便等待 UserProvider 完全准备好,然后初始化所有其他提供者?
主.dart
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<UserProvider>(
create: (_) => UserProvider.init(),
),
ChangeNotifierProxyProvider<UserProvider, ContoProvider>(
create: (_) {
return ContoProvider.init(
Provider.of<UserProvider>(_, listen: false));
},
update: (_, userProvider, contoProvider) =>
contoProvider..update(userProvider),
),
],
child:...
userProvider.dart
User activeUser = User(null, null, null);
UserStatus status = UserStatus.Checking;
UserProvider.init() {
checkUserPresence();
}
void checkUserPresence() async {
/*here i check if in secure storage there is a refreshtoken if there is i make an http
request for a new token and a second request to fill the User into UserProvider so i need await async*/
}
ContoProvider.dart
UserProvider userService;
ContoProvider.init(UserProvider user) {
userService = user;
lookUpConti();
}
void lookUpConti() async {
/*here i make an http call to retrive some data, i access to
userService for get token and refresh token if needed*/
}
最佳答案
您可以使用WidgetsFlutterBinding.ensureInitialized()
void main() {
/** WidgetsFlutterBinding.ensureInitialized() is required in Flutter v1.9.4+ before using any plugins if the code is executed before runApp. */
WidgetsFlutterBinding.ensureInitialized();
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider<UserProvider>(
create: (_) => UserProvider.init()),
ChangeNotifierProxyProvider<UserProvider, ContoProvider>(
create: (_) {
return ContoProvider.init(
Provider.of<UserProvider>(_, listen: false));
},
update: (_, userProvider, contoProvider) =>
contoProvider..update(userProvider),
),
],
child: MyApp(),
),
}
PS:我建议您将存储库与提供商分开。也就是说,不应在您的提供商中找到对外部/网络资源的 API 调用。您可以将此类作为参数传递给您的提供者。
关于Flutter 等待 Provider 在 multiprovider 中准备就绪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60597905/
在我的Kubernetes设置上,我有2个服务-A和B. 服务B取决于完全启动服务A。 我现在想在服务B的Pod中设置一个TCP就绪探针,以便他们测试服务A的Pod是否已完全运行。 Service B
我有一个类(LoadClass),它在页面加载时初始化,并在我的例子中打开一个 SQLite 数据库并执行几个查询。现在我希望其他组件仅在 LoadClass 先前完成加载数据库时执行代码,但这必须随
我有两个应用程序 - app1 和 app2 ,其中 app1 是 config server保存 的配置app2 .我已经定义了 /readiness端点在 app1 并且需要等到它返回 OK启动
我的页面中有一个 iframe,我正在向该 iframe 提交我的表单,因此在 iframe 完成加载后,我需要在每次 iframe 完成加载内容时触发一个函数。 我试过使用 ready 和 load
我正在尝试制作一款游戏。玩家单击“就绪”后,我希望“就绪”框消失(现在,如果您单击就绪框内部,则不会发生任何事情,我不确定为什么)并生成一个随机矩形(随机 x 和 y 坐标)。玩家在第一个矩形的墙壁内
我有另一个 JW Player 问题...我已经实现了 JW Player 以在单击按钮时替换页面顶部的图像。该代码如下所示: Watch now $( ".button-watch1" ).cli
有谁知道我可以在不加载整个框架的情况下使用的优秀 javascript DOM 就绪库?我在 google code 上找到了一个这似乎可行,但该库是在 2008 年发布的,我找不到关于最新跨浏览器支
我在 docker-library/healthcheck 看到了 RabbitMQ 的 docker healthcheck 示例. 我想对我的 Kubernetes 部署应用类似的机制,以等待 R
有人可以解释一下为什么警报语句在这种情况下使用时不会返回任何内容: $(document).ready(function(){ $.get("/getsomedata.php", functi
我已经在一个项目上独立工作了一段时间,现在,由于各种原因,新的开发人员可能会加入该项目。 当然,我使用版本控制软件,但我担心将我的项目导入 Eclipse 并使其运行对新手来说可能有点困难,我希望它尽
我只是想知道是否有人对使用 Promise 时 Node JS 中的“确保就绪”模式有什么好的想法。我有类似的东西,但我认为它的主要问题是我认为 promise 的 .then(cb) 实际上覆盖了前
我知道这是这里的一个常见问题,但我已经对之前回答的问题进行了研究,但似乎找不到我的错误。 作为我正在制作的应用程序的一部分,当页面加载时, document.ready 函数应该查看无序列表中的每个列
谷歌 Ajax 爬虫说明说 !# 实际上被谷歌爬虫转化为 ?_escaped_fragment_。 我想准备我的 Vaadin 7 应用程序以便为 Google 搜索引擎做好 SEO 准备,所以您能否
问题是关于 http://labjs.com – 一个很棒的非阻塞 JavaScript 加载和依赖管理库。 我已经阅读了文档,但我一定是太累了或者什么的——我找不到任何关于 DOM 就绪事件的信息。
我通过 TCP/IP - SOCKET 发送数据 (ZPL) 代码。如果 zebra 打印机在线并准备就绪,我想检查 zebra 打印机的状态。 我谷歌了,但没有找到解决方案。 我知道斑马打印机的静态
我正在尝试连接 JFUSE 项目中的数据库。我在 pom 文件中包含了 com.mysql.jdbc 依赖项,项目构建运行良好。但是后来我遇到了这个烦人的问题。当我尝试将 bundle 安装到 OSG
我有一个条目列表。当我点击这样一个条目时,一个 HTTP 请求就完成了,数据将被加载并显示在一个表格中。到目前为止一切顺利。 现在我尝试创建一个导出函数来一次输出所有表。抽象代码如下所示: this.
我正在创建 CI/CD 管道。 我跑 helm install --wait --timeout 300 ... .但这并没有真正等待,只是在“发布”状态为 DEPLOYED 时返回。 . 那么我在
现在 Storm Spouts 有一个 open 方法来配置它们,而 Bolts 有一个 prepare 方法。有没有办法让所有 Spout 实例等待 Bolt 上的所有 prepare 方法完成监听
要等待某个 pod 完成,命令是 kubectl wait --for=condition=Ready pod/pod-name 同样,我想等待 statefulset 中的任何一个 pod 准备就绪
我是一名优秀的程序员,十分优秀!