1
votes

I cant able to retrive the data from Firestore and getting Error as below,

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════ The following assertion was thrown building StreamBuilder(dirty, state: _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot>#e568b): A build function returned null.

The offending widget is: StreamBuilder Build functions must never return null.

To return an empty space that causes the building widget to fill available room, return "Container()". To return an empty space that takes as little room as possible, return "Container(width: 0.0, height: 0.0)".

The relevant error-causing widget was: StreamBuilder file:...dart:140:15 When the exception was thrown, this was the stack:

#0 debugWidgetBuilderValue. (package:flutter/src/widgets/debug.dart:300:7) #1 _Closure.call (dart:core-patch/function.dart) #2 debugWidgetBuilderValue (package:flutter/src/widgets/debug.dart:321:4) #3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4569:7) #4 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4737:11) ...


Below is my code.

StreamBuilder<QuerySnapshot>(
                  stream: Firestore.instance.collection("currency").snapshots(),
                  builder: (context, snapshot) {
                  if (!snapshot.hasData){
                      print('test pharse');
                       Text("Loading.....");}
                    else {
                      List<DropdownMenuItem> currencyItems = [];
                      for (int i = 0; i < snapshot.data.documents.length; i++) {
                        DocumentSnapshot snap = snapshot.data.documents[i];
                        currencyItems.add(
                          DropdownMenuItem(
                            child: Text(
                              snap.documentID,
                              style: TextStyle(color: Color(0xff11b719)),
                            ),
                            value: "${snap.documentID}",
                          ),
                        );
                      }
                      return Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          Icon(Icons.mail,
                              size: 25.0, color: Color(0xff11b719)),
                          SizedBox(width: 50.0),
                          DropdownButton(
                            items: currencyItems,
                            onChanged: (currencyValue) {
                              final snackBar = SnackBar(
                                content: Text(
                                  'Selected Currency value is $currencyValue',
                                  style: TextStyle(color: Color(0xff11b719)),
                                ),
                              );
                              Scaffold.of(context).showSnackBar(snackBar);
                              setState(() {
                                selectedCurrency = currencyValue;
                              });
                            },
                            value: selectedCurrency,
                            isExpanded: false,
                            hint: new Text(
                              "Choose Currency Type",
                              style: TextStyle(color: Color(0xff11b719)),
                            ),
                          ),
                        ],
                      );
                    }
                  }),
1

1 Answers

1
votes

You need to add a return before the Text widget in the !snapshot.hasData section of the StreamBuilder

if (!snapshot.hasData){
    print('test phrase');
    return Text("Loading.....");
}