feat(proj): init

This commit is contained in:
vl.arkhangelskii
2026-09-21 04:06:43 +03:00
commit c956b94983
1076 changed files with 50876 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
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),
),
),
);
}