#flutter #dart
Вопрос:
недавно я столкнулся с этой проблемой, но я понятия не имею, где она находится. Я получаю эту ошибку. Тип аргумента «динамическая функция(bool)?» не может быть присвоен типу параметра » Функция void(bool?)?»
Где я совершаю ошибку?
class GroceryTile extends StatelessWidget {
GroceryTile({Key? key, required this.item, required this.onComplete})
: textDecoration = item.isComplete != null
? TextDecoration.lineThrough
: TextDecoration.none,
super(key: key);
final GroceryItem item;
final Function(bool) onComplete;
final TextDecoration textDecoration;
@override
Widget build(BuildContext context) {
return Container(
height: 100.0,
// TODO: 20 Replace this color
color: Colors.red,
);
}
Widget buildCheckbox() {
return Checkbox(
value: item.isComplete,
onChanged: **onComplete** //error is occurring here
);
}
}
Комментарии:
1. если вы хотите обновить свой флажок, вы должны использовать виджет с отслеживанием состояния
Ответ №1:
final void Function(bool?)? onComplete
Флажок является функцией void, поэтому вы также должны указать void в своем объявлении для завершения, если вы не используете безопасность null, просто удалите этот знак ?
Ответ №2:
Ваш участник, завершенный, имеет тип
void Function(bool)
Это должно быть
void Function(bool?)
Он должен иметь возможность работать с нулевым параметром.
Ответ №3:
Ошибка возникла из-за того, что для методов checkbox OnChanged требуется функция(bool?)? но вы предоставили динамическую функцию(bool)?. void Function(bool?)?
означает, что значение для метода checkbox OnChanged может быть нулевым или функцией с нулевым параметром.
простое изменение подписи вашего метода onChange устранит проблему.
final void Function(bool?) onComplete;
Лучше проверьте документацию по такого рода ошибкам, чтобы узнать правильные сигнатуры функций.
Ответ №4:
Если вы набрали этот код, прочитав книгу «Ученик Флаттера», вы можете final Function(bool) onComplete;
заменить его тем, что было в книге, т. Е. final Function(bool?)? onComplete;
Вопросительные знаки, которые мы видим здесь, — это обозначения Dart, позволяющие переменной быть нулевой. Самый внешний вопросительный знак Function()? onComplete
означает, что onComplete
функция может быть нулевой. Самый внутренний вопросительный знак Function(bool?)
означает, что вызывающий аргумент может быть либо логическим, либо нулевым.
Эта защита от нуля также существует в JavaScript и TypeScript.Смотрите эту статью freeCodeCamp: https://www.freecodecamp.org/news/how-the-question-mark-works-in-javascript/