我復制/粘貼了一些用于創建自定義 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
uj5u.com熱心網友回復:
該createBoxPainter從Decoration你想覆寫類有一個可選的VoidCallback onChanged引數,所以,如果你不使用默認值提供它,還必須將其標記為可為空的使用?,試試這個:
BoxPainter createBoxPainter([VoidCallback? onChanged])
此外,盡管以下這些都不起作用,但關于 Dart 語法,您將可選引數標記為必需,這是不允許的。
使用命名引數來使用所需的關鍵字{}:
BoxPainter createBoxPainter({required Function onChanged})
或者通過洗掉使其成為必需的 []
BoxPainter createBoxPainter(Function onChanged)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/338153.html
標籤:扑 镖 飞镖零安全 flutter-border 装饰
