Flutter Firestore数据仅本地缓存 未同步至Firebase控制台问题
问题概述
开发Flutter应用时,尝试将条目存入Firestore用户专属子集合,数据仅保存在设备本地缓存,Firestore控制台始终无数据,日志持续输出:
[WatchStream]: (be43146) Stream closed with status: Status{code=NOT_FOUND, description=The database (default) does not exist for project <project_name> Please visit https://console.cloud.google.com/datastore/setup?project=<project_name> to add a Cloud Datastore or Cloud Firestore database. , cause=null}
已完成的操作:
- 已在Firebase控制台配置Firestore,确认使用正确的
google-services.json - 已通过
Firebase.initializeApp()成功初始化Firebase - Firestore规则设置为允许已认证用户读写:
service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } }
- 数据添加函数逻辑无明显问题,调用后文本框能正常清空:
void addUrl() async { if (urlController.text.isNotEmpty) { final currentUser = auth.currentUser; if (currentUser != null) { await firestore .collection('users') .doc(currentUser.uid) .collection('urls') .add({ 'url': urlController.text, 'timestamp': FieldValue.serverTimestamp(), }); urlController.clear(); } else { developer.log("User is not signed in"); } } }
解决方案
1. 确认Firestore数据库已完整创建
日志提示"数据库不存在",核心原因大概率是Firebase控制台中仅开启了Firestore服务,但未完成数据库实例的创建流程:
- 进入Firebase控制台的Firestore页面,确认已完成数据库创建步骤(选择"测试模式"或"生产模式"、设置数据库位置、完成初始化)
- 若数据库处于"未创建"状态,重新完成创建流程
2. 更新项目配置文件
创建Firestore数据库后,项目配置文件会包含数据库的相关信息,旧文件可能缺失该内容:
- 从Firebase控制台重新下载最新的
google-services.json - 替换Flutter项目中
android/app目录下的旧文件 - 清理项目缓存后重新编译运行
3. 添加错误捕获,定位上传异常
当前代码未处理上传时的异常,无法直接获取上传失败的具体原因,修改函数添加错误捕获:
void addUrl() async { if (urlController.text.isNotEmpty) { final currentUser = auth.currentUser; if (currentUser != null) { try { await firestore .collection('users') .doc(currentUser.uid) .collection('urls') .add({ 'url': urlController.text, 'timestamp': FieldValue.serverTimestamp(), }); urlController.clear(); print("数据上传成功"); } catch (e) { print("数据上传失败:$e"); } } else { developer.log("用户未登录"); } } }
运行后查看控制台输出的异常信息,能更精准定位问题。
4. 验证Firestore实例引用
确保代码中使用的是默认Firestore数据库实例:
- 确认代码中
firestore变量是FirebaseFirestore.instance,而非自定义的其他数据库实例 - 若有自定义实例配置,检查是否指定了错误的数据库名称
5. 更新Firebase依赖版本
旧版本的Firebase Flutter插件可能存在兼容性问题,导致数据库连接异常:
- 在
pubspec.yaml中更新firebase_core、cloud_firestore到最新稳定版 - 执行
flutter pub get更新依赖,清理项目后重新运行
6. 测试离线缓存(可选)
Firestore默认启用离线缓存,会将未上传成功的数据保存在本地。可临时禁用缓存测试是否直接报错:
// 在Firebase初始化后添加 FirebaseFirestore.instance.settings = const Settings( persistenceEnabled: false, );
测试完成后记得恢复缓存设置,离线缓存是重要的用户体验功能。
内容的提问来源于stack exchange,提问作者szczodralama

