我在布局中使用行和列,并从互联网加载一些数据以在行和列中显示信息。
我想设计一个动态加载页面,使得每个加载的数据都使特定的小部件通过动画可见(通过平滑地移动其他小部件)。
我目前在布局中使用 if 子句,并setState()在检索新数据时调用。
Column(
children: [
SomeWidget(),
if (data != null)
DataWidget(),
AnotherWidget(),
],
),
Run Code Online (Sandbox Code Playgroud)
检索某些数据后,如何在带有动画的行/列中的其他小部件之间插入小部件?
当我在语句中使用变量时,Dart 编译器不明白该变量不能为 nullif (x != null)。它仍然需要使用条件?或空检查!运算符来访问变量的字段或方法之一。
这是一个例子:
String? string;
void test() {
if (string != null) {
print(string.length);
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生一个编译时错误并表示
无法无条件访问属性“length”,因为接收者可以为“null”。尝试使访问成为有条件的(使用“?.”)或向目标添加空检查(“!”)。
然而,接收者实际上不能为空,因为它是用if (string != null)块包裹的。string?.length使用或访问字段string!.length效果很好,但当我需要使用变量的不同字段或方法时,可能会感到困惑。
String? string;
void test() {
if (string != null) {
print(string.length);
print(string.isNotEmpty);
print(string.trim());
print(string.contains('x'));
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些陈述都会引发相同的错误。我也尝试放置assert(string != null);,但编译器仍然不明白该字符串不为空。
举一个更复杂的例子;
User? user;
@override
Widget build(BuildContext context) {
if (user == null) {
return Text('No user available');
} else { …Run Code Online (Sandbox Code Playgroud)