Я новичок в флаттере, и я попытался сделать базовое приложение типа викторины, которое содержит код, приведенный ниже.
import 'package:flutter/material.dart';
import './question.dart';
import './answer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return MyAppState();
}
}
class MyAppState extends State<MyApp> {
var questionNo = 0;
Widget build(BuildContext context) {
void questionchange() {
setState(() {
questionNo = questionNo + 1;
});
print('Answer 1 is selected');
}
const questions = [
{
'QuesionText': 'What is your favourite color',
> 'AnswerText': ['Red', 'Blue', 'Violet', 'Green'],
},
{
'QuestionText': 'What is your favourite animal',
'AnswerText': ['Tiger', 'Lion', 'Elephant', 'Rabbit'],
},
{
'QuesionText': 'What is your favourite Country',
'AnswerText': ['Rwanda', 'Netherland', 'USA', 'India'],
}
];
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('My first app'),
),
body: Column(
children: [
Questions(questions[questionNo]['QuestionText'] as String),
...(questions[questionNo]['AnswerText'] as List<String>)
.map((answer) {
return Answers(questionchange, answer);
}).toList(),
],
),
),
);
}
}
import 'package:flutter/material.dart';
class Questions extends StatelessWidget {
final String quest;
Questions(this.quest);
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.all(20),
width: double.infinity,
child: Text(
quest,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 26),
));
}
}
import 'package:flutter/material.dart';
class Questions extends StatelessWidget {
final String quest;
Questions(this.quest);
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.all(20),
width: double.infinity,
child: Text(
quest,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 26),
));
}
}
Когда я пытаюсь запустить это, экран приложения показывает
type 'Null' is not a subtype of type 'String' in type cast на красном фоне.
Также консоль отладки отображается как соответствующая ошибка, вызывающая виджет MyApp.
а также строчка Questions(questions[questionNo]['QuestionText'] as String).
Может кто-нибудь, пожалуйста, скажите мне, что вызывает эту ошибку.





в вашем:
const questions = [
{
'QuesionText': 'What is your favourite color',
'AnswerText': ['Red', 'Blue', 'Violet', 'Green'],
},
{
'QuestionText': 'What is your favourite animal',
'AnswerText': ['Tiger', 'Lion', 'Elephant', 'Rabbit'],
},
{
'QuesionText': 'What is your favourite Country',
'AnswerText': ['Rwanda', 'Netherland', 'USA', 'India'],
}
];
поскольку вы написали «QuesionText» вместо «QuestionText», это должно быть:
const questions = [
{
'QuestionText': 'What is your favourite color',
'AnswerText': ['Red', 'Blue', 'Violet', 'Green'],
},
{
'QuestionText': 'What is your favourite animal',
'AnswerText': ['Tiger', 'Lion', 'Elephant', 'Rabbit'],
},
{
'QuestionText': 'What is your favourite Country',
'AnswerText': ['Rwanda', 'Netherland', 'USA', 'India'],
}
];
это произошло потому, что когда вы читаете это здесь:
Questions(questions[questionNo]['QuestionText'] as String),
это даст вам нулевую ошибку.
У вас есть опечатка в двух ваших ключах; заменить 'QuesionText' на 'QuestionText'.