# #flutter #google-cloud-firestore
Вопрос:
Следующая ошибка noSuchMethod была вызвана при построении StreamBuilder<QuerySnapshot<Карта<Строка, динамическая><Строка, динамическая>><Строка, динамическая>>(грязная, состояние: _StreamBuilderBaseState<Строка, динамическая>>><QuerySnapshot<Карта<Строка, динамическая><Строка, динамическая>>, AsyncSnapshot<Строка, динамическая>><QuerySnapshot<Карта<Строка, динамическая><Строка, динамическая>><Строка, динамическая>><Строка, динамическая>>> < Строка, динамическая>>> > #f407c): Метод «ToDate» был вызван при значении null. Получатель: null Попытался вызвать: ToDate()
При нажатии на FAB будет создан документ с полем метки времени firebase.
Теперь перейдем к потоковой передаче коллекции. Я получаю эту ошибку на долю секунды. Я думаю, проблема в том … что сначала создается документ, а затем он обновляется с указанием метки времени. Вызывает ошибку в экземпляре, в котором создается документ.
class XYZ extends StatelessWidget {
const XYZ({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
FirebaseFirestore.instance.collection('Test').add({'time': FieldValue.serverTimestamp()});
},
),
body: StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
stream: FirebaseFirestore.instance.collection('Test').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) return Center();
snapshot.data!.docs.forEach((doc) {
print(doc.data()['time'].toDate());
});
return Container();
},
),
),
);
}
}
Таково ли поведение firestore? Или я сделал неправильную реализацию в своем коде?
Ответ №1:
Во-первых, ваша ошибка заключается в использовании toDate()
перед приведением класса «Метка времени».
Пожалуйста, попробуйте следующие строки;
snapshot.data!.docs.forEach((doc) {
final timestamp = doc.data()['time'] as Timestamp;
final dateTime = timestamp.toDate();
print('Date: ${dateTime}');
});