Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 测验结束后显示消息时出错,颤振_Flutter_Dart - Fatal编程技术网

Flutter 测验结束后显示消息时出错,颤振

Flutter 测验结束后显示消息时出错,颤振,flutter,dart,Flutter,Dart,目前我的应用程序中有3个问题,根据我的代码,在我的所有问题逐一回答后,屏幕上会出现一个小部件,该小部件会完全填满屏幕,并显示“你做到了”。但不幸的是,我已经尝试了很多,仍然找不到解决办法 下面是main.dart的代码 import 'package:flutter/material.dart'; import './quiz.dart'; import './result.dart'; //void main(){ //runApp(MyApp()); //} void main()

目前我的应用程序中有3个问题,根据我的代码,在我的所有问题逐一回答后,屏幕上会出现一个小部件,该小部件会完全填满屏幕,并显示“你做到了”。但不幸的是,我已经尝试了很多,仍然找不到解决办法

下面是main.dart的代码

import 'package:flutter/material.dart';
import './quiz.dart';
import './result.dart'; 


//void main(){
//runApp(MyApp());
//}

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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  final _questions = const [
    {
      'questionText': 'What\'s is your favourite color? ',
      'answers': ['Black', 'Red', 'Green', 'white'],
    },
    {
      'questionText': 'What\'s is your favourite animal?',
      'answers': ['Snake', 'Elephant', 'Lion'],
    },
    {
      'questionText': 'Who is your favourite instructor? ',
      'answers': ['Max', 'Max', 'Max', 'Max'],
    },

  ];
  var _questionIndex = 0;

  void _answerQuestion() {
    // var aBool= true;
    // aBool = false;

    setState(() {
      _questionIndex = _questionIndex;
    });
    print(_questionIndex);
    if (_questionIndex < _questions.length) {
      print('We have more questions!');
    } else {
      print('No more questions!');
    }
  }
  @override
  Widget build(BuildContext context) {
// var dummy =  ['Hello'];
// dummy.add('Max');
// print(dummy);
// dummy = [];
// questions = [];  

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('My First App'),
        ),
        body : _questionIndex <= 2
            ? Quiz(
              answerQuestion: _answerQuestion,
               questionIndex: _questionIndex,
                questions: _questions,


              )
              : Result(),

      ),
    );
  } 
}
下面是answer.dart的id代码

import 'package:flutter/material.dart';

class Answer extends StatelessWidget {
final Function selectHandler;
final String answerText;
  Answer(this.selectHandler, this.answerText);
  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child:  RaisedButton(
       color: Colors.blue,
       textColor: Colors.white,
       child: Text(answerText),
       onPressed: selectHandler,
      ), 
    );
  }
}
下面是quick.dart的代码

import 'package:flutter/material.dart';
import './question.dart';
import './answer.dart';

class Quiz extends StatelessWidget {
final List<Map<String, Object>>questions;
final int questionIndex;
final Function answerQuestion;

Quiz({
   @required this.questions, 
   @required this.answerQuestion, 
   @required this.questionIndex,
   });




  Widget build(BuildContext context) {
    return Column(
                children: [
                  Question(
                    questions[questionIndex]['questionText'],
                  ),
                  ...(questions[questionIndex]['answers'] as List<String>)
                      .map((answer) {
                    return Answer(answerQuestion, answer);
                  }).toList()
                ],
              );
  }
}

当我修正了下面这一行时,你的应用程序开始按照你所描述的那样工作。检查每个问题,然后显示“你做到了!”文本


您之前只是在做
\u questionIndex=\u questionIndex
,这不会改变任何值。

我没有得到您提到的错误

这就是我所做的

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _questions = const [
    {
      'questionText': 'What\'s is your favourite color? ',
      'answers': ['Black', 'Red', 'Green', 'white'],
    },
    {
      'questionText': 'What\'s is your favourite animal?',
      'answers': ['Snake', 'Elephant', 'Lion'],
    },
    {
      'questionText': 'Who is your favourite instructor? ',
      'answers': ['Max', 'Max', 'Max', 'Max'],
    },
  ];

  var _questionIndex = 0;

  void _answerQuestion(String question, String selectedAnswer) {
    print("==============================================");
    print("QUESTION: $question");
    print("SELECTED ANSWER: $selectedAnswer");
    print("==============================================");
    setState(() {
      _questionIndex++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('My First App'),
        ),
        body: _questionIndex < _questions.length //TODO:
            ? Quiz(
                quizQuestion: _questions[_questionIndex]["questionText"],
                quizOptions: _questions[_questionIndex]["answers"],
                onAnswerSelect: _answerQuestion,
              )
            : Result(),
      ),
    );
  }
}

class Quiz extends StatelessWidget {
  final String quizQuestion;
  final List<String> quizOptions;
  final void Function(String, String) onAnswerSelect;

  Quiz({
    @required this.quizQuestion,
    @required this.quizOptions,
    @required this.onAnswerSelect,
  });

  Widget build(BuildContext context) {
    return Column(
      children: [
        Question(quizQuestion),
        ...quizOptions.map(
          (option) => Answer(
            answerText: option,
            selectHandler: () => onAnswerSelect(quizQuestion, option),
          ),
        ),
      ],
    );
  }
}

class Question extends StatelessWidget {
  final String questionText;

  Question(this.questionText);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      margin: EdgeInsets.all(10),
      child: Text(
        questionText,
        style: TextStyle(fontSize: 28),
        textAlign: TextAlign.center,
      ),
    );
  }
}

class Answer extends StatelessWidget {
  final String answerText;
  final VoidCallback selectHandler;

