伙计们,我为这个错误而疯狂。我已经在这里搜索过,并得到了一些答案,但是没有一个与我合作。而且让我更疯狂的是这段代码:
_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
答案 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上不起作用。