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

Flutter Firestore数据仅本地缓存 未同步至Firebase控制台问题

Flutter Firestore数据仅本地缓存,控制台无数据(NOT_FOUND错误)

问题概述

开发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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:01:05