You need to enable JavaScript to run this app. Flutter 2.2.2使用injectable调用SharedPreferences出现空检查错误
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 2.2.2使用injectable调用SharedPreferences出现空检查错误

问题根因

错误栈指向MethodChannel.binaryMessenger为空触发非空断言异常,本质是你在Flutter框架完成底层初始化之前,就调用了依赖原生Platform Channel的SharedPreferences.getInstance()方法,配合injectable的@preResolve注解提前解析异步依赖时,也没有对齐初始化时序。

可行解决方案

第一步:对齐main函数初始化顺序

修改main.dart,在执行任何依赖原生通道的操作前,优先初始化Flutter框架绑定,示例代码如下:

void main() async {
  // 必须放在所有异步操作前,完成Flutter底层绑定初始化
  WidgetsFlutterBinding.ensureInitialized();
  
  // 再执行injectable的依赖注入初始化
  await configureDependencies(); // 替换为你的injectable初始化方法名
  
  runApp(const MyApp());
}

第二步:匹配依赖版本

你使用的是Flutter 2.2.2稳定版,需使用适配2.x版本的shared_preferences,推荐锁定版本为shared_preferences: ^2.0.15,避免高版本依赖不兼容导致的通道初始化异常。

第三步:清理缓存重新生成配置

执行以下命令清理旧的构建缓存,重新生成injectable代码:

flutter pub run build_runner clean
flutter pub run build_runner build --delete-conflicting-outputs

兜底兼容方案

如果上述操作后仍有异常,可以取消@preResolve注解,改为懒加载获取SharedPreferences,规避启动阶段的初始化时序问题:

@module
abstract class ThemeModule {
  Future<SharedPreferences> get prefs async =>
       await SharedPreferences.getInstance();
}

使用时通过getIt.getAsync<SharedPreferences>()异步获取实例即可。

内容的提问来源于stack exchange,提问作者user8819119

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:45:05