diff --git a/Frontend/plannerly/assets/images/plannerly.png b/Frontend/plannerly/assets/images/plannerly.png new file mode 100644 index 0000000..ae1e883 Binary files /dev/null and b/Frontend/plannerly/assets/images/plannerly.png differ diff --git a/Frontend/plannerly/lib/bloc/home/home_bloc.dart b/Frontend/plannerly/lib/bloc/home/home_bloc.dart index 12f0dca..a4bfb16 100644 --- a/Frontend/plannerly/lib/bloc/home/home_bloc.dart +++ b/Frontend/plannerly/lib/bloc/home/home_bloc.dart @@ -24,6 +24,7 @@ class HomeBloc extends Bloc { homeAddNewTaskCloseButtonClickedEvent); on( homeAddNewTaskAddButtonClickedEvent); + on(homeDrawerButtonClickedEvent); } FutureOr homeInitialEvent( @@ -210,4 +211,9 @@ class HomeBloc extends Bloc { emit(HomeUnableTofetchTasks(message: response["error"])); } } + + FutureOr homeDrawerButtonClickedEvent( + HomeDrawerButtonClickedEvent event, Emitter emit) { + emit(HomeDrawerButtonClickedState()); + } } diff --git a/Frontend/plannerly/lib/bloc/home/home_event.dart b/Frontend/plannerly/lib/bloc/home/home_event.dart index 0980fc3..c34dbf3 100644 --- a/Frontend/plannerly/lib/bloc/home/home_event.dart +++ b/Frontend/plannerly/lib/bloc/home/home_event.dart @@ -43,3 +43,5 @@ class HomeAddNewTaskAddButtonClickedEvent extends HomeEvent { required this.urgent, }); } + +class HomeDrawerButtonClickedEvent extends HomeEvent {} diff --git a/Frontend/plannerly/lib/bloc/home/home_state.dart b/Frontend/plannerly/lib/bloc/home/home_state.dart index 97b7476..2bee78b 100644 --- a/Frontend/plannerly/lib/bloc/home/home_state.dart +++ b/Frontend/plannerly/lib/bloc/home/home_state.dart @@ -37,6 +37,8 @@ class HomeNavigateToUrgentTasksPage extends HomeActionState {} class HomeNavigateToRegularTasksPage extends HomeActionState {} +class HomeDrawerButtonClickedState extends HomeActionState {} + //showing a snackbar is an action and thus we need an action state class HomeTaskDeletedState extends HomeActionState {} diff --git a/Frontend/plannerly/lib/screens/home/home.dart b/Frontend/plannerly/lib/screens/home/home.dart index fe92b15..bc3c562 100644 --- a/Frontend/plannerly/lib/screens/home/home.dart +++ b/Frontend/plannerly/lib/screens/home/home.dart @@ -4,6 +4,7 @@ import 'package:fluttertoast/fluttertoast.dart'; import 'package:plannerly/screens/home/home_loading.dart'; import 'package:plannerly/screens/regular_tasks/regular_tasks_page.dart'; import 'package:plannerly/screens/urgent_tasks/urgent_tasks_page.dart'; +import 'package:plannerly/screens/widgets/custom_drawer.dart'; import 'package:plannerly/screens/widgets/form_field.dart'; import 'package:plannerly/screens/widgets/task.dart'; import 'package:plannerly/utils/colors/colors.dart'; @@ -18,6 +19,7 @@ class HomeScreen extends StatefulWidget { } class _HomeScreenState extends State { + GlobalKey _scaffoldKey = GlobalKey(); final HomeBloc homeBloc = HomeBloc(); TextEditingController titleContr = TextEditingController(); TextEditingController descContr = TextEditingController(); @@ -208,6 +210,8 @@ class _HomeScreenState extends State { } else if (state is HomeTaskAddedSuccessState) { Navigator.of(context).pop(); homeBloc.add(HomeInitialEvent()); + } else if (state is HomeDrawerButtonClickedState) { + _scaffoldKey.currentState?.openDrawer(); } }, builder: (context, state) { @@ -217,6 +221,8 @@ class _HomeScreenState extends State { case HomeLoadedSuccessState: final successState = state as HomeLoadedSuccessState; return Scaffold( + key: _scaffoldKey, + drawer: const CustomDrawer(), backgroundColor: AppColors.backgroundDark, body: Padding( padding: const EdgeInsets.all(14.0), @@ -232,15 +238,21 @@ class _HomeScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: size.height * 0.03), - const Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Icon( - Icons.menu_outlined, - size: 28, - color: AppColors.white, + GestureDetector( + onTap: () { + homeBloc + .add(HomeDrawerButtonClickedEvent()); + }, + child: const Icon( + Icons.menu_outlined, + size: 28, + color: AppColors.white, + ), ), - Icon( + const Icon( Icons.notifications_outlined, size: 28, color: AppColors.white, diff --git a/Frontend/plannerly/lib/screens/regular_tasks/regular_tasks_page.dart b/Frontend/plannerly/lib/screens/regular_tasks/regular_tasks_page.dart index 130c5cd..1cd9ad7 100644 --- a/Frontend/plannerly/lib/screens/regular_tasks/regular_tasks_page.dart +++ b/Frontend/plannerly/lib/screens/regular_tasks/regular_tasks_page.dart @@ -206,7 +206,7 @@ class _RegularTasksState extends State { ), ); default: - return SizedBox(); + return const SizedBox(); } }, ); diff --git a/Frontend/plannerly/lib/screens/urgent_tasks/urgent_tasks_page.dart b/Frontend/plannerly/lib/screens/urgent_tasks/urgent_tasks_page.dart index ed5deb3..1e4b6d4 100644 --- a/Frontend/plannerly/lib/screens/urgent_tasks/urgent_tasks_page.dart +++ b/Frontend/plannerly/lib/screens/urgent_tasks/urgent_tasks_page.dart @@ -206,7 +206,7 @@ class _UrgentTasksState extends State { ), ); default: - return SizedBox(); + return const SizedBox(); } }, ); diff --git a/Frontend/plannerly/lib/screens/widgets/custom_drawer.dart b/Frontend/plannerly/lib/screens/widgets/custom_drawer.dart new file mode 100644 index 0000000..3c2eebd --- /dev/null +++ b/Frontend/plannerly/lib/screens/widgets/custom_drawer.dart @@ -0,0 +1,88 @@ +import 'package:flutter/material.dart'; +import 'package:plannerly/utils/colors/colors.dart'; + +class CustomDrawer extends StatefulWidget { + const CustomDrawer({super.key}); + + @override + State createState() => _CustomDrawerState(); +} + +class _CustomDrawerState extends State { + List names = ["Home", "Urgent Tasks", "Regular Tasks"]; + List icons = [ + Icons.home_outlined, + Icons.task_alt_outlined, + Icons.task_outlined + ]; + @override + Widget build(BuildContext context) { + Size size = MediaQuery.of(context).size; + return Drawer( + backgroundColor: AppColors.backgroundDark, + child: SafeArea( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + Row( + children: [ + SizedBox( + width: size.width * 0.2, + child: Image.asset( + 'assets/images/logo_transparent.png', + scale: 3, + ), + ), + SizedBox( + width: size.width * 0.45, + child: Image.asset( + 'assets/images/plannerly.png', + scale: 3, + ), + ), + ], + ), + const SizedBox(height: 30), + Expanded( + child: ListView.separated( + itemCount: 3, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + return ListTile( + onTap: () {}, + leading: Icon(icons[index]), + title: Text( + names[index], + style: const TextStyle( + color: AppColors.white, + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + ); + }, + separatorBuilder: (context, index) => + const SizedBox(height: 3), + ), + ), + ListTile( + onTap: () {}, + leading: const Icon(Icons.logout_outlined), + title: const Text( + 'Logout', + style: TextStyle( + color: AppColors.white, + fontSize: 18, + fontWeight: FontWeight.w400, + ), + ), + ), + ], + ), + ), + ), + ); + } +}