BoxPainter createBoxPainter([onChanged]) => Параметр onChanged не может иметь значение null
Я скопировал / вставил пример кода для создания собственного BoxDecoration:
class FrameDecoration extends Decoration {
@override
BoxPainter createBoxPainter([onChanged]) {
return _CustomDecorationPainter();
}
Я получаю такую ошибку:
Параметр onChanged не может иметь значение null из-за своего типа, но неявное значение по умолчанию - null.
Попробуйте добавить либо явное ненулевое значение по умолчанию, либо модификатор required.
Хорошо, в этом есть смысл: это нулевая проблема безопасности. Моя "среда" pubspec.yaml:
sdk: ">=2.12.0 <3.0.0"
Поэтому я пытаюсь добавить «обязательно»:
class FrameDecoration extends Decoration {
@override
BoxPainter createBoxPainter(required [onChanged]) {
return _CustomDecorationPainter();
}
На этот раз ошибка:
'FrameDecoration.createBoxPainter' ('BoxPainter Function(voidFunction())'] не является допустимым переопределением для 'Decoration.createBoxPainter'('BoxPainter Function('void Function()])').
Я пробовал еще несколько вещей - без радости.
В обоих сообщениях также говорится:
Аргумент onChanged ... может быть опущен, если рисовальщик не изменит никаких изменений.
Я попробовал «без параметров» («createBoxPainter()»), и я попробовал пустой список («createBoxPainter ([])»). По-прежнему никакой радости.
Все, что я хочу, - это создать свой собственный класс «Украшение» с помощью специального метода «paint ()».
В: Каков правильный синтаксис для исключения onChanged из createBoxPainter()?
В: Какой рекомендованный синтаксис для createBoxPainter() в этом примере?
Педро Пимонт дал мне синтаксис, который я искал:
@override
BoxPainter createBoxPainter([VoidCallback? onChanged]) {
return _CustomDecorationPainter();
}
// <= Explicitly adding the type, and making it nullable, resolved the compile error
1 ответ
В
createBoxPainter
от
Decoration
класс, который вы пытаетесь переопределить, принимает необязательный
VoidCallback onChanged
параметр, поэтому, если вы не предоставите ему значение по умолчанию, вы также должны пометить его как допускающее значение NULL, используя
?
, попробуй это:
BoxPainter createBoxPainter([VoidCallback? onChanged])
Кроме того, хотя ни один из перечисленных ниже вариантов не будет работать, что касается синтаксиса Dart, вы помечаете необязательный параметр как обязательный, это не разрешено.
Либо используйте именованный параметр, чтобы использовать необходимое ключевое слово, используя
{}
:
BoxPainter createBoxPainter({required Function onChanged})
Или сделайте это обязательным, удалив
[]
BoxPainter createBoxPainter(Function onChanged)