Flutter应用从Firestore获取数据时出现providerinstaller相关报错如何解决
Local module descriptor class for providerinstaller not found.
D/ConnectivityManager(21222): requestNetwork and the calling app is: com.example.ecommerce
I/DynamiteModule(21222): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(21222): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
W/ConnectivityManager.CallbackHandler(21222): callback not found for CALLBACK_AVAILABLE messag
错误产生原因
- 核心是Google Play服务(GMS)异常:Firestore 依赖GMS的安全提供器组件,运行的设备/模拟器未安装GMS、GMS版本过旧、或GMS服务未正常运行时,就会加载失败providerinstaller模块,抛出该警告。
- 网络回调生命周期不匹配:ConnectivityManager的报错是因为原生层收到网络状态变更通知时,对应的回调实例已经被销毁,通常是Flutter侧的网络监听没有在组件销毁时主动取消,或是Firebase SDK内部的网络请求和原生层回调生命周期不对齐导致。
- Firebase初始化顺序错误:未等Firebase完全初始化完成就发起Firestore数据请求,会导致依赖的GMS模块还没加载就被调用,触发报错。
解决方法
- 校验运行环境:如果使用Android模拟器,需选择带Google Play标识的系统镜像,启动后登录Google账号并将Google Play服务更新至最新版本;如果是真机运行,确认设备预装了可用的GMS服务,国内无GMS的设备可开启Firestore离线持久化功能规避该报错,或适配无GMS环境的Firebase运行方案。
- 修正Firebase初始化逻辑:确保启动流程中先完成Flutter引擎和Firebase的初始化,再发起任何Firestore请求,参考初始化代码:
void main() async { WidgetsFlutterBinding.ensureInitialized(); // 等待Firebase初始化完成再启动应用 await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(const MyApp()); }
- 对齐依赖版本:检查
pubspec.yaml中所有Firebase相关依赖的版本匹配,同时保证android/build.gradle中的com.google.gms:google-services插件版本和Firebase SDK版本兼容,建议统一升级所有Firebase相关依赖到最新稳定版。 - 修复网络监听生命周期:如果项目中自行实现了网络状态监听逻辑,务必在StatefulWidget的
dispose生命周期中主动取消监听,避免原生层出现找不到回调的异常;如果使用第三方网络监听库,升级到最新版本即可解决该适配问题。 - 临时降级兼容:如果上述操作后仍有报错,可将
android/build.gradle中的GMS插件版本暂时降级到4.3.10,该版本对低版本GMS服务的兼容性更好。
内容的提问来源于stack exchange,提问作者Ahmed Sabahy
相关产品推荐
相关产品推荐

