问题
The brew list does not refresh with this refreshList function. What is the problem with the function ? It needs to refresh the list and fetch the most recent list from the firestore but it does not load the changes until I hot reload.
class BrewList extends StatefulWidget {
@override
_BrewListState createState() => _BrewListState();
}
class _BrewListState extends State<BrewList> {
List<Brew> brews;
Future<dynamic> refreshList() async {
await Future.delayed(Duration(seconds: 1));
setState(() {
brews = Provider.of<List<Brew>>(context) ?? [];
});
}
@override
Widget build(BuildContext context) {
brews = Provider.of<List<Brew>>(context) ?? [];
return RefreshIndicator(
onRefresh: refreshList,
ListView.builder(
itemCount: brews.length,
itemBuilder: (context, index) {
return BrewTile(brew: brews[index]);
},
),
);
}
}
// get brews future
Future<List<Brew>> get brews async {
QuerySnapshot snapshot = await brewCollection.getDocuments();
return _brewListFromSnapshot(snapshot);
}
List<Brew> _brewListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc){
//print(doc.data);
return Brew(
name: doc.data['name'] ?? '',
strength: doc.data['strength'] ?? 0,
sugars: doc.data['sugars'] ?? '0'
);
}).toList();
}
回答1:
Try this out i think I got this working for you
class _BrewListState extends State<BrewList> {
List<Brew> brews = [];
@override
void didChangeDependencies() {
brews = Provider.of<List<Brew>>(context) ?? [];
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
Future<void> _refreshBrews() async {
List<Brew> tempList = await DatabaseService().brews;
setState(() {
brews = tempList;
});
print(brews);
}
return RefreshIndicator(
onRefresh: () {
return _refreshBrews();
},
child: ListView.builder(
itemCount: brews.length,
itemBuilder: (context, index) {
return BrewTile(brew: brews[index]);
},
),
);
}
}
来源:https://stackoverflow.com/questions/61203632/how-can-i-refresh-the-brew-list