我复制/粘贴了一些用于创建自定义 BoxDecoration 的示例代码:
class FrameDecoration extends Decoration {
@override
BoxPainter createBoxPainter([onChanged]) {
return _CustomDecorationPainter();
}
我收到此错误:
参数“onChanged”因其类型而不能具有“null”值,但隐含的默认值为“null”。
尝试添加显式的非空默认值或“必需”修饰符。
好的,这是有道理的:这是一个零安全问题。我的 pubspec.yaml “环境”:sdk: ">=2.12.0 <3.0.0"
所以我尝试添加“必需”:
class FrameDecoration extends Decoration {
@override
BoxPainter createBoxPainter(required [onChanged]) {
return _CustomDecorationPainter();
}
这次的错误是:
'FrameDecoration.createBoxPainter' ('BoxPainter Function(void Function())'] 不是 'Decoration.createBoxPainter' ('BoxPainter Function('void Function()])') 的有效覆盖。
我尝试了其他几件事 - 没有快乐。
两条消息还说:
onChanged 参数 ... 如果没有画家会改变的变化,则可以省略。
我尝试了“无参数”(“createBoxPainter()”),并尝试了一个空列表(“createBoxPainter([])”)。仍然没有喜悦。
我想要的只是使用自定义的“paint()”方法创建自己的“装饰”类。
问:从 createBoxPainter() 中省略 onChanged 的正确语法是什么?
问:本例中“createBoxPainter()”的推荐语法是什么?
pedro pimont 给了我我正在寻找的语法:
@override
BoxPainter createBoxPainter([VoidCallback? onChanged]) {
return _CustomDecorationPainter();
}
// <= Explicitly adding the type, and making it nullable, resolved the compile error