Flutter/Dart错误:'Key?'无法赋值给参数类型'Key'求助
解决Key类型不匹配的错误
问题原因
你遇到的错误是因为当前PositionedEditPictureButton组件的key为可空类型Key?,而CircularIconButton的key参数要求的是非可空类型Key,直接传递会导致类型不兼容。
解决方法
方法1:修改CircularIconButton的key参数为可空类型(推荐,符合Flutter最佳实践)
如果你有权限修改circular_icon_button.dart文件,将CircularIconButton构造函数的key参数改为可空类型:
const CircularIconButton({ Key? key, // 将Key改为Key? required this.size, required this.icon, required this.color, required this.onPressed, }) : super(key: key);
方法2:传递key时使用null断言(仅确定key不为null时使用)
若无法修改CircularIconButton,可通过!断言告诉Dart当前key一定不为null:
CircularIconButton( size: 40.0, icon: Icon( Icons.add_a_photo, size: 24, color: ColorPalette().mainBackground, ), key: key!, // 添加null断言 color: Colors.black, onPressed: () {}, )
方法3:为CircularIconButton分配独立Key(避免复用父组件key)
如果不需要传递父组件的key,直接给按钮生成独立的Key:
CircularIconButton( size: 40.0, icon: Icon( Icons.add_a_photo, size: 24, color: ColorPalette().mainBackground, ), key: UniqueKey(), // 生成独立的唯一Key color: Colors.black, onPressed: () {}, )
额外优化:修正父组件的key声明
当前PositionedEditPictureButton的key写法不符合Flutter常规规范,Widget的key默认是可选可空的,建议调整为:
const PositionedEditPictureButton({ Key? key, // 改为可空类型,移除required(除非业务强制要求key) required this.child, this.canEdit = false, this.bottomPosition = 10.0, }) : super(key: key);
内容的提问来源于stack exchange,提问作者Brandon Ellett
相关产品推荐
相关产品推荐

