Используя Flutter Form Builder, как изменить значение даты FormBuilderDateTimePicker, добавив значение FormBuilderFieldOption

Я новичок в трепетании, и я пытаюсь изменить начальное значение флаттера FormBuilderDateTimePicker при нажатии на один из чипов, созданных с помощью FormBuilderChoiceChip. Мне нужно добавить значение каждого FormBuilderFieldOption в FormBuilderChoiceChip к начальному значению FormBuilderDateTimePicker. Вот код:

 child: Column(
                children: <Widget>[
                 FormBuilderChoiceChip(
                   attribute: "custom_days",
                   spacing: 3.0,
                   options: [
                     FormBuilderFieldOption(
                       child: Text("3 Days"),
                              value: 3
                     ),
                     FormBuilderFieldOption(
                       child: Text("5 Days"),
                              value: 5
                     ),
                     FormBuilderFieldOption(
                       child: Text("7 Days"),
                              value: 7
                     ),
                   ],
                  ),
                  FormBuilderDateTimePicker(
                    attribute: "date",
                    inputType: InputType.date,
                    format: DateFormat("dd-MM-yyyy"),
                    decoration: InputDecoration(labelText: "Select Date"),
                    initialValue: DateTime.now(),
                  )
                 ]
                )

вот изображение вывода: при щелчке по каждой микросхеме значение должно быть добавлено к начальному значению даты и получить обновление до будущей даты.

2 ответа

вы можете изменить значения полей didChange или же patchValue. на вашем чипе onChnage обновите поле даты.

изменить значение одного поля с помощью didChange:

      _formKey.currentState.fields['color_picker'].didChange(Colors.black);

изменить значение нескольких полей с помощью patchValue

      _formKey.currentState.patchValue({
  'age': '50',
  'slider': 6.7,
  'filter_chip': ['Test 1'],
  'choice_chip': 'Test 2',
  'rate': 4,
  'chips_test': [
    Contact('Andrew', 'stock@man.com', 'https://d2gg9evh47fn9z.cloudfront.net/800px_COLOURBOX4057996.jpg'),
  ],
});

пожалуйста, проверьте ссылку api

Вы можете изменить базовое значение date атрибут с помощью onChanged событие, но начальное значение атрибута остается неизменным в пользовательском интерфейсе.

      FormBuilderChoiceChip(
              attribute: "custom_days",
              spacing: 3.0,
              onChanged: (daysToAdd) {
                _fbKey.currentState.save();
                _fbKey.currentState.setAttributeValue(
                    'date',
                    _fbKey.currentState.value['date']
                        .add(Duration(days: daysToAdd)));
                _fbKey.currentState.save();
              },
              options: [
                FormBuilderFieldOption(
                    child: Text(
                      "3 Days",
                    ),
                    value: 3),
                FormBuilderFieldOption(
                    child: Text(
                      "5 Days",
                    ),
                    value: 5),
                FormBuilderFieldOption(child: Text("7 Days"), value: 7),
              ],
            )

setAttributeValue()работает только в фоновом режиме, но не обновляет пользовательский интерфейс, как объясняет здесь создатель пакета.

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