diff --git a/assets/user_guide/AboutFCSC.png b/assets/user_guide/AboutFCSC.png new file mode 100755 index 00000000..c5017acf Binary files /dev/null and b/assets/user_guide/AboutFCSC.png differ diff --git a/assets/user_guide/appFeatures.png b/assets/user_guide/appFeatures.png new file mode 100755 index 00000000..db30b794 Binary files /dev/null and b/assets/user_guide/appFeatures.png differ diff --git a/assets/user_guide/changePassword.png b/assets/user_guide/changePassword.png new file mode 100755 index 00000000..1838615a Binary files /dev/null and b/assets/user_guide/changePassword.png differ diff --git a/assets/user_guide/editProfile.png b/assets/user_guide/editProfile.png new file mode 100755 index 00000000..890c50c5 Binary files /dev/null and b/assets/user_guide/editProfile.png differ diff --git a/assets/user_guide/getStarted.png b/assets/user_guide/getStarted.png new file mode 100755 index 00000000..a4756317 Binary files /dev/null and b/assets/user_guide/getStarted.png differ diff --git a/assets/user_guide/howUse.png b/assets/user_guide/howUse.png new file mode 100755 index 00000000..e76fa0cc Binary files /dev/null and b/assets/user_guide/howUse.png differ diff --git a/assets/user_guide/purpose.png b/assets/user_guide/purpose.png new file mode 100755 index 00000000..02b31a5a Binary files /dev/null and b/assets/user_guide/purpose.png differ diff --git a/assets/user_guide/stayUpdate.png b/assets/user_guide/stayUpdate.png new file mode 100755 index 00000000..afe141d1 Binary files /dev/null and b/assets/user_guide/stayUpdate.png differ diff --git a/assets/user_guide/whoUse.png b/assets/user_guide/whoUse.png new file mode 100755 index 00000000..fa920d90 Binary files /dev/null and b/assets/user_guide/whoUse.png differ diff --git a/lib/config/my_router.dart b/lib/config/my_router.dart index 95f6bddb..5a8b1bfd 100644 --- a/lib/config/my_router.dart +++ b/lib/config/my_router.dart @@ -302,7 +302,17 @@ import 'package:uae_stat/presentation/Screens/charts/screens/chart_screen.dart'; import 'package:uae_stat/presentation/Screens/demo_home2.dart'; import 'package:uae_stat/presentation/Screens/online_offline_verification/internet_check.dart'; import 'package:uae_stat/presentation/routes/auth_routes/pocketbase_service.dart'; -import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/getting_started.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/AboutTheApp/AboutFCSC.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/AboutTheApp/getStarted.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/AppFeatures.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/ChangeMyPassword.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/EditMyProfile.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/howUseTheApp.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/purpose.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/stayUpdate.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/KeyFeatures/useTheApp.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/aboutApp.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/userguide.dart'; import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; import 'package:uae_stat/presentation/Screens/Bottom Navigation Pages/UAE_Numbers/uae_numbers.dart'; @@ -323,7 +333,6 @@ import '../presentation/routes/drawer_routes/Drawer Items/edit_profile.dart'; import '../presentation/routes/drawer_routes/Drawer Items/feedback.dart'; import '../presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart'; import '../presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart'; -import '../presentation/routes/drawer_routes/Drawer Items/user_guide/user_guide.dart'; import '../presentation/routes/drawer_routes/Drawer Items/manage_users.dart'; final pbService = PocketBaseService(); @@ -465,27 +474,75 @@ final GoRouter router = GoRouter( return ProfileScreen(userId: userId); }, ), +GoRoute( + path: '/user-guide', + builder: (context, state) => Userguide(), + routes: [ GoRoute( - path: '/user-guide', - builder: (context, state) => UserGuide(), + path: '/features', + name: 'features', + builder: (context, state) => UsingFeatures(), routes: [ GoRoute( - path: '/features', - name: 'features', - builder: (context, state) => UsingFeatures(), + path: 'whoUseApp', + name: 'whoUseApp', + builder: (context, state) => WhoUseTheApp(), ), GoRoute( - path: '/faq', - name: 'faq', - builder: (context, state) => FAQPage(), + path: 'howUseApp', + name: 'howUseApp', + builder: (context, state) => HowUseTheApp(), ), GoRoute( - path: '/gettingStarted', - name: 'gettingStarted', - builder: (context, state) => GettingStarted(), + path: 'purpose', + name: 'purpose', + builder: (context, state) => Purpose(), + ), + GoRoute( + path: 'stayUpdated', + name: 'stayUpdated', + builder: (context, state) => StayUpdate(), + ), + GoRoute( + path: 'changeMyPassword', + name: 'changeMyPassword', + builder: (context, state) => ChangeMyPassword(), + ), + GoRoute( + path: 'appFeatures', + name: 'appFeatures', + builder: (context, state) => AppFeatures(), + ), + GoRoute( + path: 'editMyProfile', + name: 'editMyProfile', + builder: (context, state) => EditMyProfile(), ), ], ), + GoRoute( + path: 'aboutApp', + builder: (context, state) => aboutTheApp(), + routes: [ + GoRoute( + path: 'aboutFCSC', + name: 'aboutFCSC', + builder: (context, state) => aboutFCSC(), + ), + GoRoute( + path: 'getStarted', + name: 'getStarted', + builder: (context, state) => GetStarted(), + ), + ] + ), + GoRoute( + path: '/faq', + name: 'faq', + builder: (context, state) => FAQPage(), + ), + ], +), // GoRoute( // path: '/manageuser', // builder: (context, state) { diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/AboutTheApp/AboutFCSC.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/AboutTheApp/AboutFCSC.dart new file mode 100755 index 00000000..06fbe525 --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/AboutTheApp/AboutFCSC.dart @@ -0,0 +1,89 @@ +import 'package:flutter/material.dart'; + +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + +import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart'; + +class aboutFCSC extends StatelessWidget { + const aboutFCSC({super.key}); + + @override + Widget build(BuildContext context) { + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + return BaseScaffold( showDivider: true, + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + bottomColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Getting Started', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 22, + color: Color(0xFF7DAFBC), + // fontWeight: FontWeight.normal, + fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + width: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: Column( + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('About FCSC', + style: TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + fontFamily: 'Roboto', + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/AboutFCSC.png', + fit: BoxFit.contain, + ), + ), + SizedBox(height: 5,), + RichText( + text: TextSpan( + text: 'The ', + style: TextStyle( + color:Colors.grey, + fontSize: 16, + fontFamily: 'Roboto' + ), + children: const [ + TextSpan(text: ' Federal Competitiveness and Statistics Centre (FCSC),', + style: TextStyle( + fontWeight: FontWeight.bold, + color:Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: ' in your App is designed to provide registered and approved users with access to accurate and comprehensive statistics about the UAE. The app serves as a centralized platform for exploring key datasets, trends, and insights across various sectors.'), + ], + ), + ), + Spacer(), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + ] + ), + ),); + } +} diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/AboutTheApp/getStarted.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/AboutTheApp/getStarted.dart new file mode 100755 index 00000000..865d1587 --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/AboutTheApp/getStarted.dart @@ -0,0 +1,133 @@ +import 'package:flutter/material.dart'; + +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + +import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart'; + +class GetStarted extends StatelessWidget { + const GetStarted({super.key}); + + @override + Widget build(BuildContext context) { + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), + ), + ), + child: BaseScaffold( showDivider: true, + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + bottomColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Getting Started', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + height: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('How to Get Started', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/getStarted.png', + fit: BoxFit.contain, + ), + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + '1. Download the app from the App Store or Google Play Store.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + '2. Log in to unlock advanced features or continue as a guest.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + '3. Log in to unlock advanced features or continue as a guest.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox( + height:MediaQuery.of(context).size.height * 0.1, + ), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ),); + } +} \ No newline at end of file diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/AppFeatures.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/AppFeatures.dart new file mode 100755 index 00000000..05a6965b --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/AppFeatures.dart @@ -0,0 +1,193 @@ +import 'package:flutter/material.dart'; + +import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart'; +import '../../../custom_drawer_routes.dart'; + +class AppFeatures extends StatelessWidget { + AppFeatures({super.key}); + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + @override + Widget build(BuildContext context) { + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), + ), + ), + child: BaseScaffold( showDivider: true, + showBackButton: true, + bottomColor:Colors.white, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Key Features', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + width: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('App Features', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/appFeatures.png', + fit: BoxFit.contain, + ), + ), + Text('1.Comprehensive Statistics:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 6.0), + child: Icon(Icons.brightness_1, size: 5), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + text: 'Access detailed datasets across categories such as Economy, Environment, Social, ', + style: TextStyle( + color:Color(0xFF898C81), + fontSize: 16, + fontFamily: 'Roboto' + ), + children: const [ + TextSpan(text: 'Economy, Environment, Social, ', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: 'and more.'), + ], + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Explore statistics presented as smart metrics, graphs, and charts for better understanding.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + + SizedBox(height: 8), + Text(' 2. Drilldown Navigation:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Start with high-level categories and drill down to specific KPIs and metrics for deeper insights.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('3. Interactive Visualizations:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'View trends and relationships with interactive graphs and charts, including bar graphs, line charts, and more.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 25,), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/ChangeMyPassword.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/ChangeMyPassword.dart new file mode 100755 index 00000000..0f35974a --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/ChangeMyPassword.dart @@ -0,0 +1,305 @@ +import 'package:flutter/material.dart'; + +import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart'; +import '../../../custom_drawer_routes.dart'; + +class ChangeMyPassword extends StatelessWidget { + ChangeMyPassword({super.key}); + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + @override + Widget build(BuildContext context) { + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), + ), + ), + child: BaseScaffold( showDivider: true, + bottomColor: Colors.white, + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('App Features', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + width: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('How to Change My Password', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/changePassword.png', + fit: BoxFit.contain, + ), + ), + Text( + 'Changing your password helps keep your account secure. Follow these steps to update your password:', + ), + SizedBox(height: 12), + Text('Steps to Change Password', + style:TextStyle( + fontSize:22, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Text('1. Access the Change Password Page:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + text: 'From the Profile page, tap on the ', + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: '"Change Password"', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' link at the bottom.',) + ], + ), + ), + ), + ], + ), + SizedBox(height: 8), + Text('2. Enter Old Password:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Enter your current password in the first field.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('3. Set a New Password:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Enter your new password in the second field.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Re-enter the new password in the third field for confirmation.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('4. Password Requirements:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Your new password must be different from the previously used password.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('5. Save Your Password:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + text: 'Tap the ', + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'Save ', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:'button',) + ], + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'A confirmation message will appear: “Password has been successfully updated.”', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('6. Re-Login:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Log in again using your new password to continue using the app', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 25,), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/EditMyProfile.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/EditMyProfile.dart new file mode 100755 index 00000000..a56b552a --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/EditMyProfile.dart @@ -0,0 +1,404 @@ +import 'package:flutter/material.dart'; + +import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart'; +import '../../../custom_drawer_routes.dart'; + +class EditMyProfile extends StatelessWidget { + EditMyProfile({super.key}); + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + @override + Widget build(BuildContext context) { + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), + ), + ), + child: BaseScaffold( showDivider: true, + showBackButton: true, + bottomColor: Colors.white, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('App Features', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + width: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('How to Edit My Profile', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/editProfile.png', + fit: BoxFit.contain, + ), + ), + Text( + 'Editing your profile allows you to update specific information while ensuring that critical details remain secure. Follow the steps below to update your profile:', + ), + SizedBox(height: 12), + Text('Steps to Edit Profile', + style:TextStyle( + fontSize:22, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Text('1. Access the Profile Page:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + text: 'Tap on the ', + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: '"Profile"', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' option from the navigation bar at the top left corner of the screen.',) + ], + ), + ) + ), + ], + ), + SizedBox(height: 8), + Text('2. Editable Fields:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'Full Name:', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' Tap the text box to enter your name (up to 40 alphanumeric characters).',) + ], + ), + ) + ), + ], + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'Date of Birth: ', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' Use the calendar dropdown to select your date of birth.',) + ], + ), + ) + ), + ], + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'Country/Region: ', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' Choose your current location from the dropdown menu.',), + ], + ), + ) + ), + ], + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'User Image: ', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:'Tap on the avatar icon to upload or change your profile picture.',), + ], + ), + ) + ), + ], + ), + SizedBox(height: 8), + Text('3. Non-Editable Fields:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'Username ', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:'and ',), + TextSpan(text: 'Email Id: ', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:'These fields cannot be edited to ensure the integrity of your account.',), + ], + ), + ) + ), + ], + ), + SizedBox(height: 8), + Text('4. Agree to Terms and Conditions:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Ensure that the checkbox for "I agree to Terms & Conditions and Privacy Policy" is selected before saving changes.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('4. Save Your Changes:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + text: 'Tap the ', + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'Save', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' button at the bottom of the screen.',) + ], + ), + ), + ), + ], + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'A confirmation dialog will appear with the message: “Are you sure you want to save this page? Once saved, you will not be able to change your name or date of birth.”', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child:RichText( + text: TextSpan( + text: 'Select ', + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: const [ + TextSpan(text: 'Confirm', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' to save the changes',), + TextSpan(text: ' Cancel', + style: TextStyle( + fontWeight: FontWeight.w600, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:' to go back.',), + ], + ), + ), + ), + ], + ), + SizedBox(height: 25,), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/howUseTheApp.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/howUseTheApp.dart new file mode 100755 index 00000000..9e2901b1 --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/howUseTheApp.dart @@ -0,0 +1,187 @@ +import 'package:flutter/material.dart'; + +import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart'; +import '../../../custom_drawer_routes.dart'; + +class HowUseTheApp extends StatelessWidget { + HowUseTheApp({super.key}); + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + @override + Widget build(BuildContext context) { + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), + ), + ), + child: BaseScaffold( showDivider: true, + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + bottomColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Key Features', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + width: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('How to Use the App', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/howUse.png', + fit: BoxFit.contain, + ), + ), + Text('1. Registration and Approval:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Sign up for the app and wait for admin approval.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('2. Login and Navigation:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Once approved, log in to access the app. Navigate through the categories on the home screen.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('3. Access Data:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Drill down into specific categories like "Economy" or "Environment" to view detailed KPIs and visual insights.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 8), + Text('4. Bookmark Metrics:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Drill down into specific categories like "Economy" or "Environment" to view detailed KPIs and visual insights.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 25,), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/purpose.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/purpose.dart new file mode 100755 index 00000000..1bcae2cb --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/purpose.dart @@ -0,0 +1,150 @@ +import 'package:flutter/material.dart'; + +import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart'; +import '../../../custom_drawer_routes.dart'; + +class Purpose extends StatelessWidget { + Purpose({super.key}); + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + @override + Widget build(BuildContext context) { + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color:Color(0xFF898C81),), + ), + ), + child: BaseScaffold( showDivider: true, + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + bottomColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Key Features', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + height: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('Purpose of the App', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/purpose.png', + fit: BoxFit.contain, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: RichText( + text: TextSpan( + text: 'Provide ', + style: TextStyle( + color:Color(0xFF898C81), + fontSize: 16, + fontFamily: 'Roboto' + ), + children: const [ + TextSpan(text: 'official statistics ', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: 'on the UAE in an accessible format.'), + ], + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Support decision-making and research with reliable, up-to-date data.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Enable users to interact with data visually through graphs and metrics.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 40,), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/stayUpdate.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/stayUpdate.dart new file mode 100755 index 00000000..4a15db3f --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/stayUpdate.dart @@ -0,0 +1,103 @@ +import 'package:flutter/material.dart'; + +import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart'; +import '../../../custom_drawer_routes.dart'; + +class StayUpdate extends StatelessWidget { + StayUpdate({super.key}); + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + @override + Widget build(BuildContext context) { + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color:Color(0xFF898C81),), + ), + ), + child: BaseScaffold( showDivider: true, + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + bottomColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Key Features', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + height: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('Stay Updated', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/stayUpdate.png', + fit: BoxFit.contain, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'The app regularly updates datasets and features to reflect the latest information. Notifications will alertyou about new data or improvements.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + + SizedBox(height: 150,), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/useTheApp.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/useTheApp.dart new file mode 100755 index 00000000..e5f9601b --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/KeyFeatures/useTheApp.dart @@ -0,0 +1,143 @@ +import 'package:flutter/material.dart'; + +import '../../../../../../infrastructure/services/img_asset_paths/banner_asset_path.dart'; +import '../../../custom_drawer_routes.dart'; + +class WhoUseTheApp extends StatelessWidget { + WhoUseTheApp({super.key}); + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + @override + Widget build(BuildContext context) { + return Theme( + data: ThemeData( + fontFamily: 'Roboto', // Set default font family for this page + textTheme: TextTheme( + bodyMedium: TextStyle(fontSize: 16, color: Color(0xFF898C81)), + ), + ), + child: BaseScaffold( showDivider: true, + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + bottomColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Key Features', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + height: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topLeft, + child: Text('Who Use the App', + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox( + width:MediaQuery.of(context).size.width, + height:MediaQuery.of(context).size.height * 0.36, + child: Image.asset( + 'assets/user_guide/whoUse.png', + fit: BoxFit.contain, + ), + ), + Text('This app is intended for:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Government officials requiring UAE statistics for decision-making.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Business professionals and researchers analyzing market trends.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only(top : 8.0), + child: Icon(Icons.brightness_1, size: 5, color: Color(0xFF414042),), + ), // Bullet point + SizedBox(width: 8), // Space between bullet and text + Expanded( + child: Text( + 'Students and educators needing reliable data for study and teaching.', + textAlign: TextAlign.justify, // Align the text + softWrap: true, + ), + ), + ], + ), + SizedBox(height: 50,), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/aboutApp.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/aboutApp.dart new file mode 100755 index 00000000..f466fe90 --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/aboutApp.dart @@ -0,0 +1,99 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + +import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart'; + +class aboutTheApp extends StatelessWidget { + const aboutTheApp({super.key}); + + @override + Widget build(BuildContext context) { + + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + return BaseScaffold( showDivider: true, + showBackButton: true, + bottomColor: Colors.white, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Getting Started', + style: TextStyle( + fontSize:22, + fontFamily: 'Roboto', + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + width: double.infinity, + color: Colors.white, + child: Column( + children: [ + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/aboutApp/aboutFCSC'); + }, + tileColor: Colors.white, + title: Text('About FCSC', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ),), + trailing: Icon(Icons.keyboard_arrow_right), + ), + ), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/aboutApp/getStarted'); + }, + // tileColor: Colors.white, + title: Text('How to Get Started?', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ), + ), + trailing: Icon(Icons.keyboard_arrow_right), + shape: Border( + bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line + ), + + ), + ), + Spacer(), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 25,), + ], + ), + + ),); + } +} diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/custom_text.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/custom_text.dart deleted file mode 100644 index a20db95f..00000000 --- a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/custom_text.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/material.dart'; - -class CustomTextRich extends StatelessWidget { - - const CustomTextRich({ - super.key, - required this.textSpans, - this.padding = const EdgeInsets.all(8.0), - this.textAlign = TextAlign.left, - }); - final List textSpans; - final EdgeInsetsGeometry padding; - final TextAlign textAlign; - - @override - Widget build(BuildContext context) { - return SingleChildScrollView( - child :Padding( - padding: padding, - child: Text.rich( - TextSpan(children: textSpans), - textAlign: textAlign, - ), - ), - ); - - - } - - static TextSpan createTextSpan( - String text, { - double? fontSize, - Color color = const Color(0xFF898C81), - FontWeight fontWeight = FontWeight.w500, - double? height, - double defaultFontSize = 14, - TextDecoration textDecoration = TextDecoration.none, - Color? decorationColor, - double spacingTop = 0.0, - double spacingBottom = 0.0, - }) { - String spacedText = (spacingTop > 0.0 || spacingBottom > 0.0) - ? '${'\n' * spacingTop.toInt()}$text${'\n' * spacingBottom.toInt()}' - : text; - return TextSpan( - text: spacedText, - style: TextStyle( - fontSize: fontSize ?? defaultFontSize, - color: color, - fontWeight: fontWeight, - height: height, - decoration: textDecoration, - decorationColor: decorationColor ?? color, - ), - ); - } -} diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart old mode 100644 new mode 100755 index f9aceff7..88652bac --- a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/faq_page.dart @@ -1,360 +1,272 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:go_router/go_router.dart'; - -import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; - -import '../../../../components/indicators/locale_provider.dart'; -import '../../../../components/my_toggle.dart'; - -class FAQPage extends StatefulWidget { - const FAQPage({super.key}); - - @override - State createState() => _FAQPageState(); -} - -class _FAQPageState extends State { - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - elevation: 3, - shadowColor: Colors.black, - title: Text('Key Features',), - leading: IconButton( - onPressed: (){ - context.go('/user-guide'); - }, - color: Colors.black, - icon: const Icon(Icons.arrow_back_ios_new),), - actions: [ - Consumer( - builder: (context, ref, _) { - final locale = ref.watch(localeProvider); // Current locale - return MyToggle( - isOn: locale?.languageCode == 'en', - knobTextWhenOn: 'ع', - knobTextWhenOff: 'EN', - pathColorWhenOn: Colors.grey.shade300, - pathColorWhenOff: Colors.grey.shade300, - onTap: () { - ref.read(localeProvider.notifier).toggleLocale(); - }, - ); - }, - ), - ], - - ), - body: SafeArea( - child: Scrollbar( - thumbVisibility: true, - thickness: 6, - radius: Radius.circular(10), - interactive: true, - child:SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container - ( - color: Colors.white, - padding: const EdgeInsets.all(16.0), - width: MediaQuery.of(context).size.width, - child: Text.rich( - TextSpan( - text: 'Here are some common questions about the ', - style: TextStyle( - fontSize: 19, - fontWeight: FontWeight.w600, - color: Colors.grey, - ), - children: [ - TextSpan( - text:' Federal Competitiveness and Statistics Centre (FCSC),', - style: TextStyle( - fontSize: 19, - fontWeight: FontWeight.w600, - color: Colors.black87, - ), - ), - TextSpan( - text: 'mobile application:', - style: TextStyle( - fontSize: 19, - fontWeight: FontWeight.w600, - color: Colors.grey, - ), - ), - ], - ), - ), - ), - Container( - padding: const EdgeInsets.all(0.0), - color: Colors.grey[50], - child: QuestionAnswerScrollView(), - ), - ], - ), - ), - ), - - ), - ); - } - - - -} -class QuestionAnswerScrollView extends StatelessWidget { - const QuestionAnswerScrollView({super.key}); - - - - @override - Widget build(BuildContext context) { - final List> questionsAndAnswers = [ - {'question':'What is the purpose of this app?', 'answer': 'The app provides official UAE statistics across categories like Economy, Environment, and Social. It allows users to explore datasets, view trends, and access detailed metrics to make informed decisions.'}, - {'question':'Do I need to create an account to use the app?', 'answer':RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'Yes, the app is strictly for registered and approved users. To access the data:\n\n', - style: TextStyle(fontWeight: FontWeight.normal, color: Colors.grey), - ), - TextSpan( - text: ' 1. You need to sign up using the Register Now option on the login screen.\n', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: ' 2. Your registration must be approved by the admin.\n', - style: TextStyle(color: Colors.grey), - ), - - TextSpan( - text: " 3. Once approved, you can log in to access the app's features and datasets.\n\nGuest access is not available for this application.\n ", - style: TextStyle(color: Colors.grey), - ), - ], - ), - ),}, - {'question':'How can I navigate through the app?','answer':'• Use the main categories on the homepage (e.g., Economy, Environment) to access subcategories and detailed KPIs.\n• Drill down into specific metrics or graphical views by tapping on a KPI.\n• Access additional features like Bookmarks or Profile through the navigation bar.\n'}, - {'question':'What types of data are available?', 'answer':RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'The app offers data on:\n\n', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: ' • Economy', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: ' GDP, growth rates, and economic trends\n', - style: TextStyle(color: Colors.grey), - ), - - TextSpan( - text: ' • Environment:', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: ' Electricity production, water consumption, and more.\n', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: ' • Social:', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: ' Labor force distribution, participation rates, and demographic data.\n', - style: TextStyle(color: Colors.grey), - ), - ], - ), - ),}, - {'question':'How do I bookmark a metric?', 'answer': RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'When viewing a metric, tap on the', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: ' Bookmark ', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: 'icon. Your bookmarks are accessible from the', - style: TextStyle(color: Colors.grey), - ), - - TextSpan( - text: 'My Bookmarks', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: 'section in the navigation bar.\n', - style: TextStyle(color: Colors.grey), - ), - ], - ), - ),}, - {'question':'Can I view the app in another language?', 'answer': RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'Yes, the app supports both ', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: 'English ', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: 'and', - style: TextStyle(color: Colors.grey), - ), - - TextSpan( - text: ' Arabic ', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: '. You can toggle the language using the switch in the top-right corner of the app.\n', - style: TextStyle(color: Colors.grey), - ), - ], - ), - ),}, - {'question':'What happens if I forget my password?','answer':'Tap on the Forgot Password? link on the login page. Follow the steps to reset your password via your registered email address.\n'}, - {'question':'Can I edit my profile details?','answer': 'Yes, you can edit specific fields such as Date of Birth and User Image. However, certain fields like Username and Email are non-editable for security reasons.\n'}, - {'question':'How often is the data updated?','answer':'The app updates its datasets regularly to ensure users have access to the latest statistics. Notifications are sent whenever significant updates are made.\n'}, - {'question':'What types of graphs and charts are available?','answer':'The app provides a variety of visualizations, including:\n • Line charts for trends.\n • Bar and column charts for comparisons.\n • Stacked charts for multi-layered data views.\n'}, - {'question':'Can I share the data or charts?','answer':RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'Yes, you can share data or charts directly from the app by tapping the ', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: 'Share ', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: 'button available on most pages.\n', - style: TextStyle(color: Colors.grey), - ), - ], - ), - ),}, - {'question':'What should I do if I encounter an issue?','answer':RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'For technical support or feedback, navigate to the ', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: 'Help ', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: 'section in the app and contact the support team.\n', - style: TextStyle(color: Colors.grey), - ), - ], - ), - ),}, - {'question':'How do I log out of the app?','answer':RichText( - text: TextSpan( - children: [ - TextSpan( - text: 'Go to the ', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: 'Profile ', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: 'section and tap the ', - style: TextStyle(color: Colors.grey), - ), - TextSpan( - text: 'Logout ', - style: TextStyle(color: Colors.black87,fontWeight: FontWeight.w500), - ), - TextSpan( - text: 'option in the top-right corner.\n', - style: TextStyle(color: Colors.grey), ), - ], - ), - ),}, - ]; - - return SingleChildScrollView( - child: Column( - children: questionsAndAnswers.map((qa) => QuestionAnswerCard(qa: qa)).toList(), - ), - ); - } -} - -class QuestionAnswerCard extends StatefulWidget { // Use dynamic to accommodate RichText - - const QuestionAnswerCard({super.key, required this.qa}); - final Map qa; - - @override - _QuestionAnswerCardState createState() => _QuestionAnswerCardState(); -} - -class _QuestionAnswerCardState extends State { - bool isExpanded = false; - - @override - Widget build(BuildContext context) { - return Card( - color: Colors.grey[50], - elevation: 1, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.zero, // No rounding, it's a rectangle - ), - margin: EdgeInsets.symmetric(vertical: 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ListTile( - dense: true, - textColor: Color(0xFF414042), - title: Text( - widget.qa['question']!, - style: TextStyle(fontWeight: FontWeight.w600, fontSize: 15), - ), - trailing: Icon(isExpanded ? Icons.remove : Icons.add), - onTap: () { - setState(() { - isExpanded = !isExpanded; - }); - }, - ), - if (isExpanded) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: widget.qa['answer'] is RichText - ? widget.qa['answer'] - : Text( - widget.qa['answer'] ?? '', - style: TextStyle(color: Colors.grey), - ), - ), - ], - ), - ); - } +import 'package:flutter/material.dart'; + +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + +class FAQPage extends StatefulWidget { + const FAQPage({super.key}); + + @override + State createState() => _FAQPageState(); +} + +class _FAQPageState extends State { + @override + Widget build(BuildContext context) { + return BaseScaffold( + showBackButton: true, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + bottomColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text(' FAQs', + style: TextStyle( + fontSize:22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: SafeArea( + child: Container( + height: double.infinity, + color: Colors.white, + child: Scrollbar( + thumbVisibility: true, + thickness: 8, + radius: Radius.circular(10), + interactive: true, + child:SingleChildScrollView( + child: QuestionAnswerScrollView(), + ), + ), + ), + + ), + ); + } + + + +} +class QuestionAnswerScrollView extends StatelessWidget { + const QuestionAnswerScrollView({super.key}); + + + + @override + Widget build(BuildContext context) { + final List> questionsAndAnswers = [ + {'question':'What is the purpose of this app?', 'answer': 'The app provides official UAE statistics across categories like Economy, Environment, and Social. It allows users to explore datasets, view trends, and access detailed metrics to make informed decisions.'}, + {'question':'Do I need to create an account to use the app?', 'answer':RichText( + text: TextSpan( + children: [ + TextSpan( + text: 'Yes, the app is strictly for registered and approved users. To access the data:\n\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: ' 1. You need to sign up using the Register Now option on the login screen.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: ' 2. Your registration must be approved by the admin.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + + TextSpan( + text: " 3. Once approved, you can log in to access the app's features and datasets.\n\nGuest access is not available for this application.\n ", + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + ], + ), + ),}, + {'question':'How can I navigate through the app?','answer':'• Use the main categories on the homepage (e.g., Economy, Environment) to access subcategories and detailed KPIs.\n• Drill down into specific metrics or graphical views by tapping on a KPI.\n• Access additional features like Bookmarks or Profile through the navigation bar.\n'}, + {'question':'What types of data are available?', 'answer':RichText( + text: TextSpan( + children: [ + TextSpan( + text: 'The app offers data on:\n\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: ' • Economy', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: ' GDP, growth rates, and economic trends\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + + TextSpan( + text: ' • Environment:', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: ' Electricity production, water consumption, and more.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: ' • Social:', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: ' Labor force distribution, participation rates, and demographic data.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + ], + ), + ),}, + {'question':'How do I bookmark a metric?', 'answer': RichText( + text: TextSpan( + children: [ + TextSpan( + text: 'When viewing a metric, tap on the', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: ' Bookmark ', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: 'icon. Your bookmarks are accessible from the', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + + TextSpan( + text: 'My Bookmarks', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: 'section in the navigation bar.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + ], + ), + ),}, + {'question':'Can I view the app in another language?', 'answer': RichText( + text: TextSpan( + children: [ + TextSpan( + text: 'Yes, the app supports both ', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: 'English ', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: 'and', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + + TextSpan( + text: ' Arabic ', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: '. You can toggle the language using the switch in the top-right corner of the app.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + ], + ), + ),}, + {'question':'What happens if I forget my password?','answer':'Tap on the Forgot Password? link on the login page. Follow the steps to reset your password via your registered email address.\n'}, + {'question':'Can I edit my profile details?','answer': 'Yes, you can edit specific fields such as Date of Birth and User Image. However, certain fields like Username and Email are non-editable for security reasons.\n'}, + {'question':'How often is the data updated?','answer':'The app updates its datasets regularly to ensure users have access to the latest statistics. Notifications are sent whenever significant updates are made.\n'}, + {'question':'What types of graphs and charts are available?','answer':'The app provides a variety of visualizations, including:\n • Line charts for trends.\n • Bar and column charts for comparisons.\n • Stacked charts for multi-layered data views.\n'}, + {'question':'Can I share the data or charts?','answer':RichText( + text: TextSpan( + children: [ + TextSpan( + text: 'Yes, you can share data or charts directly from the app by tapping the ', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: 'Share ', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: 'button available on most pages.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + ], + ), + ),}, + {'question':'What should I do if I encounter an issue?','answer':RichText( + text: TextSpan( + children: [ + TextSpan( + text: 'For technical support or feedback, navigate to the ', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: 'Help ', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: 'section in the app and contact the support team.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + ], + ), + ),}, + {'question':'How do I log out of the app?','answer':RichText( + text: TextSpan( + children: [ + TextSpan( + text: 'Go to the ', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: 'Profile ', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), ), + TextSpan( + text: 'section and tap the ', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ), + TextSpan( + text: 'Logout ', + style: TextStyle(color: Color(0xFF414042),fontWeight: FontWeight.w500, fontSize: 16), + ), + TextSpan( + text: 'option in the top-right corner.\n', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), ) ], + ), + ),}, + ]; + + return SingleChildScrollView( + child: Column( + children: questionsAndAnswers.map((qa) => QuestionAnswerCard(qa: qa)).toList(), + ), + ); + } +} + +class QuestionAnswerCard extends StatefulWidget { // Use dynamic to accommodate RichText + + const QuestionAnswerCard({super.key, required this.qa}); + final Map qa; + + @override + _QuestionAnswerCardState createState() => _QuestionAnswerCardState(); +} + +class _QuestionAnswerCardState extends State { + bool isExpanded = false; + + @override + Widget build(BuildContext context) { + return Card( + color: Colors.white, + shape: Border( + bottom: BorderSide(width: 0.5,color: Colors.grey.shade300), + ), + margin: EdgeInsets.symmetric(vertical: 0, ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListTile( + + dense: true, + textColor: Color(0xFF414042), + title: Text( + widget.qa['question']!, + style: TextStyle(fontWeight: FontWeight.w500, fontSize: 16), + ), + trailing: Icon(isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down), + onTap: () { + setState(() { + isExpanded = !isExpanded; + }); + }, + ), + if (isExpanded) + Padding( + padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16,top: 0), + child: widget.qa['answer'] is RichText + ? widget.qa['answer'] + : Text( + widget.qa['answer'] ?? '', + style: TextStyle(color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), + ), + ), + ], + ), + ); + } } \ No newline at end of file diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart old mode 100644 new mode 100755 index 0f54ed28..df22d2b5 --- a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart @@ -1,595 +1,234 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:go_router/go_router.dart'; -import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; - -import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/custom_text.dart'; - -import '../../../../components/indicators/locale_provider.dart'; -import '../../../../components/my_toggle.dart'; - - - -class UsingFeatures extends StatelessWidget { - const UsingFeatures({super.key}); - - - @override - Widget build(BuildContext context) { - - List textSpans = [ - CustomTextRich.createTextSpan('1.Data-Driven Insights:', - fontSize: 15, - color: Colors.black87, - fontWeight: FontWeight.bold, - height: 2, - ), - CustomTextRich.createTextSpan( - 'Access detailed datasets across categories such as Economy, Environment, Social, ', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - spacingTop: 1.9,), - - CustomTextRich.createTextSpan( - ' Economy, Environment, Social ', - fontSize: 13, color:Colors.black, - fontWeight: FontWeight.w600 , - ), - CustomTextRich.createTextSpan( - 'and more.Explore statistics presented as smart metrics, graphs, and charts for better understanding.', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - ), - - CustomTextRich.createTextSpan('\n2.Drilldown Navigation:', fontSize: 15, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 2 - ), - - CustomTextRich.createTextSpan( - '\nStart with high-level categories and drill down to specific KPIs and metrics for deeper insights.', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - ), - CustomTextRich.createTextSpan('\n3.Interactive Visualizations:', fontSize: 15, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 2 - ), - - CustomTextRich.createTextSpan( - '\nStart with high-level categories and drill down to specific KPIs and metrics for deeper insights.', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - ), - CustomTextRich.createTextSpan( - 'View trends and relationships with interactive graphs and charts, including bar graphs, line charts, and more.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n4.Secure User Access:', - fontSize: 14.0, - color: Colors.black87, - fontWeight: FontWeight.bold, - height: 2, - ), - CustomTextRich.createTextSpan( - '\nAvailable only to registered users whose accounts have been approved by an admin. Login ensures secure access to sensitive statistical information.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n5.Profile Customization:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 2 - ), - CustomTextRich.createTextSpan( - '\nUpdate your profile details, such as name, password, and region, to personalize your experience.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n6.Bookmark:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - ), - CustomTextRich.createTextSpan( - '\nSave frequently accessed metrics and datasets for quick reference via the Bookmarks section.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n7.Bilingual Support:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 2 - ), - CustomTextRich.createTextSpan( - '\nToggle between English and Arabic for ease of use.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\nWho Can Use the App?', - fontSize: 18.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w600, - height: 2.5 - ), - CustomTextRich.createTextSpan( - '\nThis app is intended for:', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n\n • Government officials requiring UAE statistics for decision-making.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n •Business professionals and researchers analyzing market trends.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n •Students and educators needing reliable data for study and teaching.\n\n', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - 'Purpose of the App\n', - fontSize: 16.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w600, - height: 2.0 - ), - CustomTextRich.createTextSpan( - ' • Provide official statistics on the UAE in an accessible format.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n • Support decision-making and research with reliable, up-to-date data.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n • Enable users to interact with data visually through graphs and metrics.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\nHow to Use the App', - fontSize: 18.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w600, - height: 2.3 - ), - CustomTextRich.createTextSpan( - '\n1.Registration and Approval:', - fontSize: 15.0, - color: Colors.black87, - fontWeight: FontWeight.bold, - height: 2.0 - ), - CustomTextRich.createTextSpan( - '\nSign up for the app and wait for admin approval.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n2.Login and Navigation:', - fontSize: 15.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 2.0, - ), - CustomTextRich.createTextSpan( - '\nOnce approved, log in to access the app. Navigate through the categories on the home screen.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n3.Access Data:', - fontSize: 15.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 2.0, - ), - CustomTextRich.createTextSpan( - '\nDrill down into specific categories like "Economy" or "Environment" to view detailed KPIs and visual insights.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n4.Bookmark Metrics:', - fontSize: 15.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 2.0, - ), - CustomTextRich.createTextSpan( - '\nSave important statistics for easy reference.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\nStay Updated', - fontSize: 18.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w600, - height: 3, - ), - CustomTextRich.createTextSpan( - '\nThe app is regularly updated with the latest datasets and features to ensure users have access to the most current information.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\nHow to Change My Password', - fontSize: 18.0, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 3, - ), - CustomTextRich.createTextSpan( - '\nChanging your password helps keep your account secure. Follow these steps to update your password:\n \n', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - 'Steps to Change Password', - fontSize: 16.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 2.5 - ), - CustomTextRich.createTextSpan( - '\n1.Access the Change Password Page:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 1.5, - ), - CustomTextRich.createTextSpan( - '\nFrom the Profile page, tap on the "Change Password" link at the bottom.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n2.Enter Old Password:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 1.5, - ), - CustomTextRich.createTextSpan( - '\nEnter your current password in the first field.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n3.Set a New Password:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 1.5, - ), - CustomTextRich.createTextSpan( - '\n• Enter your new password in the second field.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n• Re-enter the new password in the third field for confirmation.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n4.Password Requirements:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - ), - CustomTextRich.createTextSpan( - '\nYour new password must be different from the previously used password.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n5.Save Your Password:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - ), - CustomTextRich.createTextSpan( - '\n• Tap the Save button.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n• A confirmation message will appear: “Password has been successfully updated.”', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n6.Re-Login:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - ), - CustomTextRich.createTextSpan( - '\nLog in again using your new password to continue using the app.\n\n', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - 'How to Edit My Profile', - fontSize: 18.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w600, - height: 2.5, - ), - CustomTextRich.createTextSpan( - '\nEditing your profile allows you to update specific information while ensuring that critical details remain secure. Follow the steps below to update your profile:\n', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\nSteps to Edit Profile', - fontSize: 17.0, - color: Color(0xFF414042), - fontWeight: FontWeight.bold, - height: 2, - ), - CustomTextRich.createTextSpan( - '\n 1.Access the Profile Page:', - fontSize: 14.0, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 2, - ), - CustomTextRich.createTextSpan( - '\nTap on the "Profile" option from the navigation bar at the top left corner of the screen.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n 2. Editable Fields:', - fontSize: 14.0, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 2, - ), - CustomTextRich.createTextSpan( - '\n • Full Name:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w500, - ), - CustomTextRich.createTextSpan( - ' Tap the text box to enter your name (up to 40 alphanumeric characters).', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n • Date of Birth:', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w500, - ), - CustomTextRich.createTextSpan( - ' Use the calendar dropdown to select your date of birth.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n • Country/Region: ', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w500, - ), - CustomTextRich.createTextSpan( - 'Choose your current location from the dropdown menu.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n •User Image: ', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w500, - ), - CustomTextRich.createTextSpan( - 'Tap on the avatar icon to upload or change your profile picture.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n 3. Non-Editable Fields:', - fontSize: 14.0, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 2, - ), - CustomTextRich.createTextSpan( - '\nUsername ', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w500, - ), - CustomTextRich.createTextSpan( - 'and ', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - 'Email ID: ', - fontSize: 14.0, - color: Color(0xFF414042), - fontWeight: FontWeight.w500, - ), - CustomTextRich.createTextSpan( - 'These fields cannot be edited to ensure the integrity of your account.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n 4.Agree to Terms and Conditions:', - fontSize: 14.0, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 2, - ), - - CustomTextRich.createTextSpan( - '\nEnsure that the checkbox for "I agree to Terms & Conditions and Privacy Policy" is selected before saving changes.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n 5. Save Your Changes:', - fontSize: 15.0, - color: Colors.black87, - fontWeight: FontWeight.bold, - height: 2, - ), - CustomTextRich.createTextSpan( - '\n • Tap the Save button at the bottom of the screen.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n • A confirmation dialog will appear with the message:', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '“Are you sure you want to save this page? Once saved, you will not be able to change your name or date of birth.”', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - CustomTextRich.createTextSpan( - '\n • Select Confirm to save the changes or Cancel to go back.', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - - ]; - return - Scaffold( - appBar: AppBar( - elevation: 3, - shadowColor: Colors.black, - title: Text('Key Features',), - leading: IconButton( - onPressed: (){ - context.go('/user-guide'); - }, - color: Colors.black, - icon: const Icon(Icons.arrow_back_ios_new),), - actions: [ - Consumer( - builder: (context, ref, _) { - final locale = ref.watch(localeProvider); // Current locale - return MyToggle( - isOn: locale?.languageCode == 'en', - knobTextWhenOn: 'ع', - knobTextWhenOff: 'EN', - pathColorWhenOn: Colors.grey.shade300, - pathColorWhenOff: Colors.grey.shade300, - onTap: () { - ref.read(localeProvider.notifier).toggleLocale(); - }, - ); - }, - ), - ], - - ), - body:SafeArea( - - child: Scrollbar( - thumbVisibility: true, - thickness: 6, - radius: Radius.circular(10), - interactive: true, - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - color: Colors.white, - padding: const EdgeInsets.all(16.0), - width: MediaQuery.of(context).size.width, - child: Text( - 'FEATURES', - style: TextStyle( - color: Colors.black,// Text color - fontSize: 18, - fontWeight: FontWeight.w500, - ), - ), - ), - Container( - color: Colors.grey[50], // Set the background color here - // child: SingleChildScrollView( - child: CustomTextRich( - textSpans: textSpans, - padding: const EdgeInsets.all(16.0), - textAlign: TextAlign.start, - ), - ), - ], - ), - ) - ), - ), - ); - } -} +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:go_router/go_router.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + + +import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart'; + + + +class UsingFeatures extends StatelessWidget { + const UsingFeatures({super.key}); + + + @override + Widget build(BuildContext context) { + final fcscBanner = Image.asset( + BannerAssetPath.fcsc, + height: 56, + alignment:Alignment.center, + ); + return BaseScaffold( showDivider: true, + showBackButton: true, + dividerColor: Colors.grey[300], + bottomColor: Colors.white, + appbarColor: Colors.white, + mycenterTitle: true, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('Key Features', + style: TextStyle( + fontSize:22, + fontFamily: 'Roboto', + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, + ), + ), + ) , + body: Container( + width: double.infinity, + color: Colors.white, + child: Column( + children: [ + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/features/appFeatures'); + }, + tileColor: Colors.white, + title: Text('App Features', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ),), + trailing: Icon(Icons.keyboard_arrow_right), + ), + ), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/features/whoUseApp'); + }, + // tileColor: Colors.white, + title: Text('Who can use The App', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ), + ), + trailing: Icon(Icons.keyboard_arrow_right), + shape: Border( + bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line + ), + + ), + ), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/features/purpose'); + }, + // tileColor: Colors.white, + title: Text('Purpose of the App ?', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ), + ), + trailing: Icon(Icons.keyboard_arrow_right), + shape: Border( + bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line + ), + + ), + ), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/features/howUseApp'); + }, + // tileColor: Colors.white, + title: Text('How to Use the App', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ), + ), + trailing: Icon(Icons.keyboard_arrow_right), + shape: Border( + bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line + ), + + ), + ), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/features/stayUpdated'); + }, + // tileColor: Colors.white, + title: Text('Stay Updated', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ), + ), + trailing: Icon(Icons.keyboard_arrow_right), + shape: Border( + bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line + ), + + ), + ), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/features/changeMyPassword'); + }, + // tileColor: Colors.white, + title: Text('How to Change My Password', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ), + ), + trailing: Icon(Icons.keyboard_arrow_right), + shape: Border( + bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line + ), + + ), + ), + Container( + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Colors.grey.shade300, width: 0.5), // Grey bottom line + ), + ), + child: ListTile( + onTap: (){ + context.push('/user-guide/features/editMyProfile'); + }, + // tileColor: Colors.white, + title: Text('How to Edit My Profile', + style: TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w500, + fontFamily: 'Roboto', + ), + ), + trailing: Icon(Icons.keyboard_arrow_right), + shape: Border( + bottom: BorderSide(color: Colors.black, width: 3), // Grey bottom line + ), + + ), + ), + Spacer(), + Align( + alignment: Alignment.bottomCenter, + child: fcscBanner, + ), + SizedBox(height: 30,), + ], + ), + + ),); + + } +} diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/getting_started.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/getting_started.dart deleted file mode 100644 index a0e575a9..00000000 --- a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/getting_started.dart +++ /dev/null @@ -1,219 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:go_router/go_router.dart'; - - -import 'package:uae_stat/presentation/routes/drawer_routes/Drawer%20Items/user_guide/custom_text.dart'; -import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; - -import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart'; -import 'package:url_launcher/url_launcher.dart'; - -import '../../../../components/indicators/locale_provider.dart'; -import '../../../../components/my_toggle.dart'; -class GettingStarted extends StatelessWidget { - GettingStarted({super.key}); - - final String url = 'https://fcsc.gov.ae/en-us/Pages/home.aspx'; - final fcscBanner = Image.asset( - BannerAssetPath.fcsc, - height: 56, - alignment:Alignment.center, - ); - - - - - @override - Widget build(BuildContext context) { - List textSpans = [ - - CustomTextRich.createTextSpan('How to Get Started\n', fontSize: 17, - color: Colors.black87, - fontWeight: FontWeight.bold, - ), - CustomTextRich.createTextSpan('1.Download the app from the App Store or Google Play Store.', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - spacingTop: 1.9, - ), - CustomTextRich.createTextSpan( - '2.Log in to unlock advanced features or continue as a guest.\n', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - spacingTop: 1.9,), - - CustomTextRich.createTextSpan( - '3.Navigate through categories, explore metrics, and bookmark essential information.\n', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - ), - - CustomTextRich.createTextSpan('\nStay Updated', fontSize: 15, - color: Colors.black87, - fontWeight: FontWeight.w600, - height: 2, - ), - - CustomTextRich.createTextSpan( - '\nThe app regularly updates datasets and features to reflect the latest information. Notifications will alert you about new data or improvements.', - fontSize: 13, color:Color(0xFF898C81), - fontWeight: FontWeight.normal , - ), - - CustomTextRich.createTextSpan( - 'Support decision-making and research with reliable, up-to-date data.\n \n ', - fontSize: 14.0, - color: Color(0xFF898C81), - fontWeight: FontWeight.normal, - ), - - - ]; - return Scaffold( - appBar: AppBar( - elevation: 3, - shadowColor: Colors.black, - title: Text('About the App',), - leading: IconButton( - onPressed: (){ - context.go('/user-guide'); - }, - color: Colors.black, - icon: const Icon(Icons.arrow_back_ios_new),), - actions: [ - Consumer( - builder: (context, ref, _) { - final locale = ref.watch(localeProvider); // Current locale - return MyToggle( - isOn: locale?.languageCode == 'en', - knobTextWhenOn: 'ع', - knobTextWhenOff: 'EN', - pathColorWhenOn: Colors.grey.shade300, - pathColorWhenOff: Colors.grey.shade300, - onTap: () { - ref.read(localeProvider.notifier).toggleLocale(); - }, - ); - // IconButton( - // icon: Icon(locale?.languageCode == 'en' - // ? Icons.toggle_off_outlined - // : Icons.toggle_on_outlined,), - // onPressed: () { - // ref.read(localeProvider.notifier).toggleLocale(); - // }, - // ); - }, - ), - ], - ), - // title: Text('About the App',), - // showBackButton: true, - body:SafeArea( - child: Scrollbar( - thumbVisibility: true, - thickness: 6, - radius: Radius.circular(10), - interactive: true, - child:SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - color: Colors.white, - padding: const EdgeInsets.all(16.0), - width: MediaQuery.of(context).size.width, - child: Text.rich( - TextSpan( - text: 'The', - style: TextStyle( - fontSize: 19, - fontWeight: FontWeight.w600, - color: Colors.grey, - ), - children: [ - TextSpan( - text:' Federal Competitiveness and Statistics Centre (FCSC),', - style: TextStyle( - fontSize: 19, - fontWeight: FontWeight.w600, - color: Colors.black87, - ), - ), - TextSpan( - text:' in your App is designed to provide registered and approved users with access to accurate and comprehensive statistics about the UAE. The app serves as a centralized platform for exploring key datasets, trends, and insights across various sectors.', - style: TextStyle( - fontSize: 19, - fontWeight: FontWeight.w600, - color: Colors.grey, - ), - ), - ], - ), - ), - ), - - Column( - children: [ - Container( - color: Colors.grey[50], // Set the background color here - // child: SingleChildScrollView( - child: CustomTextRich( - textSpans: textSpans, - padding: const EdgeInsets.all(16.0), - textAlign: TextAlign.start, - ), - ), - Container( - color: Colors.grey[50], - padding: EdgeInsets.only(bottom: 26.0), - child:Text.rich( - TextSpan( - text: 'For more information please visit ', - style: TextStyle( - fontSize: 16.0, - color: Color(0xFF265E84), - fontWeight: FontWeight.normal,), - children: [ - TextSpan( - text: 'www.fcsc.gov.ae', - style: TextStyle( - fontSize: 16.0, - color: Color(0xFF568898), - fontWeight: FontWeight.normal, - decoration: TextDecoration.underline, - decorationColor:Color(0xFF568898), - ), - recognizer: TapGestureRecognizer() - ..onTap = () async { - final Uri uri = Uri.parse(url); - if (await launchUrl(uri)) { - await launchUrl(uri, mode: LaunchMode.externalApplication); - } else { - throw 'Could not launch $url'; - } - }, - ), - ], - ), - ), - ), - Container( - color: Colors.grey[50], - padding: EdgeInsets.only(bottom: 26.0), - width: MediaQuery.of(context).size.width, - child: Center( - child: fcscBanner, - ), - ), - ], - ), - ], - ), - ), - ), - ), - ); - } -} diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/user_guide.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/user_guide.dart deleted file mode 100644 index 2455932a..00000000 --- a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/user_guide.dart +++ /dev/null @@ -1,148 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; -import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; -class UserGuide extends StatefulWidget { - const UserGuide({super.key}); - - @override - State createState() => _UserGuideState(); -} - -class _UserGuideState extends State { - @override - Widget build(BuildContext context) { - - List createRows(List>> items) { - return items.map((pair) { - return Padding( - padding: const EdgeInsets.only(bottom: 20), - child: Row( - mainAxisAlignment: pair.length == 1 - ? MainAxisAlignment.center - : MainAxisAlignment.spaceEvenly, - children: pair.map((item) { - return userGuides( - color: item['color'] as Color, - text: item['text'] as String, - dynamicIcon: item['icon'], - routePath:item['routePath']as String, - ); - }).toList(), - ), - ); - }).toList(); - } - - return BaseScaffold( - title: Text('User Guide'), - body: SingleChildScrollView( - child: Container( - padding: const EdgeInsets.all(16.0), // Padding around content - child: Column( - children: createRows([ - // Each pair defines a row of (Color, Text) pairs - [ - {'routePath':'gettingStarted','color': Color(0xFF90B0D5), 'text': 'Getting Started', 'icon': 'START',}, - {'routePath':'features','color': Color(0xFFAA8E83), 'text': 'Using Features', 'icon': Icons.stars_outlined,}, - ], - [ - {'routePath':'faq','color': Color(0xFF7296BE), 'text': 'FAQs', 'icon': Icons.question_answer_sharp,}, - // {'routePath':'features','color': Color(0xFF7DAFBC), 'text': 'Advanced Settings', 'icon': Icons.settings_outlined, 'index': '6'}, - ], - ]), - ), - ), - ), ); - } -} - -class userGuides extends StatelessWidget { - - const userGuides({super.key, required this.routePath ,required this.color, required this.text,required this.dynamicIcon}); - final Color color; - final String text; - final dynamic dynamicIcon; - final String routePath; - - - Widget buildDynamicWidget(dynamic icons, Color iconColor) { - if (dynamicIcon is IconData) { - - return Icon( - icons, - size: 38, - color: iconColor, - ); - } else if (dynamicIcon is String) { - // Create a Text widget if variable is a String - return Text( - icons, - style: TextStyle( - fontWeight: FontWeight.w600, - fontSize: 20, - color: iconColor, - ), - ); - } else { - // Handle unsupported types - return Text( - 'Unsupported type', - style: TextStyle(color: Colors.red), - ); - } - } - - - @override - Widget build(BuildContext context) { - final double screenWidth= MediaQuery.of(context).size.width; - final double screenHeight= MediaQuery.of(context).size.height; - return InkWell( - onTap: (){ - context.push('/user-guide/$routePath'); - }, - child: Container( - padding: EdgeInsets.symmetric(horizontal: 4), - height: 110, - width: screenWidth * 0.40, - margin: EdgeInsets.all(1), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - border: Border.all(color: color, - width: 2.0) - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - // Icon( - // size:38, - // icons, // Home icon - // color: Colors.white, - // ), - buildDynamicWidget(dynamicIcon, color), - - SizedBox(width: 10,height: 10,), // Space between icon and text - Container( - width: double.infinity, - padding: EdgeInsets.symmetric(horizontal: 4, vertical: 5), // Padding inside the text background - decoration: BoxDecoration( - color: color, // Background color for text - borderRadius: BorderRadius.circular(5), - ), - child: Text( - text, - style: TextStyle( - color: Colors.white, // Text color - fontWeight: FontWeight.bold, - ), - textAlign: TextAlign.center, - ), - ), - ], - ), - ), - ); - } -} - diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/userguide.dart b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/userguide.dart new file mode 100755 index 00000000..65aaf812 --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/userguide.dart @@ -0,0 +1,175 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; +import 'package:iconify_design/iconify_design.dart'; + +class Userguide extends StatefulWidget { + Userguide({super.key}); + + @override + State createState() => _UserguideState(); +} + +class _UserguideState extends State { + final List> guideList = [ + {'routePath':'aboutApp','color': Color(0xFF90B0D5), 'text': 'Getting Started', 'icon': 'cbi:start-tv', }, + {'routePath':'features','color': Color(0xFFAA8E83), 'text': 'Using Features', 'icon': 'pajamas:issue-type-feature',}, + {'routePath':'faq','color': Color(0xFF7296BE), 'text': 'FAQs', 'icon': 'mdi:faq',}, + ]; + + @override + Widget buildDynamicWidget(dynamic icons, Color color) { + if (icons is IconData) { + return Icon( + icons, + size: 38, + color: color, // Apply color dynamically + ); + } else if (icons is String) { + return Text( + icons, + style: TextStyle( + // fontFamily: 'Handel', + fontWeight: FontWeight.w700, + fontSize: 20, + letterSpacing: 1.6, + color: color, // Apply color dynamically + ), + ); + } else { + return Text( + 'Unsupported type', + style: TextStyle(color: Colors.red), + ); + } + } + + Widget build(BuildContext context) { + return BaseScaffold( + showDivider: true, + bottomColor: Colors.white, + dividerColor: Colors.grey[300], + appbarColor: Colors.white, + title: Padding( + padding:EdgeInsets.only(bottom:8.0), + child: Text('User Guide'), + ) , + body: Container( + color: Colors.white, + padding: const EdgeInsets.symmetric(horizontal: 16 , vertical: 20), + child: GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, // Two columns + crossAxisSpacing: 10.0, + mainAxisSpacing: 10.0, + mainAxisExtent:MediaQuery.of(context).size.height* 0.15 , + ), + itemCount: guideList.length, + itemBuilder: (context, index) { + return HoverContainer( + iconName: guideList[index]['icon'], + title: guideList[index]['text'], + routePath: guideList[index]['routePath'], + ); + }, + ), + ), + ); + } + +} + + +class HoverContainer extends StatefulWidget { + final String iconName; + final String title; + final String routePath; + + + const HoverContainer({Key? key, required this.iconName, required this.title, required this.routePath}) : super(key: key); + + @override + _HoverContainerState createState() => _HoverContainerState(); +} + +class _HoverContainerState extends State { + bool isHovered = true; + @override + Widget build(BuildContext context) { + final double screenWidth= MediaQuery.of(context).size.width; + final double screenHeight= MediaQuery.of(context).size.height; + return GestureDetector( + onTap: () { context.push('/user-guide/${widget.routePath}');}, + child: MouseRegion( + onEnter: (_) => setState(() => isHovered = true), + onExit: (_) => setState(() => isHovered = true), + child : Container( + padding: EdgeInsets.only(top: 4, right: 4, left: 4, bottom: 6), + height: screenHeight* 0.23 , + width: screenWidth*0.30, + margin: EdgeInsets.all(1), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + boxShadow: isHovered + ? [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + blurRadius:2, + spreadRadius: 1, + offset: Offset(0, 4), + ), + ] + : [], + border: Border.all( + color: Color(0xFF7DAFBC), + width: 1.0 + ), + ), + alignment: Alignment.center, + // duration: Duration(milliseconds: 200), + + child: LayoutBuilder(builder: (context, constraints){ + double containerWidth = constraints.maxWidth; + // double containerHeight = constraints.maxHeight; + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconifyIcon(icon: widget.iconName, + color: Color((0xFF7DAFBC)), + size: containerWidth * 0.25,), + // buildDynamicWidget(data['icon'], Color(0xFF7DAFBC)), + SizedBox(width: 10,height: containerWidth * 0.04,), // Space between icon and text + Container( + width: containerWidth* 0.85, + padding: EdgeInsets.symmetric(horizontal: 4, vertical: 4), + margin: EdgeInsets.only(bottom: 3), + decoration: BoxDecoration( + color: Color(0xFF7DAFBC), + borderRadius: BorderRadius.circular(5), + border: Border.all(color: Color(0xFF7DAFBC)) + ), + child: Text( + widget.title, + style: TextStyle( + color: Colors.white, // Text color + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + ), + ], + ); + }) + + + ), + ), + + + + ); + + + } +} \ No newline at end of file diff --git a/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart b/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart index b4c99a17..840d97d5 100644 --- a/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart +++ b/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart @@ -28,16 +28,22 @@ class BaseScaffold extends ConsumerStatefulWidget { required this.body, required this.title, this.actions, + this.showDivider =false, + this.dividerColor , this.showBackButton = false, this.mycenterTitle = false, this.appbarColor, this.mytitleColor, + this.bottomColor=null, }); final Widget body; final Widget title; - final bool? showBackButton; + final Color? dividerColor; + final bool showDivider; + final bool showBackButton; final bool? mycenterTitle; final List? actions; + final Color? bottomColor; final Color? appbarColor, mytitleColor; @override @@ -619,6 +625,15 @@ class _BaseScaffoldState extends ConsumerState { appBar: AppBar( title: widget.title, backgroundColor: widget.appbarColor, + leadingWidth: widget.showBackButton ? mywidth * 0.25 : null, + bottom: widget.showDivider + ? PreferredSize( + preferredSize: Size.fromHeight(1), // Height of the line + child: Container( + color: widget.dividerColor, // Line color + height: 1, // Line thickness + ), + ): null, actions: widget.actions ?? [ // IconButton( @@ -838,6 +853,7 @@ class _BaseScaffoldState extends ConsumerState { ), ])), bottomNavigationBar: BottomNavigationBar( + backgroundColor: widget.bottomColor ?? null, currentIndex: _getSelectedIndex(currentRoute), onTap: (index) => _onItemTapped(context, index), type: BottomNavigationBarType.fixed, diff --git a/pubspec.lock b/pubspec.lock index 10d21d20..560952e2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -294,6 +294,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.1" + dartz: + dependency: transitive + description: + name: dartz + sha256: e6acf34ad2e31b1eb00948692468c30ab48ac8250e0f0df661e29f12dd252168 + url: "https://pub.dev" + source: hosted + version: "0.10.1" dbus: dependency: transitive description: @@ -302,6 +310,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.11" + dio: + dependency: transitive + description: + name: dio + sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9" + url: "https://pub.dev" + source: hosted + version: "5.8.0+1" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: e485c7a39ff2b384fa1d7e09b4e25f755804de8384358049124830b04fc4f93a + url: "https://pub.dev" + source: hosted + version: "2.1.0" equatable: dependency: transitive description: @@ -543,6 +567,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.0" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b + url: "https://pub.dev" + source: hosted + version: "2.0.17" flutter_test: dependency: "direct dev" description: flutter @@ -665,6 +697,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" + iconify_design: + dependency: "direct main" + description: + name: iconify_design + sha256: "4e8593d994b94f2be6942fafa7392042df457a970763b5bed1bc0eb37ca6e776" + url: "https://pub.dev" + source: hosted + version: "1.0.1" image: dependency: transitive description: @@ -953,6 +993,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" + url: "https://pub.dev" + source: hosted + version: "1.1.0" path_provider: dependency: transitive description: @@ -1452,6 +1500,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.1" + vector_graphics: + dependency: transitive + description: + name: vector_graphics + sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de" + url: "https://pub.dev" + source: hosted + version: "1.1.18" + vector_graphics_codec: + dependency: transitive + description: + name: vector_graphics_codec + sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" + url: "https://pub.dev" + source: hosted + version: "1.1.13" + vector_graphics_compiler: + dependency: transitive + description: + name: vector_graphics_compiler + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" + url: "https://pub.dev" + source: hosted + version: "1.1.16" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 48939a6f..b1c5f4ff 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: cupertino_icons: ^1.0.6 fl_chart: ^0.70.2 - + iconify_design: ^1.0.1 marquee: ^2.2.3 url_launcher: ^6.3.1 # dynamic_layouts: