Nullaware 运算符似乎不能在文本小部件内工作?
Nullaware operator doesn't seem to work inside a Text widget?
我有简单的代码如下:
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
将 return 为空,我希望 Text
小部件接受 'Ok'
并呈现相同的内容。但是,我仍然在屏幕上看到 null。
请提供有关为什么这不起作用的任何帮助。谢谢。
此外,我不明白为什么我不能在构建方法之前使用 try catch
块,因为它会出错。
免责声明:这个问题是关于 null-safety 之前的 Dart。启用空值安全,这种情况就不会发生。
在您的情况下,即使 myDouble
为空,当您执行
'$variable'
您正在创建一个 new 字符串,它不是空的(由 "
或 '
符号表示)。
因此永远不会调用 null 感知运算符之后的 'ok'。
此外,在字符串中使用 ${var}
称为 String Interpolation,如文档所述:
To get the string corresponding to an object, Dart calls the object’s toString() method.
并且,空对象 returns 上的 toString()
方法只是 null
,这会导致您的文本显示空。
想要的结果有很多种方法,你可以这样做,举个例子:
(myDouble == null) ? 'ok' : '$myDouble' ,
作为提醒,Dart now supports null safety,您应该在新代码中使用它(并迁移旧代码)。有了 null safety,您之前可能会注意到这个错误。
Text('$myDouble')
将 null 转换为字符串 null
'$myDouble' is now 'null'(string)
要管理 null String 变量,您可以通过以下任一方式执行此操作
Text(myDouble == null ? 'Ok' : myDouble.toString);
我有简单的代码如下:
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
将 return 为空,我希望 Text
小部件接受 'Ok'
并呈现相同的内容。但是,我仍然在屏幕上看到 null。
请提供有关为什么这不起作用的任何帮助。谢谢。
此外,我不明白为什么我不能在构建方法之前使用 try catch
块,因为它会出错。
免责声明:这个问题是关于 null-safety 之前的 Dart。启用空值安全,这种情况就不会发生。
在您的情况下,即使 myDouble
为空,当您执行
'$variable'
您正在创建一个 new 字符串,它不是空的(由 "
或 '
符号表示)。
因此永远不会调用 null 感知运算符之后的 'ok'。
此外,在字符串中使用 ${var}
称为 String Interpolation,如文档所述:
To get the string corresponding to an object, Dart calls the object’s toString() method.
并且,空对象 returns 上的 toString()
方法只是 null
,这会导致您的文本显示空。
想要的结果有很多种方法,你可以这样做,举个例子:
(myDouble == null) ? 'ok' : '$myDouble' ,
作为提醒,Dart now supports null safety,您应该在新代码中使用它(并迁移旧代码)。有了 null safety,您之前可能会注意到这个错误。
Text('$myDouble')
将 null 转换为字符串 null
'$myDouble' is now 'null'(string)
要管理 null String 变量,您可以通过以下任一方式执行此操作
Text(myDouble == null ? 'Ok' : myDouble.toString);