相关疑难解决方法(0)

Firestore - 意外读取

伙计们,我在这里确实有一个有趣的问题,如果你们中的任何人能够帮助我,我会非常高兴。

我的应用流程是什么:

  1. 使用电子邮件、密码和其他一些详细信息注册:
  2. 用户 firebase 以对用户进行身份验证并通过电子邮件和密码创建帐户,同时我将用户的自定义数据写入数据库。
  3. 登录用户。

就是这样,这就是我所有的基本逻辑,据我所知,你怎么看我没有从数据库中读取任何信息。

现在......问题是,由于一些奇怪的原因,当我注册我的用户时,我要去firebase控制台查看我的数据库的使用情况,我会看到类似......对于创建的一个用户,我将有 1 次写入(正如我预期的那样很好),但也有13-20 次从 DB 读取

现在这就是我的问题,为什么我在进行身份验证和写入时会阅读firestorm?

这是我现在正在使用的数据库代码。

class DatabaseFirebase implements BaseDataBase {
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
  final FirebaseStorage _storage = FirebaseStorage.instance;

  FirebaseUser _firebaseUser;
  Firestore _firestore = Firestore.instance;

  @override
  Future<String> login(String email, String password) async {
    _firebaseUser = await _firebaseAuth.signInWithEmailAndPassword(
        email: email, password: password);
    return _firebaseUser.uid;
  }

  @override
  Future<String> register(String email, String password) async {
    _firebaseUser = await _firebaseAuth.createUserWithEmailAndPassword(
        email: email, password: password);
    return _firebaseUser.uid; …
Run Code Online (Sandbox Code Playgroud)

dart firebase firebase-authentication flutter google-cloud-firestore

11
推荐指数
1
解决办法
2949
查看次数

如何在 Flutter 中缓存 Firebase 数据?

在我的应用程序中,我使用来自 Firebase 的数据构建了一个对象列表。在 StreamBuilder 中,我检查快照是否有数据。如果没有,我将返回一个带有“正在加载...”的简单文本小部件。我的问题是,如果我转到应用程序中的另一个页面,然后再回来,您会在一瞬间看到屏幕中间显示“正在加载...”,这有点烦人。我很确定它正在从 Firebase 下载数据,并在我每次返回该页面时构建小部件。如果我不检查数据,它会给我一个我试图从 null 访问数据的数据。

有没有办法缓存已经下载的数据,如果来自 Firebase 的数据没有变化,那么就使用缓存的数据?

这是我的代码的编辑版本:

class Schedule extends StatefulWidget implements AppPage {
  final Color color = Colors.green;
  @override
  _ScheduleState createState() => _ScheduleState();
}

class _ScheduleState extends State<Schedule> {
  List<Event> events;
  List<Event> dayEvents;
  int currentDay;
  Widget itemBuilder(BuildContext context, int index) {
    // Some Code
  }
  @override
  Widget build(BuildContext context) {
    return Center(
      child: StreamBuilder(
        stream: Firestore.instance.collection('events').snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return Text("Loading...");
          }
          events = new List(snapshot.data.documents.length);
          for (int i …
Run Code Online (Sandbox Code Playgroud)

caching dart firebase flutter google-cloud-firestore

9
推荐指数
2
解决办法
9190
查看次数

Firestore 集合侦听器读取大量内容

我正在我的一个应用程序中实现 Firestore 数据存储。

我有一个监听器,它跟踪“日志”集合中的更新,如下所示:

db.collection("logs").addSnapshotListener({ (snapshot, error) in
    guard let s = snapshot else {return}
    if s.metadata.isFromCache {
        print("LOG_C \(s.documentChanges.count)")
            return
    }
    print("LOG \(s.documentChanges.count)")
    // other code
})
Run Code Online (Sandbox Code Playgroud)

在测试期间,我一直在将文档上传到此集合,然后通过 Firebase 控制台删除了所有文档。所以,现在,我的测试用户不存在该集合。当我第一次启动应用程序时,我确实看到这个集合是空的——监听器报告了正确的结果。

但是,这样做会消耗大约 1000 次读取。几乎感觉就像是在为我的测试用户下载此集合的所有历史记录(例如,插入了 500 个文档,删除了 500 个文档)。但是,即使是这样,它也不会向我报告——我在控制台中只收到一条“LOG 0”消息。

这是集合侦听器的工作方式吗?我确实知道侦听器下载初始状态,但我认为它将是当前快照,在这种情况下,它将消耗 1 次读取以确定最初没有任何返回。

欢迎任何解释/想法/建议。

我非常想通过查看详细的 Firestore 读取日志来调试它。但是,我在控制台中找不到这样的选项:(

firebase swift google-cloud-firestore

6
推荐指数
1
解决办法
1552
查看次数

Google Cloud Firestore 控制台读取所有文件和费用

我是 Firestore 的新手,所以我有一个 Profiles 和 Users 集合。在 Cloud Firestore 控制台中,当我单击数据库 > Firestore > 数据选项卡 > 配置文件或 > 用户时,控制台正在读取每个集合中的所有文档。这些读取在“使用”选项卡中进行计数。所以我的问题是,如果我在 Profiles 集合中有 500K 个文档并单击 Data,我将被收取阅读 500K 文档的费用,只是为了查看前 25 个文档。只需单击“数据”选项卡,控制台就会读取第一个集合的所有文档。

我尝试使用过滤器,但要使用它,您必须先单击集合并阅读所有文档,然后才能编辑过滤器。

这是它的工作方式还是我的误解?

firebase-console google-cloud-firestore

4
推荐指数
2
解决办法
1561
查看次数