Конструктор форм Flutter и firestore
Я работаю с Flutter_form_builder и переключателями.
В настоящее время у меня есть текстовые поля, которые работают правильно с использованием своих контроллеров, а затем записываются в firebase firestore. Когда я пытаюсь назначить переменную 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 ответ
В порядке,
Я видимо и чмо
Вот фиксированный код.
Мне просто нужно было объявить ключ для добавления к текущему документу, вместо того, чтобы пытаться сделать каждый из них своим контроллером и переменной.
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();
},
),
],
),