#flutter #callback #state
#трепетание #обратный вызов #состояние
Вопрос:
Я создал свой собственный виджет текстового поля и хочу использовать функцию onChange () текстового поля, поэтому я создал функцию обратного вызова, как вы можете видеть ниже, я пытаюсь напечатать заданный параметр функции, но получаю null, как я могу обработать эти обратные вызовы;
Функция обратного вызова
void childCallBack(dynamic value, dynamic property) {
setState(() {
property = value;
});
}
Как я вызываю свое текстовое поле в основном состоянии
TextFieldForProduct(
property: widget.product.name,
func: childCallBack,
)
И мой CustomTextFieldWidget
class TextFieldForProduct extends StatelessWidget {
TextFieldForProduct({@required this.property, @required this.func});
var property;
Function func;
@override
Widget build(BuildContext context) {
return Container(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
onChanged: (value) {
func(value, property);
},
),
);
}
}
Ответ №1:
В чем смысл передачи widget.product.name для TextFieldForProduct вы можете напрямую задать widget.product.name = значение; в childCallBack, поскольку оба доступны в одном классе. Пожалуйста, ознакомьтесь с приведенным ниже кодом:
void childCallBack(String value) {
setState(() {
widget.product.name = value;
});
}
Как вызвать текстовое поле в основном состоянии :
TextFieldForProduct(
func: childCallBack,
),
Пользовательскийtextfieldwidget
class TextFieldForProduct extends StatelessWidget {
const TextFieldForProduct({@required this.func});
final Function func;
@override
Widget build(BuildContext context) {
return Container(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
onChanged: (String value) => func(value),
),
),
);
}
}
Комментарии:
1. Это так верно, большое спасибо, иногда путаюсь в управлении состоянием.