在flutter中使用了对空值的空检查运算符错误。

14 浏览
0 Comments

在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)

0
0 Comments

问题的原因是在代码中没有对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"的错误,并正确地从数据库获取数据进行显示。

0