FLUSHBAR: кто-нибудь знаком с этим пакетом, как создать форму внутри?

#forms #flutter #package

#формы #flutter #пакет

Вопрос:

возможно, я перегружаю этот пакет, но в последнем примере показана форма. Однако моя реализация не подает никаких признаков жизни. Даже не ошибка или предупреждение.

Мой подход немного отличается. Я хочу создать форму с несколькими различными виджетами ввода (текст, кнопка, селектор), а затем вернуть их с событием блока. Часть возврата / сохранения еще не реализована.

Если кто-то внедрил форму с помощью flushbar, я был бы признателен за любой совет.

Это мой код flushbar

  Widget otherActionsSlider() {
    bool paused;
    int priority;
    bool supply;
    return Flushbar(
      userInputForm : Form(
        key: _formKey,
        child: Container(
          child: Column(
            children: <Widget> [
              Text("progress"),
              _DelayStatusFormField(
                
                onSaved: (value) => this.delayStatus = value,
              ),
              Row(
                children: [
                  _DelayFormField(
                    onSaved: (value) => this.delay = value,
                    enabled: this.delayStatus == DelayStatus.unrecoverable ? true : false
                  )
                ],
              ),
              RaisedButton(
                child: Text('Submit'),
                onPressed: () {
                  if (this._formKey.currentState.validate()) {
                    setState(() {
                      this._formKey.currentState.save();
                    });
                  }
                },
              ),

        ],),)),
    );
  }
 

и классы полей формы

 class _DelayStatusFormField extends FormField<DelayStatus> {
  _DelayStatusFormField({
    FormFieldSetter<DelayStatus> onSaved,
    FormFieldValidator<DelayStatus> validator,
    DelayStatus initialValue,
  }) : super(
      onSaved: onSaved,
      validator: validator,
      initialValue: initialValue,
      builder: (FormFieldState<DelayStatus> state) {
        return
            CupertinoSlidingSegmentedControl(
                groupValue: initialValue == DelayStatus.recoverable ? 1 :
                    initialValue == DelayStatus.unrecoverable ? 2 : 0,
                children: {
                  0: Text('on time'),
                  1: Text('recoverable'),
                  2: Text('unrecoverable')
                },
                onValueChanged: (int val) => state.didChange(val == 0 ? DelayStatus.onTime :
                                                             val == 1 ? DelayStatus.recoverable :
                                                             DelayStatus.unrecoverable)
        );
      }
  );
}

class _DelayFormField extends FormField<int> {
  _DelayFormField({
    FormFieldSetter<int> onSaved,
    FormFieldValidator<int> validator,
    int initialValue,
    bool enabled
  }) : super(
      onSaved: onSaved,
      validator: validator,
      initialValue: initialValue,
      builder: (FormFieldState<int> state) {
        TextEditingController inputTec = TextEditingController(text: initialValue.toString());
        return
          CupertinoTextField(
            controller: inputTec,
            placeholder: 'delay in days',
            enabled: enabled
          );
      }
  );
}
 

Ответ №1:

Хотя я еще не полностью реализовал свое решение, я, наконец, получил некоторые признаки жизни. Моя проблема заключалась в том, что функция, возвращающая Flushbar, должна иметь тип Flushbar<List<String>> , приведенный в примере пакета readme. Widget Вместо этого я вернулся.

Если кто-то попытается поработать с этим примером, там довольно много скобок и, что более важно, это не (как написано в readme) Flushbar(userInputForm = Form( , а Flushbar(userInputForm: Form(

Хотя качество приведенного примера оставляет место для улучшения, сам виджет довольно хорош, особенно при реализации более простых вариантов использования (у меня есть приложение CupertinoApp, поэтому я не могу использовать snackbar)