StreamBuilder renvoie null
J'ai des problèmes avec l'utilisation de FirebaseUser ID dans mon application afin d'obtenir des informations de Firebase. J'ai créé tabBar qui bascule entre StreamBuilders qui stocke une liste de blocs basée sur les données de Firestore en fonction de l'ID utilisateur extrait de authStateChanges.
Mes fonctions qui récupèrent des données:
getFavSalons(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.docs
.map((doc) => SalonBlock(
salonName: doc.data()["salonName"],
location: doc.data()["location"],
workTime: doc.data()["workTime"],
rating: doc.data()["rating"],
))
.toList(); }
getFavMasters(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.docs
.map((doc) => MasterBlock(
fullname: doc.data()["fullName"],
bio: doc.data()["bio"],
rating: doc.data()["rating"],
))
.toList(); }
Mon StreamBuilder dans TabBarView:
Container(
height: screenHeight * 0.9,
width: screenWidth,
child:
TabBarView(controller: _controllerTabs, children: <Widget>[
StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, AsyncSnapshot<User> snapshot) {
if (snapshot.hasData) {
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection("customers")
.doc(snapshot.data.uid)
.collection("favSalons")
.snapshots(),
builder: (context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return Container(
margin: EdgeInsets.only(
bottom: screenHeight * 0.33),
child: new ListView(
children: getFavSalons(snapshot),
),
);
}
return LoadingSalon();
});
}
return Text("Loading user...");
}),
StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, AsyncSnapshot<User> snapshot) {
if (snapshot.hasData) {
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection("customers")
.doc(snapshot.data.uid)
.collection("favMasters")
.snapshots(),
builder: (context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return Container(
margin: EdgeInsets.only(
bottom: screenHeight * 0.33),
child: new ListView(
children: getFavMasters(snapshot),
),
);
}
return LoadingSalon();
});
}
return Text("Loading user...");
]),
Lorsque j'exécute mon application au début, les données existent dans des blocs, mais lorsque j'essaie de basculer entre les onglets, il y a une erreur "StreamBuilder a renvoyé null". Je pense qu'il y a des problèmes avec authStateChanges (). Comment puis-je résoudre ce problème?
Réponses
Cela peut se produire car TabBarView recrée vos onglets lorsque vous les changez. Il existe différentes solutions à ce problème, pour ne pas dupliquer les réponses, vérifiez-les ici: Préservation de l'état entre les pages de vue onglet