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