Как я могу получить данные переключателя с помощью контроллера в flutter?

#list #flutter #dart #controller #radio-button

#Список #flutter #dart #контроллер #переключатель

Вопрос:

Я создал виджет, который отправляет данные через API в формате json, созданный с помощью таких контроллеров, как ;

 final quantNumberController = TextEditingController();
  

И я получаю значение от контроллера ;

 String quant = quantNumberController.text;
  

И я сохраняю данные в формате json, например ;

 var data = {'quant': quant}
  

Моя текущая структура контейнера текстового виджета выглядит так ;

           Container(
              width: 280,
              padding: EdgeInsets.all(10.0),
              child: TextField(
                controller: quantNumberController,
                autocorrect: true,
                decoration: InputDecoration(hintText: 'Enter location'),
              )
          ),
  

Я хотел бы получить эти данные в структуре переключателя. Возможно ли получить данные с помощью контроллера, как раньше, или как я должен получить данные в свой результирующий файл json?

Я пробовал так ;

           Container(
              margin: EdgeInsets.fromLTRB(0, 0, 0, 10),
              child: Column(
                children: <Widget>[
                  Text('Location'),
                  ListTile(
                    title: const Text('First value'),
                    leading: Radio(
                      value: Cap.Cap33,
                      groupValue: _capp,
                      onChanged: (Capp value) {
                        setState(() {
                          _capp = value;
                          capp = 'Cap33';
                        });
                      },
                    ),
                  ),
                  ListTile(
                    title: const Text('Second value'),
                    leading: Radio(
                      value: Capp.Cap22,
                      groupValue: _capp,
                      onChanged: (Capp value) {
                        setState(() {
                          _capp = value;
                          capp = 'Cap22';
                        });
                      },
                    ),
                  ),
                  ListTile(
                    title: const Text('Third value'),
                    leading: Radio(
                      value: Capp.Cap44,
                      groupValue: _capp,
                      onChanged: (Capp value) {
                        setState(() {
                          _capp = value;
                          capp = 'Cap44';
                        });
                      },
                    ),
                  ),
                ],
              ) ,
          ),
  

Спасибо.

Ответ №1:

вы можете определить функцию, которая принимает контроллер

 widget myRadioButton(TextEditingController quantNumberController ){
                  return Radio(
                      value:quantNumberController.text
                      groupValue: _capp,
                      onChanged: (Capp value) {
                        setState(() {
                          _capp = value;
                          capp = 'Cap33';
                        });}
  

для использования

 Container(
  child:myRadioButton (quantNumberController:quantNumberController) 
  )
  

Ответ №2:

Вы можете использовать переменную типа синтаксиса «Значение местоположения» —

 late String LocationValue = '';
  

перед @override
Сборка виджета (контекст BuildContext)

А затем назначить LocationValue для переключателя при изменении атрибута

 onChanged: ((value) {
            LocationValue = 'cap33';
            setState(() {
            _value = value!;
            });
            }),