我是一名编程新手,并且正在学习一门没有空安全性的老课程。我试图通过插入一个默认值来解决这个问题,但这只会使按钮上的所有文本都有“默认值”一词。
// @dart=2.9
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.red.shade400,
textColor: Colors.white,
child: Text(answerText?? 'default value'),
onPressed: selectHandler,
));
}
}
编辑:
答案类在这里被调用:
// @dart=2.9
import 'package:flutter/material.dart';
import 'package:flutter/services.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});
@override
Widget build(BuildContext context) {
return ListView(
children: [
Question(
questions[questionIndex]['questionText']?? "default value",
),
...(questions[questionIndex]['answers'] as List<Map<String, Object>>)
.map((answer) {
return Answer(() => answerQuestion(answer['score']), answer['text']);
}).toList()
],
);
}
}
1条答案
按热度按时间hjzp0vay1#
在零安全镖中,一个
String
将永远不会为null,因此无法使用??
一串之后。但是,您可以定义answerText
作为一个String?
这将使其成为可为空的字符串。有关更多详细信息,请访问此网站。上面的解释可以使程序运行,但在任何地方设置默认值都不是一种好的编码方式。当您或您的团队试图调试您的代码时,这将导致很多麻烦。更好的做法是在启动对象时设置默认值: