Android 范围错误索引无效值不在范围内,0..1,包括dart颤振应用程序中的2

Android 范围错误索引无效值不在范围内,0..1,包括dart颤振应用程序中的2,android,flutter,dart,mobile-application,flutter-dependencies,Android,Flutter,Dart,Mobile Application,Flutter Dependencies,我正在学习一个颤振应用程序教程,遇到以下错误: 范围错误索引无效值不在范围内,0..1包括2 关于如何解决这个问题有什么建议吗 import 'package:flutter/material.dart'; //void main() { //runApp(MyApp()); //} void main()=>runApp(MyApp()); class MyApp extends StatefulWidget{ @override State<StatefulWid

我正在学习一个颤振应用程序教程,遇到以下错误:

范围错误索引无效值不在范围内,0..1包括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,),



          ],),

),);
  }
}
导入“包装:颤振/材料.省道”;
//void main(){
//runApp(MyApp());
//}
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
状态createState(){
返回MyAppState();
}
}
类MyAppState扩展了状态{
var指数=0;
无效答案问题(){
设置状态(){
questionIndex=questionIndex+1;
});
打印(问题索引);
//打印(“回答选择!”);
}
@凌驾
小部件生成(BuildContext上下文){
var questions=[“你最喜欢的颜色是什么”,“最喜欢的动物是什么,”;
返回材料PP(主页:脚手架)(
appBar:appBar(标题:文本(“我的第一个应用”),
正文:列(子项:[文本(问题[问题索引]),
//RaisedButton(子项:文本(“Ansewr 1”),按下时:()=>打印(“答案1”),
//升起按钮(子项:文本(“Ansewr 1”),按下:回答问题),
RaisedButton(子项:文本(“Ansewr 0”),ON按下:回答问题,
升起按钮(子项:文本(“Ansewr 1”),按下:回答问题,),
],),
),);
}
}

您的问题应该包含错误发生的时间。但我猜,在您总共第二次单击其中一个
RaisedButton
s后,会出现错误吗


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

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

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;
            });
          },
        ),
      ],
    ),
  ),
);
}
}
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
状态createState(){
返回MyAppState();
}
}
枚举问题{firstQuestion,secondQuestion}
类MyAppState扩展了状态{
var问题=问题。第一个问题;
@凌驾
小部件构建(构建上下文){
变量问题=[
“你最喜欢什么颜色?”,
“最喜欢的动物是什么?”,
];
返回材料PP(
家:脚手架(
appBar:appBar(
标题:文本(“我的第一个应用程序”),
),
正文:专栏(
儿童:[
文本(问题[问题索引]),
升起的按钮(
子项:文本(“0”),
已按下:(){
设置状态(){
问题=问题。第一个问题;
});
},
),
升起的按钮(
子项:文本(“1”),
已按下:(){
设置状态(){
问题=问题。第二个问题;
});
},
),
],
),
),
);
}
}

谢谢兄弟,你真的让我对颤振这个概念有了深刻的了解