范围错误索引无效值不在范围内,0..1 包含 2 在 dart flutter 应用程序中

Range error index invalid value not in range, 0..1 inclusive 2 in dart flutter app

我正在学习一个 flutter 应用程序教程,但我遇到了这个错误:

Range error index invalid value not in range, 0..1 inclusive 2

关于如何解决这个问题有什么建议吗?

import 'package:flutter/material.dart';

//void main() {
  //runApp(MyApp());
//}
void main()=>runApp(MyApp()); 
class MyApp extends StatefulWidget{

  @override
 State<StatefulWidget> createState(){
   return MyAppState();

 }
}

class MyAppState extends State<MyApp>{

var questionIndex=0;

  void answerQuestion(){
    setState(() {
      questionIndex=questionIndex+1;
    });
   print(questionIndex);
    //print("answer choosen!");
  }
@override
  Widget build(BuildContext context){ 

var questions=['What is your favourite colour','what is favourite animal',];

return MaterialApp(home: Scaffold(
appBar:AppBar(title:Text('my first app'),),
body: Column(children:[Text(questions[questionIndex]),
        //RaisedButton(child: Text("Ansewr 1"), onPressed:()=>print("Answer 1"),),
        //RaisedButton(child: Text("Ansewr 1"),onPressed:answerQuestion),
        RaisedButton(child: Text("Ansewr 0"), onPressed:answerQuestion,),
        RaisedButton(child: Text("Ansewr 1"), onPressed:answerQuestion,),



          ],),

),);
  }
}

你的问题应该包含错误发生在什么时候。但是我猜错误是在您总共第二次单击其中一个 RaisedButton 之后出现的?

每次单击其中一个按钮时,您都会增加 questionIndex 并重建您的小部件。在你的小部件树的一部分,你写 Text(questions[questionIndex])。您的数组 questions 包含两个问题。如果您启动您的应用 questionIndex=0,那么第一个问题将显示在 Text(questions[questionIndex])。如果您单击按钮 questionIndex=1,那么将显示第二个问题。如果您再次单击其中一个按钮,您会将 questionIndex 增加到 2。因此,现在您的小部件树会尝试在 questions[questionIndex] 中的第三个位置获取问题。但是没有第三个问题所以你的应用程序崩溃了。

我修改你的代码。也许这对你有用。并且不要过多地使用 setState() 方法。尝试学习 bLoc 架构。

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return MyAppState();
 }
}

enum Questions { firstQuestion, secondQuestion }

class MyAppState extends State<MyApp> {
var question = Questions.firstQuestion;

@override
Widget build(BuildContext context) {
var questions = [
  'What is your favourite colour',
  'what is favourite animal',
];

return MaterialApp(
  home: Scaffold(
    appBar: AppBar(
      title: Text('my first app'),
    ),
    body: Column(
      children: [
        Text(questions[question.index]),
        RaisedButton(
          child: Text("Ansewr 0"),
          onPressed: () {
            setState(() {
              question = Questions.firstQuestion;
            });
          },
        ),
        RaisedButton(
          child: Text("Ansewr 1"),
          onPressed: () {
            setState(() {
              question = Questions.secondQuestion;
            });
          },
        ),
      ],
    ),
  ),
);
}
}