StreamBuilder null döndürüyor
Firebase'den bilgi almak için uygulamamda firebaseUser kimliğini kullanmakta bazı sorunlar yaşıyorum. AuthStateChanges'dan alınan kullanıcı kimliğine göre Firestore'dan alınan verilere dayalı bir blok listesi depolayan StreamBuilders arasında geçiş yapan tabBar'ı oluşturdum.
Veri alan işlevlerim:
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(); }
TabBarView'daki StreamBuilder'ım:
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...");
]),
Uygulamamı başlangıçta çalıştırdığımda veriler bloklar halinde mevcut, ancak sekmeler arasında geçiş yapmaya çalıştığımda "StreamBuilder null döndürdü" hatası oluşuyor. AuthStateChanges () ile ilgili bazı sorunlar olduğunu düşünüyorum. Bu sorunu nasıl çözebilirim?
Yanıtlar
Bu, TabBarView sekmelerinizi değiştirdiğinizde sekmelerinizi yeniden oluşturduğu için olabilir. Bu sorunun farklı çözümleri vardır, cevapları tekrarlamak için değil, buradan kontrol edin: Sekme görünümü sayfaları arasında durumu koruma