java.lang.IllegalArgumentException:无效的文档引用。文档引用必须具有偶数个段,但用户具有1个段

时间:2020-06-10 19:04:40

标签: firebase flutter dart google-cloud-firestore

伙计们,我为这个错误而疯狂。我已经在这里搜索过,并得到了一些答案,但是没有一个与我合作。而且让我更疯狂的是这段代码:

_reloadInfo()async{

    Firestore reload = Firestore.instance;

    DocumentSnapshot orderStatus =
    await reload.collection("users")
        .document(_userId).get();

    Map<String, dynamic> status = orderStatus.data;
    setState(() {
      _orderStatus = status["order_status"];
    });

  }

在另一堂课上工作正常。我只是复制了,因为我希望在同一类(statefull)类型中得到相同的结果,所以会发生此错误。

E / MethodChannel#plugins.flutter.io / cloud_firestore(24705):java.lang.IllegalArgumentException:无效的文档引用。文档引用必须具有偶数个段,但用户具有1

2 个答案:

答案 0 :(得分:0)

几乎可以肯定,问题_userId是一个空字符串或空字符串。在调用Firstore API之前,您应该验证您具有正确的字符串以用于需要访问的文档路径。添加一些调试日志记录供您自己查看,或使用调试器逐步检查代码以了解您的工作情况。

答案 1 :(得分:0)

我已经解决了我的问题,但不完全是我认为的方式,但我会告诉你。

我正在使用此功能:

_reloadInfo()async{

    Firestore reload = Firestore.instance;

    DocumentSnapshot orderStatus =
    await reload.collection("users")
        .document(_userId).get();

    Map<String, dynamic> status = orderStatus.data;
    setState(() {
      _orderStatus = status["order_status"];
    });

  }

要在initState右边开始,我在另一页上做了。结果就是那个错误。 然后,我尝试开始构建并成功运行,但多次调用,结论是:

void _getOrderStatus()async{
    if(_orderStatus == false){
      DocumentSnapshot orderStatus =
      await db.collection("users")
          .document(_userId)
          .get();

      Map<String, dynamic> status = orderStatus.data;
      setState(() {
        _orderStatus = status["order_status"];
        _tableId = status["table_id"];
      });
    }
  }

将if放入结果中后,我想要哈哈。

但是我仍然想知道为什么它在initState上不起作用。