范围错误索引无效值不在范围内,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;
});
},
),
],
),
),
);
}
}
我正在学习一个 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;
});
},
),
],
),
),
);
}
}