如何避免"null check operator used null value"颤振



当我转到此页面时,我看到的是此错误(对Null值使用的Null检查运算符(,而不是内容。

我读过同样错误的问题,在答案中他们谈到了一个!太多了,但我不知道代码中的问题在哪里,也许错误指的是其他东西?你能告诉我如何更正代码吗?

这是我的家庭控制器:https://pastecode.io/s/g0frr7ui

class PastTasksView extends GetView<HomeController> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
height: Get.height,
width: Get.width,
color: Theme.of(context).scaffoldBackgroundColor,
//padding: EdgeInsets.symmetric(horizontal: 30, vertical: 50),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(top: 50, left: 25, right: 25),
child: Text(
'Attività svolte',
style: kSubHeadTextStyle.copyWith(
color: Theme.of(context).primaryColorDark),
),
),
SizedBox(height: Get.height * 0.012),
GetBuilder<HomeController>(
id: 1,
builder: (controller) {
return Expanded(
child: ListView.builder(
itemBuilder: (context, index) {
final task = controller.pastTasks[index]!;
return Slidable(
// actionPane: SlidableBehindActionPane(),
// actionExtentRatio: 0.2,
// controller: controller.slideC,
child: ExpandedContainer(
icon: task.taskImage,
title: task.tasktitle,
time: task.startTime,
desc: task.taskDesc,
ifDate: true,
date: DateFormat.yMMMd().format(task.taskDate!),
),
startActionPane: ActionPane(
motion: BehindMotion(),
children: [
SlidableAction(
onPressed: (context) {
// controller.slideC.activeState?.close();
Slidable.of(context)?.close();
controller.preUpdateTask(task);
showModalBottomSheet(
backgroundColor: Colors.transparent,
isScrollControlled: true,
context: context,
builder: (context) {
return BottomSheetContent(
buttonText: 'Update Task',
onSubmit: () {
controller.updateTask(task);
},
);
},
) as IconData;
},
label: "Update",
),
],
),
endActionPane: ActionPane(
motion: BehindMotion(),
children: [
SlidableAction(
onPressed: (context) {
// controller.slideC.activeState?.close();
Slidable.of(context)?.close();
controller.deleteTask(task);
},
label: "Delete",
),
],
),
);
},
itemCount: controller.pastTasks.length,
),
);
},
),
],
),
),
);
}
}

错误告诉您通过!-运算符强制打开null-value。这是禁止的。因此,您必须在代码中搜索此运算符的出现情况。我看到以下几行可能是错误的来源。

final task = controller.pastTasks[index]!;

date: DateFormat.yMMMd().format(task.taskDate!),

在这两种情况下,您都必须首先检查值是否为null。

使用!的地方很少,最好先进行空检查,然后执行操作,

final task = controller.pastTasks[index];
if( task==null ) return Text("got Null value");

//else 
return Slidable(....

也采用同样的方法

task.taskDate!=null? DateFormat.yMMMd().format(task.taskDate): yourDefaultDateFormat,

了解更多关于零安全的信息

最新更新