71 lines
2.1 KiB
Dart
71 lines
2.1 KiB
Dart
import 'package:flutter/cupertino.dart';
|
|
import 'package:please_pay_me/theme/tokens.dart';
|
|
import 'package:please_pay_me/ui/atoms/app_button.dart';
|
|
|
|
/// Bottom sheet with a native wheel date picker.
|
|
Future<DateTime?> showAppDatePicker({
|
|
required BuildContext context,
|
|
required DateTime initialDate,
|
|
DateTime? minimumDate,
|
|
DateTime? maximumDate,
|
|
String confirmLabel = 'Готово',
|
|
}) {
|
|
var selected = initialDate;
|
|
|
|
return showCupertinoModalPopup<DateTime>(
|
|
context: context,
|
|
builder: (ctx) => Container(
|
|
height: 320,
|
|
padding: const EdgeInsets.only(top: AppSpacing.s2),
|
|
color: AppColors.of(ctx, AppColors.groupedSurface),
|
|
child: SafeArea(
|
|
top: false,
|
|
child: Column(
|
|
children: [
|
|
Expanded(
|
|
child: CupertinoDatePicker(
|
|
mode: CupertinoDatePickerMode.date,
|
|
initialDateTime: initialDate,
|
|
minimumDate: minimumDate,
|
|
maximumDate: maximumDate,
|
|
onDateTimeChanged: (value) => selected = value,
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.fromLTRB(
|
|
AppSpacing.gutter,
|
|
AppSpacing.s2,
|
|
AppSpacing.gutter,
|
|
AppSpacing.s3,
|
|
),
|
|
child: AppButton(
|
|
label: confirmLabel,
|
|
onPressed: () => Navigator.of(ctx).pop(
|
|
DateTime(selected.year, selected.month, selected.day),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// Full-height modal used for create/edit forms.
|
|
Future<T?> showAppFormSheet<T>({
|
|
required BuildContext context,
|
|
required WidgetBuilder builder,
|
|
}) {
|
|
return showCupertinoModalPopup<T>(
|
|
context: context,
|
|
builder: (ctx) => Padding(
|
|
padding: EdgeInsets.only(top: MediaQuery.of(ctx).padding.top + AppSpacing.s6),
|
|
child: ClipRRect(
|
|
borderRadius: const BorderRadius.vertical(top: Radius.circular(AppRadii.xl)),
|
|
child: Builder(builder: builder),
|
|
),
|
|
),
|
|
);
|
|
}
|