简体   繁体   中英

RangeError (index): Invalid value: Valid value range is empty: 0, Flutter

I am trying to create a grocery list creator in Flutter. I made a class, GroceryList, that takes the title, the reminder day, the list of ingredients, and the list of the number of ingredients as parameters. I am currently coding the "Finish" button, which will take all of the lists information and put it in a grocery list class. Here is the relevant code:

  final curTitle = new TextEditingController();
  int countings = 0;
  List<String> finalIngs = [];
  List<String> numfinalIngs = [];
  String _reminderDay = "Sunday";
  Widget build(BuildContext context) {
    debugPrint(curTitle.text);
    return Scaffold(
        appBar: AppBar(
          title: Text("New Grocery List"),
          leading: IconButton(
            icon: const Icon(Icons.arrow_back_ios, color: Colors.white),
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => ListsPage()),
              );
            },
          ),
          actions: <Widget>[
            IconButton(
              icon: new Icon(Icons.check, color: Colors.white),
              onPressed: () {
                if (finalIngs[0].isNotEmpty &&
                    numfinalIngs[0].isNotEmpty &&
                    curTitle.text.isNotEmpty) {
                  for (int i = 0; i < _newListIngs.length; i++) {
                    finalIngs.add(_newListIngs[i].text);
                    debugPrint(finalIngs[i]);
                    numfinalIngs.add(_newlistnumIngs[i].text);
                    debugPrint(numfinalIngs[i]);
                  }
                  GroceryList cur;
                  cur.title = curTitle.text;
                  cur._reminderDay = _reminderDay;
                  for (int i = 0; i < finalIngs.length; i++) {
                    cur.ingredients.add(finalIngs[i]);
                    cur.numIngs.add(numfinalIngs[i]);
                  }
                } else {
                  showIngAlert(BuildContext context) {
                    Widget okButton = FlatButton(
                      child: Text("OK"),
                      onPressed: () {},
                    );

                    // set up the AlertDialog
                    AlertDialog alert = AlertDialog(
                      content: Text(
                          "Please fill all blank spaces, and add as needed."),
                      actions: [
                        okButton,
                      ],
                    );

                    // show the dialog
                    showDialog(
                      context: context,
                      builder: (BuildContext context) {
                        return alert;
                      },
                    );
                  }

                  showIngAlert(context);
                }
                _newListIngs.clear();
                _newlistnumIngs.clear();
              },
            )
          ],
        ),
  }

There's a lot more to the class, but I got rid of it for the sake of neatness. I am getting the error shown above, and I know what it means and why it's there, but I don't know how I should fix it. I mean, I don't know what to do for a permanent solution, rather than getting rid of this error. Please let me know if you need any more information.

I have a guess but i can't sure. I see final curTitle = new TextEditingController(); and I see this assigned GroceryList cur; cur.title = curTitle.text; GroceryList cur; cur.title = curTitle.text; But i can't see TextField text for TextEditingController or any title for curTitle i think it is null. I hope i could help. Sorry if my answer is mistake because i am new:) Have a good days for you,developer!

You have a lot of lists so I am not sure which one has the problem but have you tried checking if they're empty before trying to get what its inside

if(finalIngs.isNotEmpty && numfinalIngs.isNotEmpty && 
      (finalIngs[0]?.isNotEmpty ?? false) && //What if the Strings are null?
      (numfinalIngs[0]?.isNotEmpty ?? false) && //What if the Strings are null?
      curTitle.text.isNotEmpty)
  ....

Obviously if the lists are empty the other conditions have to be false, but they won't run because it's not needed (the if stops when it finds the first false when using double &) so it won't show an error

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM