Flutter开发待办应用出现_Cast Error空值校验运算符空值错误如何解决
错误根因
你遇到的空值错误来自两个核心问题:
- 跳转
AddNoteScreen时错误传递了updateNoteList参数 - 空值断言(!)使用前未做安全校验
修复步骤
1. 修正HomeScreen中跳转时的参数传递
你在HomeScreen的两个跳转入口里,都写了updateNoteList: _updateNoteList(),加了括号相当于直接执行_updateNoteList方法,把方法的返回值(void)传给了参数,所以AddNoteScreen拿到的updateNoteList永远是null。
找到对应代码改成传函数引用即可:
- ListTile的onTap跳转处修改为:
onTap: () => Navigator.push( context, CupertinoPageRoute( builder: (_) => AddNoteScreen( updateNoteList: _updateNoteList, // 去掉括号,传递函数本身 note: note ) ), ),
- 浮动按钮的onPressed跳转处修改为:
onPressed: () { Navigator.push( context, CupertinoPageRoute( builder: (_) => AddNoteScreen( updateNoteList: _updateNoteList, // 去掉括号,传递函数本身 ), )); },
2. 给空断言加安全校验
虽然删除按钮只有widget.note!=null时才会显示,但是保险起见可以给_delete和_submit方法里的空断言加判空逻辑,避免极端情况触发崩溃:
修改_delete方法:
_delete() { // 先判空再执行删除 if (widget.note?.id != null) { DatabaseHelper.instance.deleteNote(widget.note!.id!); } Navigator.pushReplacement( context, MaterialPageRoute(builder: (_)=> HomeScreen()) ); // 判空后再调用更新方法 widget.updateNoteList?.call(); }
修改_submit方法最后一行的调用:
// 把widget.updateNoteList!();替换为下面的代码 widget.updateNoteList?.call();
可选优化点
你每次增删改操作后都调用Navigator.pushReplacement跳转到新的HomeScreen完全没有必要,会产生多余的页面栈开销,只需要调用_updateNoteList后配合setState刷新当前页面即可,用户体验会更流畅。
内容的提问来源于stack exchange,提问作者Kate Jo
相关产品推荐
相关产品推荐

