showDatePicker function

Future<DateTime?> showDatePicker({
  1. required BuildContext context,
  2. required DateTime firstDate,
  3. required DateTime initialDate,
  4. required DateTime lastDate,
})

Shows a date picker.

Implementation

Future<DateTime?> showDatePicker({
  required BuildContext context,
  required DateTime firstDate,
  required DateTime initialDate,
  required DateTime lastDate,
}) {
  return showModalBottomSheet<DateTime>(
    context: context,
    useRootNavigator: true,
    builder: (context) {
      return BlocProvider<SimpleValueBloc<DateTime>>(
        create: (_) => SimpleValueBloc<DateTime>(initialDate),
        child: BlocBuilder<SimpleValueBloc<DateTime>, DateTime>(
          builder: (context, selectedDate) {
            return SafeArea(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  () {
                    if (context.isIOS) {
                      return SizedBox(
                        height: MediaQuery.of(context).size.height / 4,
                        child: CupertinoTheme(
                          data: CupertinoThemeData(
                            brightness: Theme.of(context).brightness,
                          ),
                          child: CupertinoDatePicker(
                            mode: CupertinoDatePickerMode.date,
                            minimumDate: firstDate,
                            initialDateTime: initialDate,
                            maximumDate: lastDate,
                            onDateTimeChanged: context
                                .read<SimpleValueBloc<DateTime>>()
                                .change,
                          ),
                        ),
                      );
                    }

                    return CalendarDatePicker(
                      firstDate: firstDate,
                      initialDate: initialDate,
                      lastDate: lastDate,
                      onDateChanged:
                          context.read<SimpleValueBloc<DateTime>>().change,
                    );
                  }(),
                  Container(
                    width: double.infinity,
                    padding: const EdgeInsets.all(15),
                    child: adaptive.Button(
                      text: PackageLocalizations.of(context).ok,
                      onPressed: () => Navigator.pop(context, selectedDate),
                    ),
                  ),
                ],
              ),
            );
          },
        ),
      );
    },
  );
}