#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)