首页 > 解决方案 > Firestore doc delete 预计会删除 1 个人,但也会删除所有类似的文档

问题描述

我正在使用 Firestore 数据库来存储有关连接到我的应用程序中会话的用户的信息。要离开,用户按下离开按钮,然后应该从数据库中删除他们自己的数据。这是我删除客户端的代码:

  _deleteAClientFromDB() async {
    //get specific user in users
    var userLobby = await users
        .where('lobbyCode', isEqualTo: _lobbyCode)
        .where('userRole', isEqualTo: 2)
        .where('userID', isEqualTo: _userID)
        .get();
    userLobby.docs.forEach((document) {
      document.reference.delete();
    });
  }

此代码与我的功能非常相似,即从数据库中删除所有用户,并添加了用户 ID 的“位置”。这userID是一个字符串字段,每个用户都是唯一的。但是,我很确定发生了什么,当我尝试在设备上运行此功能时,它会以某种方式在所有设备上运行该功能?这是我能想到的唯一原因,因为 ifuserID与 firestore 中的不同,它不会被检索到。我用这个函数初始化以提取我的SharedPreferences

  Future<String> _getData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(
      () {
        _lobbyCode = (prefs.getString('lobbyCode'));
        _userID = (prefs.getString('userID'));
        _isHost = prefs.getBool('isHost') ?? false;
      },
    );

我不确定为什么该函数会删除带有userRoleof 2 的所有文档,而不仅仅是删除带有userIDof的文档_userID(本地存储的数据)。有谁明白我做错了什么?

E/flutter ( 8795): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Invalid argument(s)
E/flutter ( 8795): #0      _StringBase.+ (dart:core-patch/string_patch.dart:267:57)
E/flutter ( 8795): #1      _LobbyWidgetState._deleteAClientFromDB (package:percepto/lobby.dart:350:46)
E/flutter ( 8795): #2      _LobbyWidgetState._showClientConfirmDialog.<anonymous closure> (package:percepto/lobby.dart:488:9)

似乎确实有问题_userID,我尝试记录log("This is what userID is:" + _userID);并遇到这些错误。我不确定为什么它可能是无效参数,因为它被初始化为空字符串并从设备的本地存储中设置。

标签: androidfirebaseflutterdartgoogle-cloud-firestore

解决方案


感谢您推荐我检查 _userID,在我看到日志错误后,我仔细检查了我设置的位置shared_preferences,显然我命名了userID id. 所以我试图从一个不存在的首选项中提取数据。


推荐阅读