flutter - 必须向 Text 小部件提供非空字符串 - 颤振
问题描述
我是 Flutter 的新手,我正在通过 Udemy 上的一门课程学习它,在本课程中我们学习创建一个简单的 BMI 计算器,但问题是我的应用程序统计数据运行良好,我可以更改数字和性别它有时会显示结果
<════════ 小部件库捕获的异常════════════
在构建 ResultsPage(dirty) 时抛出了以下断言:
必须向 Text 小部件提供非空字符串。
'package:flutter/src/widgets/text.dart':
断言失败:第 381 行第 10 行:“数据!= null”
相关的导致错误的小部件是:
结果页面文件:///D:/FlutterProjects/bmi_calculator/lib/input_page.dart:223:47
抛出异常时,这是堆栈:
#2 新文本(包:flutter/src/widgets/text.dart:381:10)
#3 ResultsPage.build(包:bmi_calculator/results_page.dart:50:19)
#4 StatelessElement.build (package:flutter/src/widgets/framework.dart:4749:28)
#5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4675:15)
#6 Element.rebuild (package:flutter/src/widgets/framework.dart:4369:5)>
我不知道到底是什么问题我试图在这里阅读类似的问题,但不幸的是,我找不到我传递空的文本小部件。这是我的结果页面的代码
import 'package:bmi_calculator/bottom_button.dart';
import 'package:bmi_calculator/constants.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'reusable_card.dart';
class ResultsPage extends StatelessWidget {
ResultsPage(
{@required this.resultText,
@required this.bmiResult,
@required this.interpretation});
final String resultText;
final String bmiResult;
final String interpretation;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Your Results'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Expanded(
child: Container(
padding: EdgeInsets.all(15.0),
alignment: Alignment.bottomLeft,
child: Text(
'Your Results',
style: kTitleStyle,
),
),
),
Expanded(
flex: 5,
child: ReusableCard(
colour: kActiveCardColour,
cardChild: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
bmiResult,
style: kResultTextStyle,
),
Text(
resultText,
style: kNumberTextStyle.copyWith(
fontSize: 100.0,
fontWeight: FontWeight.bold,
),
),
Text(
interpretation,
textAlign: TextAlign.center,
style: kBMIResultTextStyle,
)
],
),
),
),
BottomButton(
onTap: () => Navigator.pop(context), buttonTitle: 'ReCalculate')
],
),
);
}
}
编辑:谢谢大家回复我的问题。所有解决方案都对我有用,并阻止了我的应用程序崩溃。我用了这个方法
Text(
bmiResult ?? '',
style: kResultTextStyle,
),
Text(
resultText ?? '',
style: kNumberTextStyle.copyWith(
fontSize: 100.0,
fontWeight: FontWeight.bold,
),
),
Text(
interpretation ?? '',
textAlign: TextAlign.center,
style: kBMIResultTextStyle,
)
保持我的代码简洁明了。但是,我也在我的代码中意识到了其他一些东西。我的应用程序中有三个条件,你可以猜到是体重不足、正常和超重。当我计算结果时,应用程序会显示resultText
并且interpretation
只有当它超重时才会显示。如果结果正常或体重过轻,则不会显示它们,我认为这意味着这就是我的应用程序崩溃的原因,因为它无法获取我为正常和体重过轻分配的文本字符串。
解决方案
您只需要检查您的变量:resultText、bmiResult、解释是否不为空,因为文本小部件无法接收空值。
Text(
this.bmiResult != null ? this.bmiResult : "",
style: kResultTextStyle,
),
Text(
this.resultText != null ? this.resultText : "",
style: kNumberTextStyle.copyWith(
fontSize: 100.0,
fontWeight: FontWeight.bold,
),
),
Text(
this.interpretation != null ? this.interpretation : "",
textAlign: TextAlign.center,
style: kBMIResultTextStyle,
)
或者,您可以只使用空合并运算符 ?? 简化:
this.interpretation ?? ""
推荐阅读
- django - Django从模型中删除外部关系
- c++ - 多线程中的 cout 没有 C++20 中的 LOCK
- python - NameError:名称“变量”未定义 - tkinter
- java - 我如何停止 WatchService (java)
- angular - 具有自签名证书链的 Angular 项目
- ruby-on-rails - 创建评估时出现 Google reCAPTCHA Enterprise Unknown field 错误
- regex - 使用 grep 查找任何不以 'const' 开头或前面没有任何内容的字符串
- objective-c - 从另一个模态对话框打开一个模态对话框(模态窗口或工作表)
- python - 无法在 pygame 中更改颜色?
- vue.js - 为什么我的 nuxt 静态站点不提供在 Dist 文件夹中找到的静态 html 文件?