Как я могу позволить моей DropdownButton влиять на мой TextFormField

Я думаю, что это, вероятно, не слишком сложно, но я новичок в кодировании и не понимаю этого, и я не мог найти объяснение в Интернете, которое я мог бы понять.

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

Недавно я обновил заголовок до DropdownButton, и я хотел использовать то, что пользователь выбрал там, чтобы изменить параметры поиска в моем TextFormField (чтобы он выполнял поиск в разных столбцах моей базы данных).

Я создал DropdownButton в отдельном документе, а затем вставил его в заголовок. Найти, как его использовать, было сложнее.

Я создал своего рода обратный вызов, который работал для печати в моей консоли, но я не мог понять, как передать информацию в мое поле TextFormField.

class HomePage extends StatelessWidget {
  HomePage({Key key, this.title}) : super(key: key);
  _handleValueReturned(value) {
    if (value == 1) {print('This works');} if (value == 2) {print('This works not');} else {return null;}
  }

...

appBar: AppBar(
      title: DropDownButton(
          valueReturned: _handleValueReturned,
      ),

      bottom:...

...

Должен ли я использовать какой-либо поставщик или пакеты, такие как Eventifier или ChangeNotifier? Я не мог понять, как все это работает.

1 ответ

Насколько я понимаю, вы пытаетесь установить выбранное значение из DropDownButton в TextFormField, если это то, что вы пытаетесь сделать, создайте TextEditingController и добавьте его в TextFormField затем установите его text свойство внутри вашего обратного вызова, которое называется _handleValueReturned, но вам нужно перестроить виджет, чтобы TextFormField перестроен с новым значением, конечно, вам нужно преобразовать свой виджет в StatefulWidget сделать это.

Создание и инициализация TextEditingController:

final _controller = TextEditingController();

Присоединение контроллера к TextFromField:

TextFormField(
  controller: _controller,
  ...
);

Изменение значения контроллера внутри _handleValueReturned перезвонить:

 _handleValueReturned(value) {
    ...
    setState((){
      _controller.text = value; // It can be any String according to your scenario.
    });
  }

Боковое примечание: когда вы имеете дело с простым вводом текста, например с одним полем ввода, вам не нужно использовать TextFormField и вы можете просто заменить его на TextField.

Надеюсь, я правильно понял вашу проблему, и надеюсь, что ее решили.

Другие вопросы по тегам