RangeError(索引):无效值:有效值范围为空:0,Flutter

时间:2020-07-12 17:32:38

标签: flutter dart

我正在尝试在Flutter中创建杂货清单创建者。我创建了一个GroceryList类,该类将标题,提醒日,配料列表以及配料数量列表作为参数。我目前正在编码“完成”按钮,该按钮将获取所有列表信息并将其放入杂货列表类中。这是相关的代码:

  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();
              },
            )
          ],
        ),
  }

全班还有很多,但是为了整洁,我放弃了它。我收到上面显示的错误,我知道它的含义以及为什么出现该错误,但是我不知道该如何解决。我的意思是,我不知道该如何解决永久解决方案,而不是摆脱此错误。如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

我有一个猜测,但我不确定。我看到GroceryList cur; cur.title = curTitle.text;,并且看到已分配 gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:admin \ gs://[SOURCE_BUCKET] 但是我看不到TextEditingController的TextField文本或curTitle的任何标题,我认为它为null。我希望我能帮上忙。对不起,如果我的答案是错误的,因为我是新来的:)开发人员,祝您生活愉快!

答案 1 :(得分:1)

您有很多列表,所以我不确定哪一个有问题,但是您是否尝试过检查它们是否为空

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)
  ....

很明显,如果列表为空,则其他条件必须为false,但它们不会运行,因为不需要它(if在使用double&时找到第一个false时会停止,因此不会) t显示错误