Разбивайте диалоги в собственном файле или классе
У меня вопрос для новичков. Очень просто разбить виджет на собственный класс. Как столбец с кнопками в виджете без состояния, который принимает некоторые функции и некоторые строки в конструкторе. Затем я могу включить и использовать это с любого экрана и виджета в моем приложении.
Но как этого добиться с помощью диалогов? Если я создаю диалог, я хотел бы иметь его в отдельном файле, чтобы я мог просто импортировать его, а затем передавать в него функции и тексты.
Прямо сейчас я пытаюсь вывести диалог выбора из пакета flutter_picker . На одном из моих экранов это:
void _showTimeDialog() {
Picker(
adapter: NumberPickerAdapter(data: <NumberPickerColumn>[
NumberPickerColumn(begin: 0, end: 60, initValue: _minutes),
NumberPickerColumn(begin: 0, end: 60, initValue: _seconds),
]),
delimiter: <PickerDelimiter>[
PickerDelimiter(
child: Container(
width: 30.0,
alignment: Alignment.center,
child: Text(':'),
),
)
],
builderHeader: (context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Text('MINUTES'),
Container(
width: 30,
),
Text('SECONDS'),
],
),
);
},
hideHeader: false,
confirmText: 'OK',
diameterRatio: 1.3,
magnification: 1.3,
height: 100,
squeeze: 1,
title: Center(child: const Text('DURATION')),
selectedTextStyle: TextStyle(color: Theme.of(context).primaryColor),
onConfirm: (Picker picker, List<int> value) {
onConfirmDurationPicker(picker, value);
},
).showDialog(context);
}
void onConfirmDurationPicker(Picker picker, List<int> value) {
setState(() {
_minutes = picker.getSelectedValues()[0];
_seconds = picker.getSelectedValues()[1];
});
}
Я бы хотел, чтобы это было в отдельном файле. И затем я хочу передать функцию onConfirmDurationPicker(которая будет меняться на разных экранах) и некоторые другие значения для установки этого сборщика. Но я не хочу дублировать весь этот код на каждом отдельном экране, для которого нужен такой диалог выбора.
Какой кошерный способ разбить подобные вещи в его собственных классах / файлах? Дайте мне знать, если что-то неясно в моем вопросе.
1 ответ
Вы на правильном пути! Действительно, лучше всего разделить ваше приложение на значимые части, чтобы избежать шаблонного кода. В вашем случае просто создайте новый файл и создайте там виджет без сохранения состояния. Этот виджет без сохранения состояния должен возвращать ваш Picker и может принимать аргументы через свой конструктор. Затем вы можете вызывать свой класс с помощью .showDialog(context) где угодно!