#flutter #dart
Вопрос:
Мое приложение рандомизирует список, упорядочивает элементы и отображает их на экране, но когда список заканчивается, приложение выходит из строя и показывает это исключение.
class _HomeState extends State<Home> {
var pergunta = "randomquest";
int _posicao1 = -1;
var lista1 = ['1', '2', '3', '4', '5']..shuffle();
void Teste1 (){
_posicao1 ;
setState(() {
pergunta = lista1.elementAt(_posicao1);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
IconButton(
icon: Image.asset('images/eye.png'),
iconSize: 150,
onPressed: () {Teste1();
},
}
Ответ №1:
_posicao1 достигает » 5 » в Teste1() и запрашивает элемент(5), которого не существует. Списки в Dart основаны на нуле, что означает, что они начинаются с 0. Ваш список состоит из 5 элементов: 0,1,2,3,4. Вы могли бы выполнить проверку границ в Тесте1():
Начните цикл сначала
void Teste1 (){
_posicao1 ;
if(_posicao1 == lista1.length) _posicao1 = 0; //start the loop over
setState(() {
pergunta = lista1.elementAt(_posicao1);
});
}
Остановитесь на последнем элементе
void Teste1 (){
_posicao1 ;
if(_posicao1 == lista1.length) _posicao1 = lista1.length-1; //last index of lista1
setState(() {
pergunta = lista1.elementAt(_posicao1);
});
}