You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter调用含Firebase逻辑的StatefulWidget时崩溃提示Lost connection to device

问题根因

崩溃由两个核心问题触发:

  1. 你当前使用的x86安卓模拟器未预装Google Play服务,Firebase核心功能依赖该服务运行
  2. gRPC库与安卓系统内置的conscrypt安全库存在兼容性问题,SSL协商时调用不存在的getAlpnSelectedProtocol方法,抛出断言错误直接导致应用进程被杀
解决方案

1. 更换运行设备/模拟器(优先级最高)

  • 优先使用搭载Google Play服务的实体安卓设备测试,可直接解决90%以上的该类问题
  • 若必须使用模拟器,创建新模拟器时选择带Google Play标识的系统镜像(创建页Target列会明确标注Google Play),不要使用原生AOSP镜像,后者默认无Google服务组件

2. 修复gRPC兼容性问题

若更换设备后仍出现相同报错,在android/app/build.gradle文件的dependencies代码块中添加如下配置,强制使用兼容版本的gRPC库:

dependencies {
    implementation 'io.grpc:grpc-okhttp:1.46.0'
    // 原有其他依赖保持不变
}

3. 代码潜在问题修复

你当前的代码存在两处潜在异常风险,建议同步修改避免后续崩溃:

  • Firebase.initializeApp()建议放到应用入口main.dart的main方法中执行,不要放在页面的FutureBuilder内,避免重复初始化抛出异常
  • StreamBuilder中获取文档数据的代码增加空判断,避免文档为空时类型转换报错:
// 原有代码
Map<String, dynamic> items = snapshot.data!.data as Map<String, dynamic>;
// 修改为
Map<String, dynamic> items = (snapshot.data!.data() ?? {}) as Map<String, dynamic>;

4. 临时本地调试方案

若暂时没有可用的带Google服务的设备,可先开启Firestore离线持久化,禁用网络测试本地逻辑,在connectToFirebase方法初始化完database后添加:

await FirebaseFirestore.instance.disableNetwork();

功能测试完成后移除该行代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:30:01