Конструктор форм Flutter и firestore - PullRequest
0 голосов
/ 26 мая 2020
• 1000 Когда я пытаюсь назначить переменную Radio Button для записи в firebase, она пишет и да, и нет, даже если он печатает ответ, выбранный в симуляторе или телефоне в консоли

Как вы преобразовываете это в переменная, которая загружает правильный ответ?

Начало файла

class _FFPServicesApplicationWidgetState extends State<FFPServicesApplicationWidget> {
 var data;
 bool autoValidate = true;
 bool readOnly = false;
 bool showSegmentedControl = true;
 final GlobalKey<FormBuilderState> _fbKey = GlobalKey<FormBuilderState>();


 ValueChanged _onReferral =(val) => print(val);
 var referralOptions = ['Yes', 'No',];

 get _fbUserKey => null;


 void onItemTwoPressed(BuildContext context) => Navigator.push(context, 
 MaterialPageRoute(builder: (context) => HelpWidget()));



TextEditingController taskNameInputController;
TextEditingController taskEmailInputController;
TextEditingController taskPhoneInputController;
TextEditingController taskDescriptionInputController;
TextEditingController taskAgencyInputController;


@override
  initState() {
    taskNameInputController = new TextEditingController();
    taskEmailInputController = new TextEditingController();
    taskPhoneInputController = new TextEditingController();
    taskDescriptionInputController = new TextEditingController();
    taskAgencyInputController = new TextEditingController();


    super.initState();
 }

Фактический виджет

FormBuilderRadio(
                    decoration: InputDecoration(labelText: 'Were you referred to us?'),
                    attribute: "Were you referred to us?",
                    onChanged: _onReferral,
                    validators: [FormBuilderValidators.required()],
                    options: [
                      FormBuilderFieldOption(
                        value: "Yes",
                        child: Text('Yes'),
                      ),
                      FormBuilderFieldOption(
                        value: "No",
                        child: Text('No'),
                      ),
                    ],
                  ),

Кнопка "Отправить"

Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      MaterialButton(

                        child: Text("Submit"),
                        onPressed: () {
                        if (_fbKey.currentState.saveAndValidate()) {
                        print(_fbKey.currentState.value);
                        Firestore.instance
                        .collection('email')
                        .add({
                          "1. Name": taskNameInputController.text,
                          "2. Email": taskEmailInputController.text,
                          "3. Phone Number": taskPhoneInputController.text,
                          "4. Description": taskDescriptionInputController.text,
                          "5. Were you Referred": referralOptions,
                          "6. Agency Referring?": taskAgencyInputController.text,
                          "7. Children under 18": childrenOptions,
                          "8. Lincoln County?": countyOptions,
                          "9. Received Support in the past?": supportOptions,
                        });
                          }
                        },
                      ),
                      MaterialButton(
                        child: Text("Reset"),
                        onPressed: () {
                          _fbKey.currentState.reset();
                        },
                      ),
                    ],
                  ),

1 Ответ

0 голосов
/ 26 мая 2020

Хорошо,

Похоже, я чмо

Вот фиксированный код.

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

Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      MaterialButton(

                        child: Text("Submit"),
                        onPressed: () {
                        if (_fbKey.currentState.saveAndValidate()) {
                        print(_fbKey.currentState.value);
                        Firestore.instance
                        .collection('email')
                        .add(_fbKey.currentState.value);
                          }
                        },
                      ),
                      MaterialButton(
                        child: Text("Reset"),
                        onPressed: () {
                          _fbKey.currentState.reset();
                        },
                      ),
                    ],
                  ),
...