Flutter:Future.wait()执行顺序异常,登录后Provider方法依赖执行失败
问题分析与修正
你的实现方式不正确,核心问题出在Future.wait的使用上:
Future.wait的作用是并行执行所有传入的Future任务,不会按你写的顺序等待前一个任务完成再执行下一个。也就是说fetchUser()和addLogData()会同时启动,这就导致addLogData()执行时,fetchUser()可能还没完成登录ID的赋值,自然拿不到需要的ID。- 你加的
Future.delayed完全无效:并行执行模式下,这个延迟不会影响另外两个任务的启动顺序,而且100微秒的延迟极不稳定,不能靠这种“赌时间”的方式保证依赖关系。
修正方案
要保证串行执行(先完成fetchUser()再执行addLogData()),直接用await依次调用即可(前提是这段代码所在的函数是async异步函数):
if (isLoginSuccess == true) { // 先等待fetchUser执行完成,确保登录ID已赋值 await context.read<UserProvider>().fetchUser(); // 此时登录ID已准备好,再执行日志插入 await context.read<LogProvider>().addLogData(actionId: 1); }
如果不想用await,也可以用then链式调用:
if (isLoginSuccess == true) { context.read<UserProvider>().fetchUser().then((_) { context.read<LogProvider>().addLogData(actionId: 1); }); }
这两种方式都能确保fetchUser()执行完毕并完成登录ID赋值后,才会执行addLogData(),满足你的需求。
内容的提问来源于stack exchange,提问作者user19976096
相关产品推荐
相关产品推荐

