我做了一个Loader
小部件,如果isLoading = true
,它会显示一个加载指示器,如果isLoading = false
,它会显示一个子小部件。
问题是当我在子对象中使用可空数据时,即使isLoading = true
应该阻止子对象被渲染,Flutter仍然给我Null check operator used on a null value
和一个红色屏幕。
示例:
class Example extends StatelessWidget {
const Example({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
String? data = null; // Just an example
return Loader(
isLoading: data == null,
child: Text(data!), // Flutter will parse this even though Loader never attempted to render it
);
}
}
这是我的Loader小部件:
class Loader extends StatelessWidget {
const Loader({
Key? key,
required this.isLoading,
required this.child,
}) : super(key: key);
final bool isLoading;
final Widget child;
@override
Widget build(BuildContext context) {
if (isLoading) {
return CircularProgressIndicator();
else {
return child;
}
}
}
- 注意:我希望Loader作为 Package 器来清理我的代码,因为我的
isLoading
、Loader和数据要复杂得多。*
3条答案
按热度按时间eyh26e7m1#
你可以重构你的
Loader
来使用构建器:那就像这样
3df52oht2#
尝试解析代码时会发生这种情况,即使该部分代码未呈现,因为dart null安全策略不接受
null
值上的!
。因此,这不是Loader
小工具中的问题,这是在您尝试传递的子对象内部。尝试如下设置默认值:xam8gpfp3#
当
null
小部件为null
时,您可以使用??
设置要在Text
小部件中显示的默认值,方法如下: