Flutter报错:Null类型无法赋值给Map<String, dynamic>参数问题求助
错误原因
- Dart空安全机制下,你定义的
Note类中note属性为非空的Map<String, dynamic>类型,不允许接收null值 - 新增笔记场景下无需传入已有笔记数据,你在悬浮按钮跳转逻辑中传入了null,与类型定义冲突触发报错
解决方法
仅需修改Note类的属性声明及对应调用位置的空安全处理即可:
- 将
Note类的note属性修改为可空类型
class Note extends StatefulWidget{ final NoteMode noteMode; // 末尾加?标记该属性可接收null值 final Map<String, dynamic>? note; Note(this.noteMode, this.note,); @override State<Note> createState() => _NoteState(); }
- 所有调用
widget.note的位置补充非空断言(因为仅编辑模式会用到note属性,此时note一定有有效值,可安全使用!断言非空)
- 修改
didChangeDependencies方法内的取值逻辑:
@override void didChangeDependencies(){ if(widget.noteMode == NoteMode.Editing){ _titleController.text = widget.note!['title']; _textController.text = widget.note!['text']; } super.didChangeDependencies(); }
- 修改更新笔记的传参逻辑:
NoteProvider.updateNote( { 'id': widget.note!['id'], 'title': _titleController.text, 'text': _textController.text, });
- 修改删除笔记的传参逻辑:
await NoteProvider.deleteNote(widget.note!['id']);
修改完成后原有悬浮按钮的跳转逻辑无需改动,即可正常运行。
内容的提问来源于stack exchange,提问作者Grimmer
相关产品推荐
相关产品推荐

