Home > Net >  How to initialise Firestore query in initState in flutter
How to initialise Firestore query in initState in flutter

Time:08-28

I am trying to load the data from Firestore, with the help of streambuilder i am getting the respective data and displaying it to the user.

I am passing the value to a variable called 'total' and this total is inialised with 0 and when i try to show this total value it first should the default(0) value and the it takes the value from Firestore.

Below you can see the code

            StreamBuilder<DocumentSnapshot>(
                stream: FirebaseFirestore.instance.collection('UserData').doc(getUid()).snapshots(),
                builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
                  if (!snapshot.hasData) return const Text("Loading...");
                  final DocumentSnapshot? document = snapshot.data;
                  final Map<String, dynamic> documentData = document?.data() as Map<String, dynamic>;

                  accountList = (documentData['accounts'] as List).map((accountList) => accountList as Map<String, dynamic>).toList();
                  // getTotalFund(accountList);
                  List amountData=[];
                  double convertAmount;

                  for(int i=0; i<accountList.length;i  ){
                    if(accountList[i]['accountType'] == 'Savings' || accountList[i]['accountType'] == 'Cash' ){
                      amountData.add(double.parse(accountList[i]['amountBalance'].replaceAll(',','')));
                    }
                  }
                  convertAmount = amountData.reduce((value, element) => value   element);
                  totalFund = amountFormat.format(convertAmount);

                  return Text(
                    documentData['name'],
                    style: const TextStyle(
                      fontSize: 16,
                      fontFamily: "Gilroy SemiBold",
                    ),
                  );
                }),

the value total amount i am getting in the Text widget.

Text('\u{20B9} ', style: TextStyle(color: Color(0xff9c9c9c), fontFamily: "Gilroy Medium", fontSize: 23)),
Text(totalFund.toString(),style: const TextStyle(color: Colors.black, fontFamily: "Gilroy Bold", fontSize: 35)),

how to load the totalFund in initState so it will not show the null value.

screenshot

CodePudding user response:

try this:

 Future<DocumentSnapshot> getDoc() async {
    return await FirebaseFirestore.instance.collection('UserData').doc(getUid());
 }

then set FutureBuilder as parent of your body widget like this:

FutureBuilder(future: getDoc(),
       builder: (context, snapshot){
            if (snapshot.connectionState == ConnectionState.waiting) {
                  return const Text("Loading...");
                } else {
                  if (snapshot.hasError) {
                    return const Text("error");
                  } else {
                    final DocumentSnapshot? document = snapshot.data;
                    final Map<String, dynamic> documentData =
                        document?.data() as Map<String, dynamic>;

                    accountList = (documentData['accounts'] as List)
                        .map((accountList) => accountList as Map<String, dynamic>)
                        .toList();
                    // getTotalFund(accountList);
                    List amountData = [];
                    double convertAmount;

                    for (int i = 0; i < accountList.length; i  ) {
                      if (accountList[i]['accountType'] == 'Savings' ||
                          accountList[i]['accountType'] == 'Cash') {
                        amountData.add(double.parse(
                            accountList[i]['amountBalance'].replaceAll(',', '')));
                      }
                    }
                    convertAmount =
                        amountData.reduce((value, element) => value   element);
                    totalFund = amountFormat.format(convertAmount);

                    return yourBodyWidget;
                  }
          })
  • Related