小部件库捕获的异常,在颤振中抛出以下断言构建答案**错误**
Posted
技术标签:
【中文标题】小部件库捕获的异常,在颤振中抛出以下断言构建答案**错误**【英文标题】:Exception caught by widgets library ,The following assertion was thrown building Answer **error** in flutter 【发布时间】:2021-07-24 21:01:20 【问题描述】:我是 flutter 的新手,或者编程要清晰。我正在学习一门课程,与讲师做同样的事情,该应用程序为他工作,但是当我尝试运行它时,出现此错误。
// @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'],
),
...(questions[questionIndex]['answers'] as List<Map<String, Object>>)
.map((answer)
return Answer(() => answerQuestion(answer['score']), answer['text']);
).toList()
],
);
【问题讨论】:
【参考方案1】:这意味着您的地图在某处有一个空值。将您的代码更改为:
Answer(() => answerQuestion(answer['score']??"NA"), answer['text']??"NA");
【讨论】:
也许你也需要为“问题”做这件事。基本上看看你的小部件,你有一个文本小部件,并确保你考虑了空值。【参考方案2】:问题可能是课程中的人使用的是旧版本的 Flutter,它不使用 null safety。因此,要解决此问题,您需要将代码迁移到空安全。有关如何以及何时使用 null 安全性的更多信息,您可以参考这篇很棒的 video from Robert Brunehage。您需要对代码进行的修复如下:
1.将@required
改为required
2.为没有值的变量添加问号,
不好的例子:
int questionIndex;
这将导致空错误,因为name
没有值(意味着它为空)
正确示例
int? questionIndex;
这个变量现在是 null 安全的,可以防止它以错误结束。
3.在您现在将没有默认值 null 的变量设为安全之后,您必须在某些地方添加 !
(您的 IDE 应该会告诉您正常添加它的位置)
代码错误:
questions[questionIndex]['questionText'],
正确代码
questions[questionIndex!]['questionText'],
如果您不想使用 Null 安全性(不推荐!)
如果你的变量没有值(为空),你可以给你的小部件一个默认文本
Question(questions[questionIndex]['questionText']?? "default value",),
【讨论】:
以上是关于小部件库捕获的异常,在颤振中抛出以下断言构建答案**错误**的主要内容,如果未能解决你的问题,请参考以下文章