#flutter #dart
Вопрос:
Я создаю новый виджет без состояния для последующего повторного использования
import 'package:flutter/material.dart';
class JumpDropdown extends StatelessWidget {
final int val;
final Function callback;
const JumpDropdown({Key? key, required this.val, required this.callback})
: super(key: key);
@override
Widget build(BuildContext context) {
return DropdownButton<int>(
value: val,
onChanged: (int? newValue) {},
);
}
}
Однако, когда я попытался передать callback
onChanged
свойство, оно не позволит сказать
The argument type 'Function' can't be assigned to the parameter type 'void Function(int?)?'.
return DropdownButton<int>(
value: val,
onChanged: callback,
);
Комментарии:
1. можете ли вы попробовать изменить обратный вызов функции на обратный вызов VoidCallback
2. Попробовал VoidCallback, и он говорит
The argument type 'void Function()' can't be assigned to the parameter type 'void Function(int?)?'.
Ответ №1:
Я думаю, что что-то подобное должно сработать:
class JumpDropdown extends StatelessWidget {
final int val;
final void Function(int?)? callback;
const JumpDropdown({Key? key, required this.val, required this.callback})
: super(key: key);
@override
Widget build(BuildContext context) {
return DropdownButton<int>(
value: val,
onChanged: callback,
);
}
}
Если вам нужен обратный вызов без параметров, то невозможно назначить такой обратный вызов напрямую. Вы должны использовать пользовательскую функцию. Подобный этому:
class JumpDropdown extends StatelessWidget {
final int val;
final VoidCallaback callback;
const JumpDropdown({Key? key, required this.val, required this.callback})
: super(key: key);
@override
Widget build(BuildContext context) {
return DropdownButton<int>(
value: val,
onChanged: (int? v) => callback(),
);
}
}