Flutter cloud_firestore插件Android端事务执行报错求助
解决Cloud Firestore事务中“Provided document reference is from a different Firestore instance”错误
从你给出的错误日志和代码来看,核心问题是事务中使用的文档引用和执行事务的Firestore实例不是同一个,这是旧版cloud_firestore插件常见的实例管理bug,结合你的环境信息,我给你以下几个解决方案:
1. 确保事务全程使用同一个Firestore实例
虽然你的代码看起来用的是Firestore.instance单例,但旧版本的插件可能存在单例复用问题。可以显式保存实例引用,确保文档引用和事务调用用同一个实例:
// 先保存单例实例 final firestore = Firestore.instance; // 用同一个实例获取文档引用 final DocumentReference postRef = firestore.document('posts/post1'); // 用同一个实例执行事务 firestore.runTransaction((Transaction tx) async { DocumentSnapshot postSnapshot = await tx.get(postRef); if (postSnapshot.exists) { await tx.update(postRef, <String, dynamic>{'likesCt': postSnapshot.data['likesCt'] + 1}); } });
2. 升级cloud_firestore插件版本
你当前使用的cloud_firestore: 0.7.0+2是非常老旧的版本,这个版本存在不少已知的实例管理问题。建议升级到与你的Flutter版本兼容的最新稳定版:
- 修改
pubspec.yaml中的依赖:dependencies: cloud_firestore: ^0.14.0+2 # 选择适配Flutter beta 0.3.1的版本,可查看pub.dev的版本兼容说明 - 执行
flutter pub get更新依赖 - 清理项目缓存后重新运行:
flutter clean && flutter run
3. 检查是否存在多实例初始化
确保你的代码中没有手动创建多个Firestore实例(比如通过Firestore(app: someApp)的方式),所有Firestore操作都使用Firestore.instance单例,避免出现跨实例的文档引用。
另外,你的flutter doctor显示Android Studio未安装Flutter和Dart插件,虽然这不是直接导致事务错误的原因,但安装插件后能获得更准确的代码提示和错误检查,建议补上。
内容的提问来源于stack exchange,提问作者David Carr
相关产品推荐
相关产品推荐

