Flutter开发访问错误List数组报RangeError索引越界问题求助
错误原因
你遇到的RangeError (index): Invalid value: Valid value range is empty: 0错误本质是访问了空数组的下标元素,你直接写Text(errors[0])时没有判断errors数组是否为空,当数组内没有元素时就会触发该异常。
虽然你现在的代码里给errors初始化了["Demo Error"]的默认值避免了报错,但你的表单错误提示逻辑仍然存在隐患,建议按如下方案完整修复:
修复步骤
- 第一步:给错误文本的展示加安全校验,避免数组为空时报错,同时没有错误时可以隐藏错误图标
替换原来的错误展示Row代码:Row( children: [ if (errors.isNotEmpty) ...[ SvgPicture.asset('assets/icons/Error.svg'), SizedBox(width: getProportionateScreenWidth(8)), ], Text(errors.isNotEmpty ? errors[0] : ''), ], ) - 第二步:修复表单验证逻辑的缺陷
你当前的代码里验证逻辑存在两个问题:1. 点击登录按钮时没有主动触发表单验证;2. 每次验证前没有清空旧的错误,会导致错误累加重复。
替换LoginButton的配置:LoginButton( text: 'Log In', press: () { // 验证前先清空上一次的错误列表 setState(() { errors.clear(); }); // 触发所有表单字段的validator校验 if (_formKey.currentState.validate()) { // 校验通过后执行登录逻辑 } }, ) - 第三步(可选):如果不需要默认展示错误提示,可以把
errors的初始值改为空数组final List<String> errors = [];
内容的提问来源于stack exchange,提问作者Ifeoluwa Wole-Osho
相关产品推荐
相关产品推荐

