Я довольно новичок во Flutter (пришел из Java) и прокладываю свой путь через первое приложение для Android.

В своем проекте я использую другой класс для создания многократно используемого виджета (из примера здесь), который отлично работает со всеми методами, но я не могу найти способ определить и повторно использовать метод onEditingComplete.

Вот мой код:

class AppTextField extends StatelessWidget {
  //
  AppTextField({
    this.controller,
    this.textInputType,
    this.pwValidator,

    this.editingComplete,  // this the method that is causing the problem
  });

  final TextEditingController controller;
  final TextInputType textInputType;
  final FormFieldValidator pwValidator;

  final Listener editingComplete;  //  This doesn't work. Am I using the wrong listener?

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Theme(
        data: ThemeData(
          primaryColorDark: Colors.blue,
        ),
        child: Padding(
          padding: EdgeInsets.fromLTRB(25, 15, 25, 0),
          child: TextFormField(
            controller: controller,
            keyboardType: null == textInputType ? textInputType : textInputType,
            validator: null == pwValidator ? pwValidator : pwValidator,

            // I am facing problems with this line of code 
            onEditingComplete:  null == editingComplete ? editingComplete : editingComplete,                
          ),
        ),
      ),
    );
  }
}

Это класс, в котором я хочу реализовать и повторно использовать виджет :

Container(
    child: AppTextField(

          controller: _controllerPassword,              
          pwValidator: (value) { },
          
          onEditingComplete:          // here is where I am facing difficulties              
    ),

Ответы (1)

Свойство onEditingComplete является VoidCallback. Это функция без параметров, которая не возвращает никаких данных.

В AppTextField определите onEditingComplete как

final VoidCallback onEditingComplete;

Затем присвойте его свойству onEditingComplete поля TextFormField. Также избавьтесь от троичных операторов.

onEditingComplete: onEditingComplete

При использовании виджета передайте обратный вызов следующим образом:

Container(
  child: AppTextField(

      controller: _controllerPassword,              
      pwValidator: (value) { },
      
      onEditingComplete:   (){
          //Do what you want to do here.
      }           
),

2022 WebDevInsider