  Answer({this.answerText, this.selectHandler});

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child: RaisedButton(
        color: Colors.blue,
        textColor: Colors.white,
        child: Text(answerText),
        onPressed: selectHandler,
      ),
    );
  }
}

class Result extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text('You did it!'),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了StatefulWidget{
@凌驾
State createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
最终问题=常数[
{
“问题文本”:“你最喜欢的颜色是什么?”,
‘答案’:[‘黑色’、‘红色’、‘绿色’、‘白色’],
},
{
“问题文本”:“你最喜欢的动物是什么?”,
‘答案’:[‘蛇’、‘大象’、‘狮子’],
},
{
“问题文本”:“你最喜欢的讲师是谁?”,
'答案':['Max','Max','Max','Max'],
},
];
var _指数=0;
void\u回答问题(字符串问题,字符串选择回答){
打印(“===================================================================”);
打印(“问题:$问题”);
打印(“选定答案:$selectedAnswer”);
打印(“===================================================================”);
设置状态(){
_问题索引++;
});
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(
标题:文本(“我的第一个应用程序”),
),
正文:\问题索引<\问题长度//待办事项:
?测验(
提问:[问题索引][“问题文本”],
提问:【问题索引】【答案】,
回答选择:\回答问题,
)
:Result(),
),
);
}
}
类小部件{
最后一道弦乐问答题;
最后名单问答;
最后一个空函数(字符串,字符串)在answerselect上;
测验({
@需要这个问题,
@需要这个,小测验,
@需要此选项。onAnswerSelect,
});
小部件构建(构建上下文){
返回列(
儿童:[
问题(quizQuestion),
…quizOptions.map(
(选项)=>答案(
答:选项,
selectHandler:()=>onAnswerSelect(提问,选项),
),
),
],
);
}
}
类问题扩展了无状态小部件{
最后的字符串文本;
问题(本问题文本);
@凌驾
小部件构建(构建上下文){
返回容器(
宽度:double.infinity,
保证金:所有(10),
子:文本(
问题文本,
样式:TextStyle(字体大小:28),
textAlign:textAlign.center,
),
);
}
}
类应答扩展了无状态小部件{
最终字符串应答文本;
最终作废处理程序;
回答({this.answerText,this.selectHandler});
@凌驾
小部件构建(构建上下文){
返回容器(
宽度:double.infinity,
孩子:升起按钮(
颜色:颜色,蓝色,
textColor:Colors.white,
子:文本(应答文本),
onPressed:selectHandler,
),
);
}
}
类结果扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回中心(
孩子:文本(“你做到了!”),
);
}
}

您好,我尝试按照您上面描述的方式更改代码,但似乎没有改变任何东西。此外,我发现另一个问题是,当我更改问题的一些答案时,我希望在我的应用程序中看到更改,但事实并非如此。所以现在当我改变我的问题或答案时,它不会出现在我的应用程序上。请帮帮我。另一个答案上的其他人也复制了你的代码,只更改了这一行,它可以正常工作,我们没有其他可以说的了。关于您更改答案,您是否使用热重新加载?它应该会尽快更改。问题文件下的TextAlign也有下划线,这会影响我的应用程序吗?请不要忘记将答案标记为正确。
import 'package:flutter/material.dart';


class Result extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
                child: Text('You did it!'),
              );
  }
}
setState(() {
  _questionIndex++;
});
import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _questions = const [
    {
      'questionText': 'What\'s is your favourite color? ',
      'answers': ['Black', 'Red', 'Green', 'white'],
    },
    {
      'questionText': 'What\'s is your favourite animal?',
      'answers': ['Snake', 'Elephant', 'Lion'],
    },
    {
      'questionText': 'Who is your favourite instructor? ',
      'answers': ['Max', 'Max', 'Max', 'Max'],
    },
  ];

  var _questionIndex = 0;

  void _answerQuestion(String question, String selectedAnswer) {
    print("==============================================");
    print("QUESTION: $question");
    print("SELECTED ANSWER: $selectedAnswer");
    print("==============================================");
    setState(() {
      _questionIndex++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('My First App'),
        ),
        body: _questionIndex < _questions.length //TODO:
            ? Quiz(
                quizQuestion: _questions[_questionIndex]["questionText"],
                quizOptions: _questions[_questionIndex]["answers"],
                onAnswerSelect: _answerQuestion,
              )
            : Result(),
      ),
    );
  }
}

class Quiz extends StatelessWidget {
  final String quizQuestion;
  final List<String> quizOptions;
  final void Function(String, String) onAnswerSelect;

  Quiz({
    @required this.quizQuestion,
    @required this.quizOptions,
    @required this.onAnswerSelect,
  });

  Widget build(BuildContext context) {
    return Column(
      children: [
        Question(quizQuestion),
        ...quizOptions.map(
          (option) => Answer(
            answerText: option,
            selectHandler: () => onAnswerSelect(quizQuestion, option),
          ),
        ),
      ],
    );
  }
}

class Question extends StatelessWidget {
  final String questionText;

  Question(this.questionText);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      margin: EdgeInsets.all(10),
      child: Text(
        questionText,
        style: TextStyle(fontSize: 28),
        textAlign: TextAlign.center,
      ),
    );
  }
}

class Answer extends StatelessWidget {
  final String answerText;
  final VoidCallback selectHandler;

  Answer({this.answerText, this.selectHandler});

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child: RaisedButton(
        color: Colors.blue,
        textColor: Colors.white,
        child: Text(answerText),
        onPressed: selectHandler,
      ),
    );
  }
}

class Result extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text('You did it!'),
    );
  }
}