如何解决Nullaware 运算符似乎在 Text 小部件中不起作用?
我有简单的代码如下:
class TestPage extends StatelessWidget {
static String myString = 'abc';
static double myDouble;
@override
Widget build(BuildContext context) {
try {
myDouble = double.parse(myString) + 5;
} catch (e) {
print(e);
}
return Scaffold(
body: Center(
child: Text(
'$myDouble' ?? 'Ok',style: TextStyle(fontSize: 50),),);
}
}
由于 myDouble
将返回 null,我希望 Text
小部件接受 'Ok'
并呈现相同的内容。但是,我仍然看到屏幕上显示空值。
有关为什么这不起作用的任何帮助。谢谢。
另外,我不明白为什么我不能在构建方法之前使用 try catch
块,因为它会出错。
解决方法
免责声明:这个问题是关于 null-safety 之前的 Dart。开启空值安全后,这种情况就不会发生。
就您而言,即使 myDouble
为空,当您这样做时
'$variable'
您正在创建一个不为空的 new 字符串(由 "
或 '
符号表示)。
因此无论如何都不会调用空感知运算符之后的“确定”。
此外,在字符串中使用 ${var}
称为 String Interpolation,如文档所述:
为了获取对象对应的字符串,Dart 调用对象的 toString() 方法。
而且,空对象上的 toString()
方法只返回 null
,这会导致您的文本显示为空。
想要的结果有很多方法,你可以做,例如:
(myDouble == null) ? 'ok' : '$myDouble',
提醒一下,Dart now supports null safety,您应该在新代码(以及迁移旧代码)中使用它。使用 null 安全性,您之前可能会注意到此错误。
,Text('$myDouble')
将 null 转换为字符串 null
'$myDouble' is now 'null'(string)
要管理空字符串变量,您可以通过两种方式执行此操作
Text(myDouble == null ? 'Ok' : myDouble.toString);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。