Flutter/Dart - PageViewBuilder 提供的数据出现空检查错误

问题描述

我收到 Pageviewbuilder 提供的数据的以下空检查错误

The following _CastError was thrown building:
Null check operator used on a null value

When the exception was thrown,this was the stack: 
#0      _StageBuilderState.createViewItem (package:speakoholic/screens/mainStage.dart:488:161)
#1      _StageBuilderState.build.<anonymous closure> (package:speakoholic/screens/mainStage.dart:138:18)

调用这个函数时第488行是speakcraft.tagname!

child: editIcon(
       context: context,userid:speakcraft.userid!,audioid:speakcraft.audioid!,title: speakcraft.title!,tagname:speakcraft.tagname!),

第 138 行是 createViewItem

   PageView.builder(
    itemCount: widget.speakcrafts.length,itemBuilder: (context,int currentIndex) {
      return createViewItem(widget.speakcrafts[currentIndex],context,currentIndex,widget.speakcrafts.length );
    },); 

这是函数

Widget editIcon({
  required BuildContext? context,required int? userid,required int? audioid,required String? title,required String? tagname}) {
  return
    FutureBuilder<int?>(                       
        ///some stuff
    );
}

如何解决这些空检查错误

解决方法

问题是您正试图通过使用 Bang ! 运算符(也称为空断言运算符)来使用不可为空的值来抛弃可空性:tagname:speakcraft.tagname!

另一方面,您的属性可以为空,因为 String? tagname 意味着 tagname 可以是 null

因此,为了避免这种情况,您可以更改您的 editIcon 方法:

editIcon(
   ...
   tagname:speakcraft?.tagname ?? 'some default value'),

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...