diff --git a/lib/config/my_router.dart b/lib/config/my_router.dart index 46dcf678..62b87e6f 100644 --- a/lib/config/my_router.dart +++ b/lib/config/my_router.dart @@ -297,9 +297,9 @@ import 'package:go_router/go_router.dart'; import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; import '../domain/use_cases/preferences_use_case.dart'; -import '../presentation/Screens/changepassword.dart'; -import '../presentation/Screens/confirm_password.dart'; -import '../presentation/Screens/otp_verification.dart'; +import '../presentation/Screens/auth_verification/changepassword.dart'; +import '../presentation/Screens/auth_verification/confirm_password.dart'; +import '../presentation/Screens/auth_verification/otp_verification.dart'; import '../presentation/Screens/profilepage.dart'; import '../presentation/routes/auth_routes/login_route.dart'; import '../presentation/routes/bottom_bar_routes/tab_routes/home_route.dart'; @@ -352,6 +352,14 @@ final GoRouter router = GoRouter( userId: '', ), ), + // GoRoute( + // path: '/manageuser', + // builder: (context, state) { + // // Retrieve the title from extra or query params + // final title = state.extra as String? ?? 'Manage users'; + // return ManageUserRouter(title: title); + // }, + // ), GoRoute( path: '/manageuser', builder: (context, state) => ManageUserRouter(), diff --git a/lib/main.dart b/lib/main.dart index 5adba4ba..a388e49b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,7 +9,7 @@ import 'package:uae_stat/config/old_theme.dart'; import 'package:uae_stat/domain/entities/language_locale.dart'; import 'package:uae_stat/domain/use_cases/auth_use_case.dart'; import 'package:uae_stat/presentation/Screens/profilepage.dart'; -import 'package:uae_stat/presentation/Screens/registration.dart'; +import 'package:uae_stat/presentation/Screens/auth_verification/registration.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); diff --git a/lib/presentation/Screens/changepassword.dart b/lib/presentation/Screens/auth_verification/changepassword.dart similarity index 100% rename from lib/presentation/Screens/changepassword.dart rename to lib/presentation/Screens/auth_verification/changepassword.dart diff --git a/lib/presentation/Screens/confirm_password.dart b/lib/presentation/Screens/auth_verification/confirm_password.dart similarity index 100% rename from lib/presentation/Screens/confirm_password.dart rename to lib/presentation/Screens/auth_verification/confirm_password.dart diff --git a/lib/presentation/Screens/otp_verification.dart b/lib/presentation/Screens/auth_verification/otp_verification.dart similarity index 100% rename from lib/presentation/Screens/otp_verification.dart rename to lib/presentation/Screens/auth_verification/otp_verification.dart diff --git a/lib/presentation/Screens/registration.dart b/lib/presentation/Screens/auth_verification/registration.dart similarity index 99% rename from lib/presentation/Screens/registration.dart rename to lib/presentation/Screens/auth_verification/registration.dart index a4f18a07..66689b16 100644 --- a/lib/presentation/Screens/registration.dart +++ b/lib/presentation/Screens/auth_verification/registration.dart @@ -6,8 +6,8 @@ import 'package:pocketbase/pocketbase.dart'; import 'package:uae_stat/domain/use_cases/language.dart'; import 'package:uae_stat/presentation/Screens/profilepage.dart'; -import '../../infrastructure/services/pocketbase_service.dart'; -import '../routes/auth_routes/login_route.dart'; +import '../../../infrastructure/services/pocketbase_service.dart'; +import '../../routes/auth_routes/login_route.dart'; class RegisterScreen extends StatefulWidget { @override diff --git a/lib/presentation/Screens/profilepage.dart b/lib/presentation/Screens/profilepage.dart index 854e7844..b5eae4ff 100644 --- a/lib/presentation/Screens/profilepage.dart +++ b/lib/presentation/Screens/profilepage.dart @@ -10,7 +10,7 @@ import 'package:image_picker/image_picker.dart'; import 'package:intl/intl.dart'; import 'package:pocketbase/pocketbase.dart'; -import 'changepassword.dart'; +import 'auth_verification/changepassword.dart'; class ProfileScreen extends StatefulWidget { final String userId; // Add this field to hold the user ID diff --git a/lib/presentation/routes/auth_routes/login_route.dart b/lib/presentation/routes/auth_routes/login_route.dart index 7c23535f..ecbf1200 100644 --- a/lib/presentation/routes/auth_routes/login_route.dart +++ b/lib/presentation/routes/auth_routes/login_route.dart @@ -18,7 +18,7 @@ import 'package:uae_stat/presentation/components/themed_text_field.dart'; import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart'; import '../../Screens/profilepage.dart'; -import '../../Screens/registration.dart'; +import '../../Screens/auth_verification/registration.dart'; import 'package:pocketbase/pocketbase.dart'; class LoginRoute extends HookConsumerWidget { diff --git a/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart b/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart index b4ec7aa6..1c2fe332 100644 --- a/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart +++ b/lib/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart @@ -173,9 +173,314 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State { @override Widget build(BuildContext context) { + double myheight = MediaQuery.of(context).size.height; + double mywidth = MediaQuery.of(context).size.width; return BaseScaffold( - body: Center(child : Text("Home Page")) + title: Center(child: SizedBox(height : myheight/5, width : mywidth/3,child: Image(image: AssetImage('assets/logos/uae_stat.png')))), + body: EconomyStats(), ); } } + + + + +class EconomyStats extends StatelessWidget { + const EconomyStats({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return SingleChildScrollView( + child: Padding( + padding: EdgeInsets.only(left: 10,right: 10), + child: Column( + children: [ + // Header Section + RoundedCornerContainer( + text: 'ECONOMY', + backgroundColor: Color(0xFF7DAFBC), + textStyle: const TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + // Grid Section + + // ECONOMY DETAILS + Padding( + padding: const EdgeInsets.only(top: 10,), + child: Column( + children: [ + // First Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InfoCard( + title: 'GDP (Constant)', + subtitle: '(2022) (AED)', + value: '1.62T', + bordercolor: Color(0xFF7DAFBC), + textcolor: Color(0xFF7DAFBC), + ), + InfoCard( + title: 'Inflation Rate', + subtitle: '(2022)', + value: '4.82%', + bordercolor: Color(0xFF7DAFBC), textcolor: Color(0xFF7DAFBC), + ), + ], + ), + const SizedBox(height: 10), + // Second Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InfoCard( + title: 'Trade Value', + subtitle: '(Jan - Jan 2024) - AED', + value: '215.4B', + bordercolor: Color(0xFF7DAFBC), textcolor: Color(0xFF7DAFBC), + ), + InfoCard( + title: 'Hotel Guests', + subtitle: '(2022)', + value: '25.21M', + bordercolor: Color(0xFF7DAFBC), textcolor: Color(0xFF7DAFBC), + ), + ], + ), + const SizedBox(height: 10), + RoundedCornerContainer( + text: 'SOCIAL', + backgroundColor: Colors.brown[200]!, + textStyle: const TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + + // SOCIAL DETAILS + Padding( + padding: const EdgeInsets.only(top: 10,), + child: Column( + children: [ + // First Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InfoCard( + title: 'Population', + subtitle: '(2022) (AED)', + value: '1.62T', + bordercolor: Colors.brown[200]!, + textcolor: Colors.brown[200]!, + ), + InfoCard( + title: 'Labor Force', + subtitle: '(2022)', + value: '4.82%', + bordercolor: Colors.brown[200]!, + textcolor: Colors.brown[200]!, + ), + ], + ), + const SizedBox(height: 10), + // Second Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InfoCard( + title: 'Hospitals (Gov )', + subtitle: '(Jan - Jan 2024) - AED', + value: '215.4B', + bordercolor: Colors.brown[200]!, + textcolor: Colors.brown[200]!, + ), + InfoCard( + title: 'Schools', + subtitle: '(2022)', + value: '25.21M', + bordercolor: Colors.brown[200]!, + textcolor: Colors.brown[200]!, + ), + ], + ), + const SizedBox(height: 10), + RoundedCornerContainer( + text: 'ENVIRONMENT', + backgroundColor: Color(0xFF7DAFBC), + textStyle: const TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + + // ENVIRONMENT DETAILS + Padding( + padding: const EdgeInsets.only(top: 10,), + child: Column( + children: [ + // First Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InfoCard( + title: 'Electricity', + subtitle: '(2022) (AED)', + value: '1.62T', + bordercolor: Color(0xFF7DAFBC), + textcolor: Color(0xFF7DAFBC), + ), + InfoCard( + title: 'Cruid oil', + subtitle: '(2022)', + value: '4.82%', + bordercolor: Color(0xFF7DAFBC), + textcolor: Color(0xFF7DAFBC), + ), + ], + ), + const SizedBox(height: 10), + // Second Row + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InfoCard( + title: 'Export of oil', + subtitle: '(Jan - Jan 2024) - AED', + value: '215.4B', + bordercolor: Color(0xFF7DAFBC), + textcolor: Color(0xFF7DAFBC), + ), + InfoCard( + title: 'Desalinated water', + subtitle: '(2022)', + value: '25.21M', + bordercolor: Color(0xFF7DAFBC), + textcolor: Color(0xFF7DAFBC), + ), + ], + ), + ], + ), + ), + ], + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +class RoundedCornerContainer extends StatelessWidget { + final String text; + final Color backgroundColor; + final TextStyle? textStyle; + + + const RoundedCornerContainer({ + Key? key, + required this.text, + this.backgroundColor = Colors.blue, + this.textStyle, + + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.circular(12), // Rounded corners + ), + child: Center( + child: Text( + text, + style: textStyle ?? + const TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: Colors.white, + ), + ), + ), + ); + } +} + + +class InfoCard extends StatelessWidget { + final String title; + final String subtitle; + final String value; + final Color bordercolor; + final Color? textcolor; + + const InfoCard({ + Key? key, + required this.title, + required this.subtitle, + required this.value, required this.bordercolor,this.textcolor, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + double myheight = MediaQuery.of(context).size.height; + double mywidth = MediaQuery.of(context).size.width; + return Expanded( + child: + Container( + height: myheight/9, + width: mywidth/4, + margin: const EdgeInsets.symmetric(horizontal: 8), + decoration: BoxDecoration( + border: Border.all(color: bordercolor), + borderRadius: BorderRadius.circular(8), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Expanded( + child: Text( + title, + //textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + ), + const SizedBox(height: 2), + Text( + subtitle, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 12, + color: Colors.grey, + ), + ), + const SizedBox(height: 2), + Text( + value, + style: TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + color: textcolor ?? Colors.black + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/feedback.dart b/lib/presentation/routes/drawer_routes/Drawer Items/feedback.dart index 9cbb8360..5d4ce688 100644 --- a/lib/presentation/routes/drawer_routes/Drawer Items/feedback.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/feedback.dart @@ -192,6 +192,7 @@ class _FeedbackFormState extends State @override Widget build(BuildContext context) { return BaseScaffold( + title: Text("Feedback"), // appBar: AppBar( // backgroundColor: const Color(0xFFf8f9ff), // title: Text(context.translate('Feedback Form', 'نموذج الملاحظات')), diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart b/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart index 3ac36dda..79704ebf 100644 --- a/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart @@ -4,6 +4,7 @@ import 'package:uae_stat/presentation/components/my_drawer.dart'; import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; class ManageUserRouter extends StatefulWidget { +late final Widget title; @override State createState() => _ManageUserRouterState(); } @@ -150,6 +151,7 @@ class _ManageUserRouterState extends State { Widget build(BuildContext context) { double myheight = MediaQuery.of(context).size.height; return BaseScaffold( + title: Text("Manage User"), body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.only(left: 10.0, right: 10.0, top: 3.0), diff --git a/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart b/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart index 1b0c7b64..24383844 100644 --- a/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart +++ b/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart @@ -1,72 +1,122 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; - class BaseScaffold extends StatelessWidget { final Widget body; + final Widget title; + final List? actions; - const BaseScaffold({required this.body}); + const BaseScaffold({ + Key? key, + required this.body, + required this.title, + this.actions, + }) : super(key: key); + // final Widget body; + // + // const BaseScaffold({required this.body}); @override Widget build(BuildContext context) { // Get the current route to highlight the active item String currentRoute = GoRouterState.of(context).matchedLocation; - - - + double myheight = MediaQuery.of(context).size.height; + double mywidth = MediaQuery.of(context).size.width; return Scaffold( - appBar: AppBar(title: Text(""),), - drawer: Drawer( + appBar: AppBar( + title: title, + actions: [IconButton(onPressed: (){}, icon: Icon(Icons.toggle_off_outlined)), + ]), + drawer: Drawer( child: ListView( children: [ DrawerHeader( - decoration: BoxDecoration(color: Colors.blue), + //decoration: BoxDecoration(color: Colors.blue), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Row(children: [ - - ],) + Row( + children: [ + SizedBox( + width: mywidth / 8, + child: Image( + image: AssetImage('assets/logos/fcsc.png'))), + ], + ), Divider(), - ListTile() + InkWell( + onTap: () => context.go('/profile'), + child: Row( + children: [ + SizedBox( + width: mywidth / 8, + child: Image( + image: AssetImage( + 'assets/edit_profile/profile.png'))), + SizedBox( + width: mywidth / 20, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Mohammad'), + Text('Mohammad@fcsc.com') + ], + ) + ], + ), + ) ], ), - //child: Text('Drawer Header', style: TextStyle(color: Colors.white, fontSize: 24)), ), + ListTile( - leading: Icon(Icons.person), - title: Text('Profile'), - onTap: () => context.go('/profile'), - ), - ListTile( - leading: Icon(Icons.note), + leading: SizedBox( + height: myheight / 15, + width: mywidth / 15, + child: Image( + image: AssetImage('assets/icons/drawer/message.png'))), title: Text('Feedback'), onTap: () => context.go('/feedback'), ), + ListTile( - leading : Icon(Icons.percent), + leading: SizedBox( + height: myheight / 15, + width: mywidth / 15, + child: Image( + image: AssetImage('assets/icons/drawer/manageuser.png'))), title: Text('Manage User'), onTap: () => context.go('/manageuser'), ), - ], ), ), bottomNavigationBar: BottomNavigationBar( currentIndex: _getSelectedIndex(currentRoute), onTap: (index) => _onItemTapped(context, index), + type: BottomNavigationBarType.fixed, items: [ - BottomNavigationBarItem(icon: Icon(Icons.home,color: Colors.black,), label: 'Home',), - BottomNavigationBarItem(icon: Icon(Icons.info,color: Colors.black,), label: 'About',), - BottomNavigationBarItem(icon: Icon(Icons.settings,color: Colors.black,), label: 'Settings'), - BottomNavigationBarItem(icon: Icon(Icons.person,color: Colors.black,), label: 'Profile'), + BottomNavigationBarItem( + icon: SizedBox(height: myheight/15,width : mywidth/15,child: Image(image: AssetImage('assets/icons/bottom_bar/home.png'))), + label: 'Home', + ), + BottomNavigationBarItem( + icon: SizedBox(height: myheight/15,width : mywidth/15,child: Image(image: AssetImage('assets/icons/bottom_bar/uae_map.png'))), + label: 'UAE Numbers', + ), + BottomNavigationBarItem( + icon: SizedBox(height: myheight/15,width : mywidth/15,child: Image(image: AssetImage('assets/icons/bottom_bar/ranking.png'))), + label: 'Competitiveness'), + BottomNavigationBarItem( + icon: SizedBox(height: myheight/15,width : mywidth/15,child: Image(image: AssetImage('assets/icons/bottom_bar/globe.png'))), + label: 'Country Profile'), ], - selectedItemColor: Colors.blue, + selectedItemColor: Colors.black, unselectedItemColor: Colors.grey, showUnselectedLabels: true, ), body: body, - ); } @@ -104,5 +154,3 @@ class BaseScaffold extends StatelessWidget { } } } - -