How can I refresh the brew list?

会有一股神秘感。 提交于 2020-04-17 20:27:18

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!