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