繁体   English   中英

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

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

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

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

class 还有很多,但为了整洁,我把它去掉了。 我收到上面显示的错误,我知道这意味着什么以及为什么会出现,但我不知道应该如何解决它。 我的意思是,我不知道该怎么做才能获得永久解决方案,而不是摆脱这个错误。 如果您需要更多信息,请告诉我。

我有一个猜测,但我不能确定。 我看到final curTitle = new TextEditingController(); 我看到了这个分配的GroceryList cur; cur.title = curTitle.text; GroceryList cur; cur.title = curTitle.text; 但我看不到 TextEditingController 的 TextField 文本或 curTitle 的任何标题,我认为它是 null。 我希望我能帮上忙。 对不起,如果我的回答是错误的,因为我是新人:) 祝你有美好的日子,开发者!

你有很多列表,所以我不确定哪一个有问题,但你有没有试过检查它们是否是空的,然后再尝试获取里面的内容

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

显然,如果列表为空,则其他条件必须为假,但它们不会运行,因为它不是必需的( if在使用 double & 时发现第一个假时停止),因此不会显示错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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