在Firebase中查询文档时发生范围错误

在Firebase中查询文档时发生范围错误,firebase,flutter,firebase-realtime-database,dart,Firebase,Flutter,Firebase Realtime Database,Dart,我正在尝试使用以下方法查询Firebase中的数据: static Future<QuerySnapshot> getUserData(String creatorId) { Future<QuerySnapshot> data = _firestore .collection('users') .where('creatorId', isEqualTo: creatorId) .getDocuments();

我正在尝试使用以下方法查询Firebase中的数据:

static Future<QuerySnapshot> getUserData(String creatorId) {
    Future<QuerySnapshot> data =  _firestore
        .collection('users')
        .where('creatorId', isEqualTo: creatorId)
        .getDocuments();

    return data;
  }

始终只有一个用户具有相同的创建者ID。这就是我在[0]上调用文档的原因

当我点击调用FutureBuilder的按钮时,会出现以下异常:

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following RangeError was thrown building FutureBuilder<QuerySnapshot>(dirty, state: _FutureBuilderState<QuerySnapshot>#cff34):
RangeError (index): Invalid value: Valid value range is empty: 0

The relevant error-causing widget was: 
  FutureBuilder<QuerySnapshot> file:///C:/Users/Paul/AndroidStudioProjects/leaf/leaf/lib/screens/search_card_info.dart:61:13
When the exception was thrown, this was the stack: 
#0      List.[] (dart:core-patch/growable_array.dart:149:60)
#1      _SearchCardInfoState.build.<anonymous closure> (package:leaf/screens/search_card_info.dart:80:59)
#2      _FutureBuilderState.build (package:flutter/src/widgets/async.dart)
#3      StatefulElement.build (package:flutter/src/widgets/framework.dart:4334:27)
#4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4223:15)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

这里可能有什么问题?

请像这样更改代码

 if (snapshot.hasData && snapshot.data.length>0) {
 User user = User.fromDoc(snapshot.data.documents[0]);
                //..Implement what you want here}

您面临此错误,因为firebase没有结果,然后您尝试调用
|0]
,但0处没有元素。你必须用一种有条件的方式来包装它。因此,只有当快照中的用户数量超过时,才会执行此命令。数据

JU会像这样更改您的代码

 if (snapshot.hasData && snapshot.data.length>0) {
 User user = User.fromDoc(snapshot.data.documents[0]);
                //..Implement what you want here}
您面临此错误,因为firebase没有结果,然后您尝试调用
|0]
,但0处没有元素。你必须用一种有条件的方式来包装它。因此,只有在
snapshot.data

中有多于on的用户时,才会执行该命令。请检查snapshot.data.documents.i是否为空 请检查条件snapshot.data.documents.i是否为空
 if (snapshot.hasData && snapshot.data.length>0) {
 User user = User.fromDoc(snapshot.data.documents[0]);
                //..Implement what you want here}
if(snapshot.data.documents.length!=0){
          User user = User.fromDoc(snapshot.data.documents[0]);

          return SearchCardItemExtended(user: user, ride: widget.ride,);
          } 

          return new Container();