i'm developing an app with flutter and i have some difficultes. i used the follow function with Streambuilder to get data from two collections but the UI doesn't update when data changes in firebase. here my function :
class MyHomePage extends StatefulWidget {
const MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Post> listStream = [];
AuthenticationService service = AuthenticationService();
Stream<List<Post>> fetch() async* {
User user = service.getCurrentUser();
var customerDocument = await FirebaseFirestore.instance
.collection("XXXX")
.doc(user.uid)
.get();
List<String> abbonierten =
List<String>.from(customerDocument["EEEE"]);
for (int j = 0; j < abbonierten.length; j++) {
var providerDocument = await FirebaseFirestore.instance
.collection("WWWWW")
.doc(abbonierten.elementAt(j))
.get();
List<Map> posts = List<Map>.from(providerDocument["posts"] ?? []);
for (int item = 0; item < posts.length; item++) {
Post post =
Post.fromJson(providerDocument.data(), posts.elementAt(item));
listStream.add(post);
}
}
yield listStream;
}
StreamChatList streamChatList = StreamChatList();
ChatService chatService = ChatService();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Kindacode.com'),
),
body: Padding(
padding: const EdgeInsets.all(30),
child: StreamBuilder(
stream: fetch(),
builder: (context, snapshot) {
if (snapshot.hasData) {
List<Post> data = snapshot.data;
return ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return Text(data.elementAt(index).title);
});
}
return Center(child: LinearProgressIndicator());
},
),
),
);
}
}
or is there another method to achieve this task. can someome help me with it pls ?