From 5036873d6ac8fa2ce4f9c03a2041f675a2d9dba2 Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 Date: Thu, 9 Jan 2025 16:20:47 +0300 Subject: [PATCH] swipe view for normal employyes added --- .../providers/api/user_provider.dart | 2 + lib/main.dart | 2 + lib/new_views/common_widgets/app_drawer.dart | 3 +- lib/new_views/pages/land_page/land_page.dart | 4 +- lib/new_views/pages/login_page.dart | 8 +- lib/new_views/pages/splash_page.dart | 9 +- lib/new_views/swipe_module/swipe_view.dart | 159 ++++++++++++++++++ 7 files changed, 182 insertions(+), 5 deletions(-) create mode 100644 lib/new_views/swipe_module/swipe_view.dart diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index de73593b..24ea7aad 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -25,6 +25,8 @@ class UserProvider extends ChangeNotifier { swipeTransactionModel = null; } + bool showSwipeOnly = true; + // contain user data // when user not login or register _user = null User _user; diff --git a/lib/main.dart b/lib/main.dart index a03a9100..50e878f3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -53,6 +53,7 @@ import 'package:test_sa/new_views/pages/splash_page.dart'; import 'package:test_sa/new_views/pages/usSafeDevice_view.dart'; import 'package:test_sa/new_views/swipe_module/swipe_history_view.dart'; import 'package:test_sa/new_views/swipe_module/swipe_success_view.dart'; +import 'package:test_sa/new_views/swipe_module/swipe_view.dart'; import 'package:test_sa/providers/asset_transfer/asset_transfer_status_provider.dart'; import 'package:test_sa/providers/department_provider.dart'; import 'package:test_sa/providers/gas_request_providers/cylinder_size_provider.dart'; @@ -265,6 +266,7 @@ class MyApp extends StatelessWidget { ///todo deleted //old.LandPage.id: (_) => const old.LandPage(), LandPage.routeName: (_) => const LandPage(), + SwipeView.routeName: (_) => const SwipeView(), NewGasRefillRequestPage.routeName: (_) => const NewGasRefillRequestPage(), ServiceRequestsPage.id: (_) => ServiceRequestsPage(), ReportIssuesPage.id: (_) => const ReportIssuesPage(), diff --git a/lib/new_views/common_widgets/app_drawer.dart b/lib/new_views/common_widgets/app_drawer.dart index fa892f30..db11afaf 100644 --- a/lib/new_views/common_widgets/app_drawer.dart +++ b/lib/new_views/common_widgets/app_drawer.dart @@ -66,7 +66,8 @@ class AppDrawer extends StatelessWidget { if ((userProvider.user?.email ?? "").isNotEmpty) (userProvider.user?.email)?.heading6(context)?.custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), 18.height, const Divider().defaultStyle(context), - ListView( + userProvider.showSwipeOnly?SizedBox().expanded: + ListView( padding: const EdgeInsets.only(top: 24), children: [ drawerItem("drawer_notification", context.translation.notifications, context).onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)), diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index 3d55f62c..c74d0847 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -39,7 +39,7 @@ class LandPage extends StatefulWidget { class _LandPageState extends State { final GlobalKey _scaffoldKey = GlobalKey(); - bool isNfcSupported = false; + int currentPageIndex = 0; bool showAppbar = true; List _pages; @@ -145,7 +145,7 @@ class _LandPageState extends State { return false; }, child: Consumer(builder: (context, userProvider, child) { - return Scaffold( + return Scaffold( key: _scaffoldKey, drawer: const AppDrawer(), body: _pages[currentPageIndex], diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index 41b14542..d325c654 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -12,6 +12,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/forget_password_module/forget_passwod_verify_otp.dart'; import 'package:test_sa/new_views/forget_password_module/models/general_response_model.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; +import 'package:test_sa/new_views/swipe_module/swipe_view.dart'; import '../../controllers/providers/api/user_provider.dart'; import '../../controllers/providers/settings/setting_provider.dart'; @@ -158,8 +159,13 @@ class _LoginPageState extends State { (await SharedPreferences.getInstance()).remove(ASettings.localAuth); await _settingProvider.setRememberMe(_user.userName, _user.password, rememberMe); + if(_userProvider.showSwipeOnly){ + Navigator.pushReplacementNamed(context, SwipeView.routeName); + } + else{ + Navigator.pushReplacementNamed(context, LandPage.routeName); - Navigator.pushReplacementNamed(context, LandPage.routeName); + } } else { Fluttertoast.showToast(msg: _userProvider.user?.message ?? context.translation.failedToCompleteRequest); } diff --git a/lib/new_views/pages/splash_page.dart b/lib/new_views/pages/splash_page.dart index 45cb5e39..ef533aaf 100644 --- a/lib/new_views/pages/splash_page.dart +++ b/lib/new_views/pages/splash_page.dart @@ -13,6 +13,7 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; import 'package:test_sa/new_views/pages/login_page.dart'; import 'package:test_sa/new_views/pages/usSafeDevice_view.dart'; +import 'package:test_sa/new_views/swipe_module/swipe_view.dart'; import '../../models/size_config.dart'; @@ -65,7 +66,13 @@ class _SplashPageState extends State { bool isSuccess = await checkDualAuthentication(); if (isSuccess) { _userProvider.user = _settingProvider.user; - Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true); + + if(_userProvider.showSwipeOnly){ + Navigator.pushNamedAndRemoveUntil(context, SwipeView.routeName, (routes) => true); + }else{ + Navigator.of(context).pushNamedAndRemoveUntil(LandPage.routeName, (routes) => true); + } + } else { Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true); } diff --git a/lib/new_views/swipe_module/swipe_view.dart b/lib/new_views/swipe_module/swipe_view.dart new file mode 100644 index 00000000..fc8597d6 --- /dev/null +++ b/lib/new_views/swipe_module/swipe_view.dart @@ -0,0 +1,159 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:nfc_manager/nfc_manager.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/notification/firebase_notification_manger.dart'; +import 'package:test_sa/controllers/notification/notification_manger.dart'; +import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; +import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; +import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/models/enums/user_types.dart'; +import 'package:test_sa/models/user.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/common_widgets/app_drawer.dart'; +import 'package:test_sa/new_views/pages/land_page/dashboard_fragments/progress_fragment.dart'; +import 'package:test_sa/new_views/pages/land_page/dashboard_fragments/recent_activites_fragment.dart'; +import 'package:test_sa/new_views/pages/land_page/dashboard_fragments/requests_fragment.dart'; +import 'package:test_sa/new_views/pages/land_page/widgets/dialogs/dialog.dart'; +import 'package:test_sa/new_views/swipe_module/circular_animated_widget.dart'; +import 'package:test_sa/new_views/swipe_module/utils/swipe_general_utils.dart'; +import 'package:test_sa/views/pages/user/notifications/notifications_page.dart'; + +class SwipeView extends StatefulWidget { + static const String routeName = "/swipe-view"; + + const SwipeView({Key key,}) : super(key: key); + + @override + State createState() => _SwipeViewState(); +} + +class _SwipeViewState extends State { + UserProvider _userProvider; + final GlobalKey _scaffoldKey = GlobalKey(); + @override + void initState() { + super.initState(); + _userProvider = Provider.of(context,listen: false); + if (_userProvider.user != null) { + WidgetsBinding.instance.addPostFrameCallback((_) { + _userProvider.getSwipeLastTransaction(userId: _userProvider.user.userID); + }); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return WillPopScope( + onWillPop: () async { + bool result = await showDialog( + context: context, + builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert), + ); + if (result) { + Provider.of(context, listen: false).resetSettings(); + Provider.of(context, listen: false).reset(); + Navigator.of(context).pop(); + Navigator.of(context).pop(); + } + return false; + }, + child: Scaffold( + key: _scaffoldKey, + drawer: const AppDrawer(), + appBar: AppBar( + automaticallyImplyLeading: false, + backgroundColor: Theme.of(context).scaffoldBackgroundColor, + titleSpacing: 0, + title: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Consumer(builder: (context, snapshot, _) { + return CircleAvatar( + radius: 24, + backgroundColor: context.isDark ? AppColor.neutral50 : AppColor.neutral40, + child: Padding( + padding: const EdgeInsets.all(1), // Border radius + child: ClipOval( + child: snapshot.profileImage != null + ? Image.file(snapshot.profileImage) + : (snapshot.user.profilePhotoName?.isNotEmpty ?? false) + ? Image.network(snapshot.user.profilePhotoName) + : const Icon(Icons.person, size: 24, color: Colors.white), + ), + ), + ).onPress(() { + print('on press called...'); + _scaffoldKey.currentState.isDrawerOpen ? _scaffoldKey.currentState.closeDrawer() : _scaffoldKey.currentState.openDrawer(); + }); + }), + ], + ).paddingOnly(start: 16, end: 16), + ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + // mainAxisAlignment: MainAxisAlignment.center, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.welcome, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), + ), + Text( + _userProvider.user?.username ?? "", + style: AppTextStyles.heading2.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600), + ), + ], + ).paddingOnly(start: 16, end: 16, top: 8, bottom: 8), + GestureDetector( + onTap: () async { + bool isNfcSupported = await NfcManager.instance.isAvailable(); + SwipeGeneralUtils.instance.showSwipeTypeBottomSheetSheet(isNfcSupported: isNfcSupported); + }, + child: CircularAnimatedContainer( + child: Container( + width: 100.toScreenWidth, + height: 100.toScreenHeight, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: AppColor.white, + border: Border.all(color: AppColor.primary80.withOpacity(0.5), width: 2), + ), + child: Consumer(builder: (context, userProvider, child) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + 'swipe'.toSvgAsset(width: 32, height: 32), + 8.height, + Text( + ("${context.translation.checkIn}\n${userProvider.swipeTransactionModel != null && userProvider.swipeTransactionModel.swipeTime != null ? SwipeGeneralUtils.instance.formatTimeOnly(userProvider.swipeTransactionModel.swipeTime) : ' --:--'}"), + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral80, fontWeight: FontWeight.w500, fontFamily: "Poppins"), + ), + ], + ); + }), + ), + ).center, + ).expanded, + ], + ), + ), + ); + } +}