Соединение между дочерним и родительским

#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. Это так верно, большое спасибо, иногда путаюсь в управлении состоянием.