с приложением flutter Я пытаюсь использовать Stream с пакетом провайдера для потоковой передачи значения из Firestore. Он отлично работает через полсекунды, но выдает исключение, так как user.email вызывается с нулевым значением до тех пор, пока указанный ниже поставщик FirebaseUser не вернет ненулевое значение.
var user = Provider.of<FirebaseUser>(context, listen: false);
Ниже показан поток.
Stream<FirestorePomosDaily> getPomosDaily(context) {
var user = Provider.of<FirebaseUser>(context, listen: false);
return firestoreInstance
.collection('pomos')
.document(user.email)
.snapshots()
.map((doc) {
return FirestorePomosDaily.fromMap(doc.data);
});
}
Ниже представлен мульти-провайдер:
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final FirestoreService _firestoreService = FirestoreService();
final AuthFunctions _authFunctions = AuthFunctions();
return MaterialApp(
home: MultiProvider(providers: [
StreamProvider<FirebaseUser>.value(value: _authFunctions.firebaseAuth.onAuthStateChanged),
StreamProvider(
create: (BuildContext context) => _firestoreService.getPomosDaily(context),
),
], child: MyBottomNavBar()));
}
}
FirestorePomosDaily.toMap - это настраиваемый класс, который принимает поля firestore, дайте мне знать, если вы хотите, чтобы я скопировал это. Есть идеи? Надеюсь, выход есть. Я добавил .handleError в конец Stream, но он по-прежнему выдает исключение, просто выдает сообщение об ошибке после.