From d52b18b9bb15295205c92196d8fbb71e814a538d Mon Sep 17 00:00:00 2001 From: Freek van de Ven Date: Thu, 4 Jul 2024 09:43:27 +0200 Subject: [PATCH] feat: add navigator userstory for availabity overview --- .../src/userstory/navigator_userstory.dart | 75 +++++++++++++++++++ .../userstory/userstory_configuration.dart | 22 ++++++ 2 files changed, 97 insertions(+) create mode 100644 packages/flutter_availability/lib/src/userstory/navigator_userstory.dart create mode 100644 packages/flutter_availability/lib/src/userstory/userstory_configuration.dart diff --git a/packages/flutter_availability/lib/src/userstory/navigator_userstory.dart b/packages/flutter_availability/lib/src/userstory/navigator_userstory.dart new file mode 100644 index 0000000..c1e3abc --- /dev/null +++ b/packages/flutter_availability/lib/src/userstory/navigator_userstory.dart @@ -0,0 +1,75 @@ +import "package:flutter/material.dart"; +import "package:flutter_availability/src/screens/availability_day_overview.dart"; +import "package:flutter_availability/src/screens/availability_overview.dart"; +import "package:flutter_availability/src/service/local_service.dart"; +import "package:flutter_availability/src/userstory/userstory_configuration.dart"; +import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; + +/// +Widget availabilityNavigatorUserStory( + BuildContext context, { + AvailabiltyUserstoryConfiguration? configuration, +}) => + _availabiltyScreenRoute( + context, + configuration ?? + AvailabiltyUserstoryConfiguration( + service: LocalAvailabilityDataInterface(), + getUserId: (_) => "no-user", + ), + ); + +Widget _availabiltyScreenRoute( + BuildContext context, + AvailabiltyUserstoryConfiguration configuration, +) => + SafeArea( + child: Scaffold( + body: AvailabilityOverview( + service: configuration.service, + options: configuration.options, + userId: configuration.getUserId(context), + onDayClicked: (date) async => Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => _avaibiltyDayOverviewRoute( + context, + configuration, + date, + null, + ), + ), + ), + onAvailabilityClicked: (availability) async => + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => _avaibiltyDayOverviewRoute( + context, + configuration, + availability.startDate, + availability, + ), + ), + ), + ), + ), + ); + +Widget _avaibiltyDayOverviewRoute( + BuildContext context, + AvailabiltyUserstoryConfiguration configuration, + DateTime date, + AvailabilityModel? availability, +) => + SafeArea( + child: Scaffold( + appBar: AppBar(), + body: AvailabilityDayOverview( + service: configuration.service, + options: configuration.options, + userId: configuration.getUserId(context), + date: date, + initialAvailability: availability, + onAvailabilitySaved: () => Navigator.of(context).pop(), + ), + ), + ); diff --git a/packages/flutter_availability/lib/src/userstory/userstory_configuration.dart b/packages/flutter_availability/lib/src/userstory/userstory_configuration.dart new file mode 100644 index 0000000..dd29789 --- /dev/null +++ b/packages/flutter_availability/lib/src/userstory/userstory_configuration.dart @@ -0,0 +1,22 @@ +import "package:flutter/material.dart"; +import "package:flutter_availability/src/config/availability_options.dart"; +import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart"; + +/// +class AvailabiltyUserstoryConfiguration { + /// + const AvailabiltyUserstoryConfiguration({ + required this.service, + required this.getUserId, + this.options = const AvailabilityOptions(), + }); + + /// + final AvailabilityOptions options; + + /// + final AvailabilityDataInterface service; + + /// + final Function(BuildContext context) getUserId; +}