在flutter中使用了对空值的空检查运算符错误。
在flutter中使用了对空值的空检查运算符错误。
如何解决这个问题?
这段代码出现了一个空安全错误,我尝试从数据库中获取数据并显示为一个轮播滑块。
FutureBuilder(
future: getSlider,
builder: (BuildContext context, AsyncSnapshot> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// 在这里创建设计
return SizedBox(
height: 27.0.h,
child: Swiper(
autoplay: true,
itemCount: snapshot.data!.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {},
child: Padding(
padding: EdgeInsets.all(10),
child: Container(
child: Stack(
children: [
ClipRRect(
child: Image.network(
listSlider[index].photo,
fit: BoxFit.cover,
width: 100.0.w,
),
borderRadius: BorderRadius.circular(15),
),
],
),
),
),
);
},
),
);
} else {
return Container();
}
},
)
以下是在调试控制台中加载的错误:
════════ Exception caught by widgets library ═══════════════════════════════════
在 FutureBuilder> 上使用了空安全运算符,但值为空
引发错误的相关部件是
FutureBuilder>
当引发异常时,此时的堆栈信息为
#0 _HomeState.build.
#1 _FutureBuilderState.build
#2 StatefulElement.build
#3 ComponentElement.performRebuild
#4 StatefulElement.performRebuild
#5 Element.rebuild
#6 BuildOwner.buildScope
#7 WidgetsBinding.drawFrame
#8 SchedulerBinding._invokeFrameCallback
#9 SchedulerBinding.handleDrawFrame
(省略了来自 dart:async 的 3 个帧)
[![enter image description here](https://i.stack.imgur.com/ek9Zu.png)](https://i.stack.imgur.com/ek9Zu.png)
问题的原因是在代码中没有对snapshot.data
进行空值检查。解决方法是在使用snapshot.data
之前,先判断snapshot.data
是否为null,如果为null,则返回一个显示"no data"的Text组件;如果不为null,则正常创建设计。
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.data == null) {
return Text('no data');
} else {
return SizedBox(
height: 27.0.h,
child: Swiper(
autoplay: true,
itemCount: snapshot.data!.length,
itemBuilder: (BuildContext context, int index) {
/// ....
},
),
);
}
}
这样做可以避免在数据为空时出现"Null check operator used on a null value"的错误,并正确地从数据库获取数据进行显示。