Я пытаюсь запросить данные в Firebase следующим способом:
static Future<QuerySnapshot> getUserData(String creatorId) {
Future<QuerySnapshot> data = _firestore
.collection('users')
.where('creatorId', isEqualTo: creatorId)
.getDocuments();
return data;
}
Затем я пытаюсь получить доступ к данным через этот FutureBuilder:
body: FutureBuilder(
future: DatabaseService.getUserData(widget.ride.creatorId),
//future: DatabaseService.getUserData(widget.ride.creatorId),
builder: (context, snapshot) {
// if (!snapshot.hasData) {
// }
//User user = User.fromDoc(snapshot.data);
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Color(0xff192C43),
valueColor: AlwaysStoppedAnimation(
Color(0xff213a59),
),
),
);
}
User user = User.fromDoc(snapshot.data.documents[0]);
return SearchCardItemExtended(user: user, ride: widget.ride,);
},
),
Там всегда только один пользователь с одинаковым creatorId. Вот почему я называю документ [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)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
Очень похожий запрос и FutureBuilder в других местах кода. Это другой FutureBuilder:
body: FutureBuilder(
future: DatabaseService.searchRides(origin, destination, date, time),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Color(0xff192C43),
valueColor: AlwaysStoppedAnimation(
Color(0xff213a59),
),
),
);
}
if (snapshot.data.documents.length == 0) {
return Center(
child: Text(
'Uppss...\n'
'Leider wurden keine passenden Fahrten gefunden.\n'
'Schau doch später noch mal vorbei.',
textAlign: TextAlign.center,
style: TextStyle(
fontFamily: 'UbuntuLight',
fontSize: 14,
color: Color(0xffE6EFE9),
height: 1.6,
),
),
);
}
return ListView.builder(
physics: new BouncingScrollPhysics(),
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
Ride ride = Ride.fromDoc(snapshot.data.documents[index]);
return SearchCardItem(num: index, ride: ride);
},
);
},
),
В чем здесь проблема?