android - 颤振 - RangeError(索引)
问题描述
在构建 ListView 时出现错误。在这个颤振应用程序中,我尝试在单击按钮时为每一列计算一些点。但我总是遇到同样的错误。
══╡ 手势捕捉到的异常
I/flutter (28729):处理手势时引发以下 RangeError:I/flutter (28729):RangeError (index):无效值:有效值范围为空:0
这是我的代码,我希望有人能够帮助我修复错误:
import 'package:flutter/material.dart';
class Punktezaehler extends StatefulWidget{
final List<String> spieler_namen;
Punktezaehler(this.spieler_namen);
@override
State<StatefulWidget> createState() => new _Punktezaehler(this.spieler_namen);
}
class _Punktezaehler extends State<Punktezaehler>{
final List<String> spieler_namen;
_Punktezaehler(this.spieler_namen);
List<int> punkteanzahl_teamEins = [];
List<int> punkteanzahl_teamZwei = [];
int team1_hinzugezaehlt = 0;
int team2_hinzugezaehlt = 0;
@override
Widget build(BuildContext context) {
var spieler1 = spieler_namen[0].substring(0,3);
var spieler2 = spieler_namen[1].substring(0,3);
var spieler3 = spieler_namen[2].substring(0,3);
var spieler4 = spieler_namen[3].substring(0,3);
return new Scaffold(
appBar: new AppBar(
automaticallyImplyLeading: false,
title: new Text("$spieler1 & $spieler2 vs" +" $spieler3 & $spieler4"),
actions: <Widget>[
],
),
body: Container(
child: new Row(
children: <Widget>[
new Column(
children: <Widget>[
new IconButton(
icon: Icon(Icons.exposure_plus_2),
onPressed: () => punkte_hinzuzaehlen(1, 2)
)
],
),
new Padding(padding: EdgeInsets.only(left: 100.0)),
new Expanded(
child: ListView.builder(
itemCount: punkteanzahl_teamEins.length, //--> Error is thrown here
itemBuilder: (context, index){
return Text(punkteanzahl_teamEins[index].toString());
}
),
),
new Expanded(
child: ListView.builder(
itemCount: punkteanzahl_teamZwei.length, //--> Error is thrown here
itemBuilder: (context, index){
return Text(punkteanzahl_teamZwei[index].toString());
}
),
),
new Column(
children: <Widget>[
new IconButton(
icon: Icon(Icons.exposure_plus_2),
onPressed: () => punkte_hinzuzaehlen(2, 2)
)],
)
],
)
),
);
}
void punkte_hinzuzaehlen(int team, int nummer){
if (team == 1){
setState(() {
punkteanzahl_teamEins[team1_hinzugezaehlt] = nummer;
team1_hinzugezaehlt++;
});
}
else if(team == 2){
setState(() {
punkteanzahl_teamZwei[team2_hinzugezaehlt] = nummer;
team2_hinzugezaehlt++;
});
}
}
}
解决方案
当您单击按钮时,您正在调用此行的问题
punkteanzahl_teamEins[team1_hinzugezaehlt]
并且team1_hinzugezaehlt
有一个初始值,0
但是每次用户单击按钮时,该值都会增加 1,因此假设您的punkteanzahl_teamEins
列表在第四次单击时包含 2 个项目,该值team1_hinzugezaehlt
将为 4 女巫会导致此错误。所以解决方案是检查值是否在范围内
if (team1_hinzugezaehlt<punkteanzahl_teamEins.length){
setState(() {
punkteanzahl_teamEins[team1_hinzugezaehlt] = nummer;
team1_hinzugezaehlt++;
});
}
并为第二个功能做同样的事情
推荐阅读
- flutter - 如何让这种底部导航栏颤动?
- django-rest-framework - 如何在 Django REST Framework 中对对象进行部分更新?
- r - 用于产生 NaN 的典型相关的 Wilks Lambda 检验
- javascript - Android WebVIew中的键盘长键按下
- javascript - 使用 JavaScript 和 EJS 获取 HTML 标记的内部文本并作为值传递给输入字段
- sql - 用 SQL 查找访问过 URL A 和 B 的用户?
- r - 将文本添加到 fasta 文件的标题
- django - Annotate + Distinct 未实现,计算 Distinct 子查询
- c++ - 将 2 个 UMat 连接到第 3 个
- linux - 在 linux 上使用 v4l2loopback 虚拟凸轮和 google-chrome 或 chromium,同时使用真正的网络摄像头