范围错误指数无效值不在范围内,在Dart flutter应用程序中为0..1(含2)

问题描述 投票:0回答:2

我正在执行一个flutter应用程序教程,并且遇到此错误Range error index无效值不在范围内,dart flutter app.pls中的0..1含2。伙计们可以帮助我。我正在遵循一个flutter应用程序教程,并且遇到此错误Range错误索引无效值不在范围内,dart flutter app.pls中的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,),



          ],),

),);
  }
}
android flutter flutter-layout mobile-application flutter-dependencies
2个回答
0
投票

您的问题应包含在何时发生错误。但是我猜想是您总共第二次单击RaisedButton之一后出现了错误?

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


0
投票

我修改您的代码。也许对您有用。并且不要过多使用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;
            });
          },
        ),
      ],
    ),
  ),
);
}
}
© www.soinside.com 2019 - 2024. All rights reserved.