diff --git a/assets/backgrounds/Notification/App-Update.png b/assets/backgrounds/Notification/App-Update.png new file mode 100644 index 00000000..8767ad9b Binary files /dev/null and b/assets/backgrounds/Notification/App-Update.png differ diff --git a/assets/backgrounds/Notification/Update_notific.png b/assets/backgrounds/Notification/Update_notific.png new file mode 100644 index 00000000..c772f7a6 Binary files /dev/null and b/assets/backgrounds/Notification/Update_notific.png differ diff --git a/lib/config/my_router.dart b/lib/config/my_router.dart index 9f847904..1130fe03 100644 --- a/lib/config/my_router.dart +++ b/lib/config/my_router.dart @@ -297,11 +297,14 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:go_router/go_router.dart'; import 'package:uae_stat/config/sessionCheckScreen.dart'; import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/UAE_Numbers/Social/marriages.dart'; +import 'package:uae_stat/presentation/Screens/auth_verification/privacy_policy.dart'; import 'package:uae_stat/presentation/Screens/auth_verification/registration.dart'; +import 'package:uae_stat/presentation/Screens/auth_verification/terms&conditions.dart'; import 'package:uae_stat/presentation/Screens/charts/chart.dart'; 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/drawer_routes/Drawer%20Items/notification/notification.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'; @@ -361,6 +364,7 @@ final GoRouter router = GoRouter( path: '/', //builder: (context, state) => LoginRoute(), builder: (context, state) => SessionCheckScreen(), + ), // GoRoute( // path: '/', @@ -460,6 +464,16 @@ final GoRouter router = GoRouter( userId: '', ), ), + GoRoute( + path: '/terms&conditions', + builder: (context, state) => TermsOfUse(), + //builder: (context, state) => LoginRoute(), + ), + GoRoute( + path: '/privacy_policy', + builder: (context, state) => PrivacyPolicy(), + //builder: (context, state) => LoginRoute(), + ), // Drawer Routers GoRoute( @@ -474,6 +488,13 @@ final GoRouter router = GoRouter( return ProfileScreen(userId: userId); }, ), + GoRoute( + path: '/notification', + builder: (context, state) { + // final userId = state.pathParameters['userId']!; + return NotificationPage(); + }, + ), GoRoute( path: '/user-guide', builder: (context, state) => Userguide(), diff --git a/lib/presentation/Screens/auth_verification/privacy_policy.dart b/lib/presentation/Screens/auth_verification/privacy_policy.dart new file mode 100644 index 00000000..c259e21a --- /dev/null +++ b/lib/presentation/Screens/auth_verification/privacy_policy.dart @@ -0,0 +1,887 @@ +import 'package:flutter/material.dart'; +import 'package:uae_stat/domain/use_cases/language.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + +class PrivacyPolicy extends StatelessWidget { + const PrivacyPolicy({super.key}); + + @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),), + bodyLarge: TextStyle(fontSize: 16, color:Color(0xFF414042), fontFamily: 'Roboto',fontWeight: FontWeight.w500), + ), + ), + child: Scaffold( + appBar: AppBar( + title:Text(context.translate( + 'Privacy Policy', + 'الشروط والأحكام', + ), + style: TextStyle( + fontSize:22, + color: Colors.black87, + fontWeight: FontWeight.w600, + // fontWeight: FontWeight.w500, + ), + ), + backgroundColor: Colors.white, + bottom: PreferredSize( + preferredSize: Size.fromHeight(1), // Height of the line + child: Container( + color: Colors.grey.shade300, // Line color + height: 1, // Line thickness + ), + ), + ), + + body: Container( + height: double.infinity, + color: Colors.white, + padding: EdgeInsets.all(16), + child:SingleChildScrollView( + child:Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + RichText( + text: TextSpan( + text: context.translate('Welcome to the ' + ,'مرحبًا بكم في '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto', height: 1.4), + children:[ + TextSpan(text: context.translate('Federal Competitiveness and Statistics Centre (FCSC) Mobile Application', + 'تطبيق المركز الاتحادي للتنافسية والإحصاء (FCSC) '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate(' We value your', + 'نحن نقدّر خصوصيتك وحماية بياناتك، ونلتزم بحماية معلوماتك الشخصية.',) + ), + TextSpan(text:context.translate( ' privacy and data protection ', + 'توضح هذه سياسة الخصوصية ',), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('and are committed to safeguarding your personal information. This ', + 'كيفية جمع واستخدام ومشاركة وحماية بياناتك عند استخدام هذا التطبيق.', + )), + TextSpan(text:context.translate( ' Privacy Policy', + ''), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate(' explains how we collect, use, share, and protect your information when using this App.\n By using the App, you consent to the practices described in this', + 'باستخدام التطبيق، فإنك توافق على الممارسات الموضحة في هذه السياسة. ', + ), + ), + TextSpan(text:context.translate( ' Privacy Policy ', + '',), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + ], + ), + ), + SizedBox(height: 10), + Text(context.translate ('1.Information We Collect', + '1.١. المعلومات التي نقوم بجمعها'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + RichText( + text: TextSpan( + text:context.translate( 'When you use the ', + 'عند استخدام تطبيق '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate( 'FCSC App, ', + ' FCSC '), + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('we may collect the following types of data:', + 'قد نقوم بجمع الأنواع التالية من البيانات: ',)) + ], + ), + ), + SizedBox(height: 5), + Text(context.translate('1.1 Personal Information','1.1المعلومات الشخصية'), + style:TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),) , + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: Column( + children: [ + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate( 'Name, email address, phone number ', + 'الاسم، البريد الإلكتروني، رقم الهاتف'), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(when registering an account).', + ' (عند التسجيل). '),), + ], + ), + ), + ), + ], + ), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children:[ + TextSpan(text: context.translate( 'User credentials ', + 'بيانات تسجيل الدخول ',), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(such as username and password).', + '(مثل اسم المستخدم وكلمة المرور).',),) + ], + ), + ), + ), + ], + ), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate( 'Demographic data ','البيانات الديموغرافية '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(if provided by the user).', + '(إذا قدمها المستخدم)'),) + ], + ), + ), + ), + ], + ), + ], + ), + ), + + Text(context.translate('1.2 Usage Data','1.2بيانات الاستخدام'), + style:TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),) , + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: Column( + children: [ + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate( 'Device information ', + 'معلومات الجهاز '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(IP address, operating system, device type).','(عنوان IP، نظام التشغيل، نوع الجهاز). '),), + ], + ), + ), + ), + ], + ), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('App interactions ',' التفاعلات داخل التطبيق'), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(pages viewed, features used, actions performed).',' (الصفحات التي تمت زيارتها، الميزات المستخدمة، الإجراءات المنفذة).')) + ], + ), + ), + ), + ], + ), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate( 'Log data ','بيانات السجل '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(error reports, login timestamps).','(تقارير الأخطاء، أوقات تسجيل الدخول)'),) + ], + ), + ), + ), + ], + ), + ], + ), + ), + Text(context.translate('1.3 Location Data','1.3بيانات الموقع الجغرافي'), + style:TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),) , + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: Column( + children: [ + 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:context.translate('If enabled, we may collect ', + 'في حال تفعيلها، قد نقوم بجمع بيانات الموقع لتحسين بعض الميزات.'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate( 'location-based data ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(to enhance certain features.',''),) + ], + ), + ), + ), + ], + ), + + ], + ), + ), + Text(context.translate('1.4 Cookies and Tracking Technologies','1.4ملفات تعريف الارتباط والتقنيات التتبعية'), + style:TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),) , + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: Column( + children: [ + 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:context.translate('We may use ','قد نستخدم ملفات تعريف الارتباط (Cookies) وأدوات التحليل والتتبع لتحسين وظائف التطبيق وتجربة المستخدم.'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate( 'cookies, analytics tools, and tracking technologies',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: context.translate('(to improve App functionality and user experience.',''),) + ], + ), + ), + ), + ], + ), + + ], + ), + ), + SizedBox(height: 10), + Text(context.translate('2. How We Use Your Information','2.كيفية استخدام معلوماتك'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + Text(context.translate('The data we collect is used to:','يتم استخدام البيانات التي نجمعها للأغراض التالية:'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + ), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Provide and improve services- ','تقديم وتحسين الخدمات – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('Deliver insights, statistics, and reports.','توفير الإحصاءات والتقارير والتحليلات.'),), + ], + ), + ), + ), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Personalize user experience –','تخصيص تجربة المستخدم – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('Tailor content and recommendations.','تحسين المحتوى والتوصيات بناءً على اهتمامات المستخدم.')), + ], + ), + ), + ), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate ('Ensure security – ','ضمان الأمان –'), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: context.translate('Prevent unauthorized access and detect fraudulent activities.', + 'منع الوصول غير المصرح به واكتشاف الأنشطة الاحتيالية.',),) + ], + ), + ), + ), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate('Comply with legal requirements –', + 'الامتثال للمتطلبات القانونية – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('As mandated by UAE laws and regulations.', + 'وفقًا للوائح والقوانين الإماراتية.'), + ) + ], + ), + ), + ), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children:[ + TextSpan(text: context.translate('Communicate with users –','التواصل مع المستخدمين – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate ('Respond to inquiries, send updates, and support requests.', + 'الرد على الاستفسارات وإرسال التحديثات والدعم الفني.',)) + ], + ), + ), + ), + SizedBox(height: 10), + Text(context.translate('3. How We Share Your Information','3.كيفية مشاركة معلوماتك'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + RichText( + text: TextSpan( + text: context.translate('FCSC ','لا يقوم FCSC ببيع أو تبادل معلوماتك الشخصية. ومع ذلك، قد نشارك البيانات في الحالات التالية:'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('does not sell or trade ',''), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: context.translate('your personal information. However, we may share data in the following cases:',''),) + ], + ), + ), + SizedBox(height: 5), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 5.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Government and Legal Compliance – ', + 'التزامات حكومية وقانونية – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('If required by ','')), + TextSpan(text: context.translate('UAE government authorities ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('or for legal obligations.',''),), + ], + ), + ), + ), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 5.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Third-Party Service Providers –', + 'مقدمو الخدمات الخارجيون – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: context.translate('To support App functionality (e.g., hosting services, analytics providers).','لدعم وظائف التطبيق (مثل خدمات الاستضافة، مزودي التحليلات).')) + ], + ), + ), + ), + Padding(padding: EdgeInsets.only(left: 10.0,bottom: 5.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Security and Fraud Prevention – ','الأمان ومنع الاحتيال – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text: context.translate('To investigate and prevent security breaches All third-party vendors are required to', + 'للتحقيق في أي خروقات أمنية ومنعها.'), + ), + + TextSpan(text: context.translate(' adhere to strict confidentiality agreements. ','جميع مزودي الخدمات الخارجيين مطالبون بالالتزام باتفاقيات سرية صارمة.'), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + ], + ), + ), + ), + SizedBox(height: 10), + Text(context.translate('4. Data Storage and Security','4.تخزين البيانات وأمانها'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text: context.translate('Data Encryption – ','تشفير البيانات '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text: context.translate('We use AES-256 encryption to protect user data.', + '– نستخدم تشفير AES-256 لحماية بيانات المستخدم.'),), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text:context.translate( 'Secure Servers – ','خوادم آمنة – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text: context.translate ('All information is stored on government-approved servers with strict access controls.','يتم تخزين جميع المعلومات على خوادم معتمدة من الحكومة بإجراءات صارمة للتحكم في الوصول.'),), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text: context.translate('Access Restrictions – ', 'قيود الوصول – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text: context.translate('Only authorized personnel can access sensitive user data.', + 'لا يُسمح بالوصول إلى البيانات إلا للموظفين المخولين فقط.'),), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children:[ + TextSpan( + text:context.translate('Retention Policy – ','سياسة الاحتفاظ بالبيانات – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text: context.translate('We retain personal data only as long as necessary for legal and operational purposes.', + 'نحتفظ بالبيانات الشخصية فقط للمدة اللازمة للأغراض القانونية والتشغيلية', + ),), + ], + ), + ), + ), + SizedBox(height: 10), + Text(context.translate ('5. User Rights and Choices','5.حقوق المستخدم وخياراته'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + Text(context.translate('Users have the following rights regarding their personal data',''), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text: context.translate ('Access & Review – ','الوصول والمراجعة – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text:context.translate( 'You can request a copy of the personal data stored.', + 'يمكنك طلب نسخة من بياناتك الشخصية المخزنة.',), + ), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text: context.translate('Correction & Deletion – ','التعديل والحذف –'), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text:context.translate('You may request corrections or removal of your data (subject to legal retention policies).', + '– يمكنك طلب تصحيح أو إزالة بياناتك (وفقًا لسياسات الاحتفاظ القانونية).'),), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text: context.translate('Opt-Out of Marketing – ','إلغاء الاشتراك في التسويق – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text:context.translate( 'You can choose to opt-out of promotional communications.', + 'يمكنك اختيار إلغاء الاشتراك في الرسائل الترويجية.'), + ), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text: context.translate ('Disable Location Services – ','إيقاف خدمات الموقع – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text:context.translate ( 'Location tracking can be disabled via device settings.','يمكن تعطيل تتبع الموقع عبر إعدادات الجهاز.'), + ), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 10.0, bottom: 3.0), + child: RichText( + text: TextSpan( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children:[ + TextSpan( + text: context.translate( 'To exercise these rights, contact us at ',''), + style: TextStyle( + color: Color(0xFF898C81), + fontFamily: 'Roboto', + ), + ), + TextSpan( + text: '[Insert Official FCSC Email]', + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text: '.'), + ], + ), + ), + ), + SizedBox(height: 10), + Text(context.translate('6. Third-Party Links and Services','6.روابط وخدمات الجهات الخارجية'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + RichText( + text: TextSpan( + text:context.translate('The App may contain ', + 'قد يحتوي التطبيق على روابط لمواقع إلكترونية أو خدمات خارجية (مثل بوابات الحكومة الإماراتية). لا تتحمل FCSC أي مسؤولية عن ممارسات الخصوصية الخاصة بالجهات الخارجية. يجب على المستخدمين مراجعة سياسات الخصوصية الخاصة بهم.'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate( 'links to external websites or services ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('(e.g., UAE government portals). FCSC is ','',),), + TextSpan(text:context.translate( 'not responsible ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate('for third-party privacy practices. Users should review their respective ',''),), + TextSpan(text:context.translate( 'Privacy Policies.',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + ], + ), + ), + SizedBox(height: 10), + Text( context.translate("7. Children's Privacy",'7.خصوصية الأطفال'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + RichText( + text: TextSpan( + text: context.translate('The App is not ','التطبيق غير مخصص للأطفال دون سن ١٣ عامًا. نحن لا نجمع بيانات من القاصرين عن قصد. يمكن للوالدين أو الأوصياء طلب إزالة أي بيانات تخص الأطفال عن طريق التواصل مع FCSC.'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text:context.translate( 'intended for children under 13 years. ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text: context.translate('We do not knowingly collect data from minors. Parents or guardians may request the ', + ''), + ), + TextSpan( + text:context.translate( 'removal of any child’s data ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text:context.translate( 'by contacting FCSC.',''),), + ], + ), + ), + SizedBox(height: 10), + Text(context.translate('8. Changes to This Privacy Policy','التغييرات على سياسة الخصوصية هذه'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + RichText( + text: TextSpan( + text: context.translate('We may update this Privacy Policy periodically to reflect changes in ', + 'قد نقوم بتحديث سياسة الخصوصية هذه بشكل دوري لتعكس التغييرات في القوانين أو التكنولوجيا أو ملاحظات المستخدمين. ستكون أحدث نسخة متاحة دائمًا داخل التطبيق.'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan( + text:context.translate( 'laws, technology, or user feedback. ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text:context.translate( 'The ',''),), + TextSpan( + text:context.translate( 'latest version will always be available ',''), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan(text:context.translate( 'in the App.',''),), + ], + ), + ), + Text(context.translate('9. Contact Information','9.معلومات الاتصال'), + style: TextStyle(fontSize: 17, color: Color(0xFF414042), fontFamily: 'Roboto', fontWeight: FontWeight.w600),) , + SizedBox(height: 5), + Text( context.translate('For privacy-related inquiries, you may contact:' ,'للاستفسارات المتعلقة بالخصوصية، يمكنك التواصل معنا عبر:'), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + ), + SizedBox(height: 20), + + ], + ) + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/Screens/auth_verification/registration.dart b/lib/presentation/Screens/auth_verification/registration.dart index 188ec7cf..928cfa73 100644 --- a/lib/presentation/Screens/auth_verification/registration.dart +++ b/lib/presentation/Screens/auth_verification/registration.dart @@ -342,847 +342,158 @@ class _RegisterScreenState extends ConsumerState { if (didPop) return; context.go('/login'); // Show exit confirmation dialog }, - child: Scaffold( - body: Column( - children: [ - Align( - alignment: AlignmentDirectional.topEnd, - child: 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(); - // }, - // ); - }, + child: SafeArea( + child: Scaffold( + backgroundColor: Colors.white, + body: Column( + children: [ + Align( + alignment: AlignmentDirectional.topEnd, + child: 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(); + // }, + // ); + }, + ), ), - ), - Container( - height: MediaQuery.of(context).size.height / 1.2, - child: SingleChildScrollView( - child: Column(children: [ - registrationSuccess - ? Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox(height: screenheight / 4), - buildIconContainer( - Icons.report, Color(0xFF7DAFBC)), - SizedBox(height: 20), - Text( - context.translate( - 'Your registration is pending for verification.', - 'تسجيلك في انتظار التحقق.'), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Color(0xFF414042)), - ), - SizedBox(height: 10), - Text( - context.translate( - 'Kindly verify your mail to proceed further.', - 'يرجى التحقق من البريد الخاص بك للمضي قدما.'), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14, - color: Color(0xFF898C81), - ), - ), - SizedBox(height: 10), - ElevatedButton( - onPressed: () => {context.go('/')}, - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFFAA8E83), // Background color - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), // Border radius - ), - ), - child: Text( - context.translate('Go to Login', 'اذهب إلى تسجيل الدخول'), + Container( + height: MediaQuery.of(context).size.height / 1.2, + child: SingleChildScrollView( + child: Column(children: [ + registrationSuccess + ? Padding( + padding: const EdgeInsets.all(20.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox(height: screenheight / 4), + buildIconContainer( + Icons.report, Color(0xFF7DAFBC)), + SizedBox(height: 20), + Text( + context.translate( + 'Your registration is pending for verification.', + 'تسجيلك في انتظار التحقق.'), + textAlign: TextAlign.center, style: TextStyle( - color: Colors.white, // Text color + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF414042)), + ), + SizedBox(height: 10), + Text( + context.translate( + 'Kindly verify your mail to proceed further.', + 'يرجى التحقق من البريد الخاص بك للمضي قدما.'), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 14, + color: Color(0xFF898C81), ), ), - ), - - SizedBox(height: screenheight / 5), - Center( - child: Container( - height: screenheight / 16, - width: screenwidth / 2.5, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage( - "assets/splash_screen/logo.png"), // Background image asset - fit: BoxFit.fill, + SizedBox(height: 10), + ElevatedButton( + onPressed: () => {context.go('/login')}, + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFAA8E83), // Background color + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), // Border radius + ), + ), + child: Text( + context.translate('Go to Login', 'اذهب إلى تسجيل الدخول'), + style: TextStyle( + color: Colors.white, // Text color + ), ), ), - )) - ], - ), - ) - : registrationFailed - ? Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox(height: screenheight / 8), - buildIconContainer(Icons.report, Colors.red), - SizedBox(height: 20), - Text( - context.translate( - 'Sorry ${_usernameController.text}!', - 'آسف ${_usernameController.text}!'), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: Color(0xFF414042)), - ), - SizedBox(height: 10), - Text( - context.translate( - 'Your registration process failed. For further assistance, please contact support.', - 'فشلت عملية التسجيل الخاصة بك. لمزيد من المساعدة، يرجى الاتصال بالدعم.'), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 14, - color: Color(0xFF898C81), + + SizedBox(height: screenheight / 5), + Center( + child: Container( + height: screenheight / 16, + width: screenwidth / 2.5, + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/splash_screen/logo.png"), // Background image asset + fit: BoxFit.fill, ), ), - SizedBox(height: 10), - ElevatedButton( - onPressed: () => { - setState(() { - registrationFailed = false; - registrationSuccess = false; - _usernameController.clear(); - _emailController.clear(); - _passwordController.clear(); - _confirmpasswordController.clear(); - isChecked = false; - }) - }, - child: Text( - context.translate( - 'Retry', 'أعد المحاولة'), - ), - ), - SizedBox(height: screenheight / 5), - Center( - child: Container( - height: screenheight / 16, - width: screenwidth / 2.5, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage( - "assets/splash_screen/logo.png"), // Background image asset - fit: BoxFit.fill, - ), - ), - )) - ], - ), - ) - : Form( - key: _formKey, - child: SingleChildScrollView( + )) + ], + ), + ) + : registrationFailed + ? Padding( + padding: const EdgeInsets.all(20.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - SizedBox(height: screenheight / 60), + SizedBox(height: screenheight / 8), + buildIconContainer(Icons.report, Colors.red), + SizedBox(height: 20), Text( - // 'Register', - AppLocalizations.of(context)! - .register_title, + context.translate( + 'Sorry ${_usernameController.text}!', + 'آسف ${_usernameController.text}!'), + textAlign: TextAlign.center, style: TextStyle( - fontSize: 32, - fontWeight: FontWeight.w400), + fontSize: 16, + fontWeight: FontWeight.w500, + color: Color(0xFF414042)), ), SizedBox(height: 10), - Text(AppLocalizations.of(context)! - .register_details), - - SizedBox(height: 20), - // Display this if registration is pending approval - Padding( - padding: const EdgeInsets.only( - top: 5.0, - bottom: 10, - left: 30, - right: 30), - child: TextFormField( - controller: _usernameController, - // focusNode: _focusNodes[0], - decoration: InputDecoration( - // hintText: _showHints[0] ? 'Username' : null, - hintText: _showHints[0] - ? AppLocalizations.of(context)! - .register_name - : null, - prefixIconConstraints: - const BoxConstraints( - maxWidth: 25 + 16 + 10, - maxHeight: 25 + (8 * 2), - ), - prefixIcon: Padding( - padding: const EdgeInsetsDirectional - .only( - start: 16, - end: 10, - ), - child: Image.asset( - MiscIconAssetPath.person, - fit: BoxFit.fitHeight, - height: 25, - width: 25, - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade300, - ), - ), - - // prefixIcon: Icon( - // Icons.person, - // color: Color(0xFF90B0D5), - // - // ), - // border: OutlineInputBorder(), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade400, - width: 1), // Enabled border - ), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Colors.deepPurple, - width: 2), // Focused border - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: 1), // Error border - ), - focusedErrorBorder: - OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: - 1), // Match the error color - ), - counterText: '', - hintStyle: TextStyle( - color: Color(0xFFC3C6CB), - fontSize: - registerLocale?.languageCode == - 'ar' - ? 14 - : 16, - ), - ), - validator: _validateUsername, - maxLength: - 40, // Set the maximum length to 20 characters - maxLengthEnforcement: - MaxLengthEnforcement.enforced, - ), - ), - SizedBox(height: 15), - Padding( - padding: const EdgeInsets.only( - top: 5.0, - bottom: 10, - left: 30, - right: 30), - child: TextFormField( - controller: _emailController, - // focusNode: _focusNodes[1], - decoration: InputDecoration( - // hintText: 'Enter your email', - hintText: _showHints[1] - ? AppLocalizations.of(context)! - .enter_your_email - : null, - // _showHints[1] ? 'Enter your email' : null, - prefixIconConstraints: - const BoxConstraints( - maxWidth: 25 + 16 + 10, - maxHeight: 25 + (8 * 2), - ), - prefixIcon: Padding( - padding: const EdgeInsetsDirectional - .only( - start: 16, - end: 10, - ), - child: Image.asset( - MiscIconAssetPath.vector, - fit: BoxFit.fitHeight, - height: 20, - width: 25, - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade100, - ), - ), - - // border: OutlineInputBorder(), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade400, - width: 1), - ), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Colors.deepPurple, - width: 2), // Focused border - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: 1), // Error border - ), - focusedErrorBorder: - OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: - 1), // Match the error color - ), - counterText: '', - hintStyle: TextStyle( - color: Color(0xFFC3C6CB), - fontSize: - registerLocale?.languageCode == - 'ar' - ? 14 - : 16, - ), - ), - validator: _validateEmail, - maxLength: 320, - maxLengthEnforcement: - MaxLengthEnforcement.enforced, - inputFormatters: [ - LengthLimitingTextInputFormatter( - 320), // Limit to 320 characters - ], - ), - ), - SizedBox(height: 15), - Padding( - padding: const EdgeInsets.only( - top: 5.0, - bottom: 10, - left: 30, - right: 30), - child: TextFormField( - controller: _passwordController, - // focusNode: _focusNodes[2], - obscureText: _obscurePassword, - decoration: InputDecoration( - hintText: _showHints[2] - ? AppLocalizations.of(context)! - .enter_your_password - : null, - // _showHints[2] ? 'Enter your password' : null, - prefixIconConstraints: - const BoxConstraints( - maxWidth: 25 + 16 + 10, - maxHeight: 25 + (8 * 2), - ), - prefixIcon: Padding( - padding: const EdgeInsetsDirectional - .only( - start: 16, - end: 10, - ), - child: Image.asset( - MiscIconAssetPath.lock, - fit: BoxFit.fitHeight, - height: 25, - width: 25, - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade300, - ), - ), - - // prefixIcon: Icon( - // Icons.lock, - // color: Color(0xFF90B0D5), - // ), - suffixIcon: IconButton( - // icon: Icon( - // _obscurePassword - // ? Icons.visibility_off - // : Icons.visibility, - // color: Color(0xFF9EA2A9), - // ), - - icon: Image.asset( - _obscurePassword - ? MiscIconAssetPath - .visibilityOff - : MiscIconAssetPath.visibleOn, - - color: Color( - 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly. - width: 24, - height: 24, - ), - - onPressed: () { - setState(() { - _obscurePassword = - !_obscurePassword; - }); - }, - ), - // border: OutlineInputBorder(), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade400, - width: 1), - ), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Colors.deepPurple, - width: 2), // Focused border - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: 1), // Error border - ), - focusedErrorBorder: - OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: - 1), // Match the error color - ), - - counterText: '', - hintStyle: TextStyle( - color: Color(0xFFC3C6CB), - fontSize: - registerLocale?.languageCode == - 'ar' - ? 14 - : 16, - ), - ), - validator: _validatePassword, - maxLength: 40, - maxLengthEnforcement: - MaxLengthEnforcement.enforced, - ), - ), - SizedBox(height: 15), - Padding( - padding: const EdgeInsets.only( - top: 5.0, - bottom: 10, - left: 30, - right: 30), - child: TextFormField( - controller: _confirmpasswordController, - // focusNode: _focusNodes[3], - obscureText: _obscureConfirmPassword, - decoration: InputDecoration( - hintText: _showHints[3] - ? AppLocalizations.of(context)! - .register_Confirm_password - : null, - // _showHints[3] ? 'Confirm password' : null, - prefixIconConstraints: - const BoxConstraints( - maxWidth: 25 + 16 + 10, - maxHeight: 25 + (8 * 2), - ), - prefixIcon: Padding( - padding: const EdgeInsetsDirectional - .only( - start: 16, - end: 10, - ), - child: Image.asset( - MiscIconAssetPath.lock, - fit: BoxFit.fitHeight, - height: 25, - width: 25, - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade300, - ), - ), - - suffixIcon: IconButton( - icon: Image.asset( - _obscureConfirmPassword - ? MiscIconAssetPath - .visibilityOff - : MiscIconAssetPath.visibleOn, - - color: Color( - 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly. - width: 24, - height: 24, - ), - onPressed: () { - setState(() { - _obscureConfirmPassword = - !_obscureConfirmPassword; - }); - }, - ), - // border: OutlineInputBorder( - // borderSide: BorderSide(color: Colors.blue, width: 2), // Default border color - // ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: MyTheme.topicColor( - IndicatorTopic.economy) - .shade400, - width: 1), - ), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Colors.deepPurple, - width: 2), // Focused border - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: 1), // Error border - ), - focusedErrorBorder: - OutlineInputBorder( - borderRadius: - BorderRadius.circular(10), - borderSide: BorderSide( - color: Color(0xFFb22222), - width: - 1), // Match the error color - ), - counterText: '', - hintStyle: TextStyle( - color: Color(0xFFC3C6CB), - fontSize: - registerLocale?.languageCode == - 'ar' - ? 14 - : 16, - ), - ), - validator: _validateConfirmPassword, - maxLength: 40, - maxLengthEnforcement: - MaxLengthEnforcement.enforced, - inputFormatters: [ - LengthLimitingTextInputFormatter( - 64), // Limit to 40 characters - ], + Text( + context.translate( + 'Your registration process failed. For further assistance, please contact support.', + 'فشلت عملية التسجيل الخاصة بك. لمزيد من المساعدة، يرجى الاتصال بالدعم.'), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 14, + color: Color(0xFF898C81), ), ), SizedBox(height: 10), - Padding( - padding: const EdgeInsets.only( - top: 0, - bottom: 10, - left: 25, - right: 30), - child: Row( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Checkbox( - value: isChecked, - onChanged: (value) { - setState(() { - isChecked = value ?? false; - showError = false; - }); - }, - side: BorderSide( - color: showError - ? Color(0xFFD83731) - : Color(0xFF7DAFBC), - width: 1, - ), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.only( - top: 11.0), - child: Text.rich( - TextSpan( - text: AppLocalizations.of( - context)! - .agree, - // text: 'I agree to ', - style: TextStyle( - color: Color( - 0xFF898C81), // Change to your desired color - ), - children: [ - TextSpan( - text: AppLocalizations.of( - context)! - .terms_conditions, - // text: 'Terms & Conditions', - style: TextStyle( - fontSize: registerLocale - ?.languageCode == - 'ar' - ? 12 - : 14, - fontWeight: - FontWeight.bold, - color: - Color(0xFF985400), - // Makes the text bold - // decoration: - // TextDecoration.underline, - decorationColor: - Color(0xFF985400), - decorationThickness: - 1), - ), - TextSpan( - text: AppLocalizations.of( - context)! - .t_and, - style: TextStyle( - color: Color( - 0xFF898C81), // Change to your desired color - ), - ), - TextSpan( - text: AppLocalizations.of( - context)! - .privacy_policy, - style: TextStyle( - fontWeight: - FontWeight.bold, - fontSize: registerLocale - ?.languageCode == - 'ar' - ? 12 - : 14, - fontFamily: 'Roboto', - color: - Color(0xFF985400), - // decoration: - // TextDecoration.underline, - decorationColor: - Color(0xFF648CBA), - decorationThickness: - 1), - ), - TextSpan( - text: AppLocalizations.of( - context)! - .conditions, - style: TextStyle( - color: Color( - 0xFF898C81), // Change to your desired color - ), - ), - ], - ), - ), - ), - ), - ], + ElevatedButton( + onPressed: () => { + setState(() { + registrationFailed = false; + registrationSuccess = false; + _usernameController.clear(); + _emailController.clear(); + _passwordController.clear(); + _confirmpasswordController.clear(); + isChecked = false; + }) + }, + child: Text( + context.translate( + 'Retry', 'أعد المحاولة'), ), ), - if (showError) - Row( - mainAxisAlignment: - MainAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only( - left: 30.0), - child: Text( - 'Required', - style: TextStyle( - color: Color(0xFFb22222), - fontSize: registerLocale - ?.languageCode == - 'ar' - ? 12 - : 14, - ), - ), - ), - ], - ), - SizedBox(height: 20), - Padding( - padding: const EdgeInsets.only( - top: 5.0, - bottom: 10, - left: 30, - right: 30), - child: SizedBox( - width: screenwidth / 1, - child: ElevatedButton( - onPressed: isRegistering - ? null - : _registerUser, - style: ElevatedButton.styleFrom( - backgroundColor: Color( - 0xFFA7887A), // Brownish color for Register - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(10), - ), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - // "Register", - AppLocalizations.of(context)! - .register_title, - style: TextStyle( - fontSize: registerLocale - ?.languageCode == - 'ar' - ? 14 - : 16, - color: Colors.white), - ), - SizedBox(width: 8), - const Icon( - Icons.chevron_right_outlined, - color: Colors - .white, // Set your desired color here - ) - ], - ), - ), - ), - ), - SizedBox(height: 15), - Text( - AppLocalizations.of(context)! - .account_confirmation, - style: TextStyle( - fontSize: - registerLocale?.languageCode == - 'ar' - ? 12 - : 14, - color: Colors.grey[600]), - ), - SizedBox(height: 15), - Padding( - padding: const EdgeInsets.only( - top: 5.0, - bottom: 10, - left: 30, - right: 30), - child: SizedBox( - width: screenwidth / 1, - child: ElevatedButton( - onPressed: () { - context.go('/'); - }, - style: ElevatedButton.styleFrom( - backgroundColor: Color( - 0xFF82AFCB), // Blueish color for Login - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(10), - ), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - AppLocalizations.of(context)! - .login_title, - style: TextStyle( - fontSize: 16, - color: Colors.white), - ), - SizedBox(width: 8), - const Icon( - Icons.chevron_right_outlined, - color: Colors - .white, // Set your desired color here - ) - ], - ), - ), - ), - ), - SizedBox( - height: 10, - ), + SizedBox(height: screenheight / 5), Center( child: Container( height: screenheight / 16, - width: screenwidth / 3, + width: screenwidth / 2.5, decoration: BoxDecoration( image: DecorationImage( image: AssetImage( @@ -1190,18 +501,715 @@ class _RegisterScreenState extends ConsumerState { fit: BoxFit.fill, ), ), - )), - SizedBox( - height: 20, - ), + )) ], ), + ) + : Form( + key: _formKey, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox(height: screenheight / 60), + Text( + // 'Register', + AppLocalizations.of(context)! + .register_title, + style: TextStyle( + fontSize: 32, + fontWeight: FontWeight.w400), + ), + SizedBox(height: 10), + Text(AppLocalizations.of(context)! + .register_details), + + SizedBox(height: 20), + // Display this if registration is pending approval + Padding( + padding: const EdgeInsets.only( + top: 5.0, + bottom: 10, + left: 30, + right: 30), + child: TextFormField( + controller: _usernameController, + // focusNode: _focusNodes[0], + decoration: InputDecoration( + // hintText: _showHints[0] ? 'Username' : null, + hintText: _showHints[0] + ? AppLocalizations.of(context)! + .register_name + : null, + prefixIconConstraints: + const BoxConstraints( + maxWidth: 25 + 16 + 10, + maxHeight: 25 + (8 * 2), + ), + prefixIcon: Padding( + padding: const EdgeInsetsDirectional + .only( + start: 16, + end: 10, + ), + child: Image.asset( + MiscIconAssetPath.person, + fit: BoxFit.fitHeight, + height: 25, + width: 25, + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade300, + ), + ), + + // prefixIcon: Icon( + // Icons.person, + // color: Color(0xFF90B0D5), + // + // ), + // border: OutlineInputBorder(), + enabledBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade400, + width: 1), // Enabled border + ), + focusedBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Colors.deepPurple, + width: 2), // Focused border + ), + errorBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: 1), // Error border + ), + focusedErrorBorder: + OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: + 1), // Match the error color + ), + counterText: '', + hintStyle: TextStyle( + color: Color(0xFFC3C6CB), + fontSize: + registerLocale?.languageCode == + 'ar' + ? 14 + : 16, + ), + ), + validator: _validateUsername, + maxLength: + 40, // Set the maximum length to 20 characters + maxLengthEnforcement: + MaxLengthEnforcement.enforced, + ), + ), + SizedBox(height: 15), + Padding( + padding: const EdgeInsets.only( + top: 5.0, + bottom: 10, + left: 30, + right: 30), + child: TextFormField( + controller: _emailController, + // focusNode: _focusNodes[1], + decoration: InputDecoration( + // hintText: 'Enter your email', + hintText: _showHints[1] + ? AppLocalizations.of(context)! + .enter_your_email + : null, + // _showHints[1] ? 'Enter your email' : null, + prefixIconConstraints: + const BoxConstraints( + maxWidth: 25 + 16 + 10, + maxHeight: 25 + (8 * 2), + ), + prefixIcon: Padding( + padding: const EdgeInsetsDirectional + .only( + start: 16, + end: 10, + ), + child: Image.asset( + MiscIconAssetPath.vector, + fit: BoxFit.fitHeight, + height: 20, + width: 25, + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade100, + ), + ), + + // border: OutlineInputBorder(), + enabledBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade400, + width: 1), + ), + focusedBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Colors.deepPurple, + width: 2), // Focused border + ), + errorBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: 1), // Error border + ), + focusedErrorBorder: + OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: + 1), // Match the error color + ), + counterText: '', + hintStyle: TextStyle( + color: Color(0xFFC3C6CB), + fontSize: + registerLocale?.languageCode == + 'ar' + ? 14 + : 16, + ), + ), + validator: _validateEmail, + maxLength: 320, + maxLengthEnforcement: + MaxLengthEnforcement.enforced, + inputFormatters: [ + LengthLimitingTextInputFormatter( + 320), // Limit to 320 characters + ], + ), + ), + SizedBox(height: 15), + Padding( + padding: const EdgeInsets.only( + top: 5.0, + bottom: 10, + left: 30, + right: 30), + child: TextFormField( + controller: _passwordController, + // focusNode: _focusNodes[2], + obscureText: _obscurePassword, + decoration: InputDecoration( + hintText: _showHints[2] + ? AppLocalizations.of(context)! + .enter_your_password + : null, + // _showHints[2] ? 'Enter your password' : null, + prefixIconConstraints: + const BoxConstraints( + maxWidth: 25 + 16 + 10, + maxHeight: 25 + (8 * 2), + ), + prefixIcon: Padding( + padding: const EdgeInsetsDirectional + .only( + start: 16, + end: 10, + ), + child: Image.asset( + MiscIconAssetPath.lock, + fit: BoxFit.fitHeight, + height: 25, + width: 25, + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade300, + ), + ), + + // prefixIcon: Icon( + // Icons.lock, + // color: Color(0xFF90B0D5), + // ), + suffixIcon: IconButton( + // icon: Icon( + // _obscurePassword + // ? Icons.visibility_off + // : Icons.visibility, + // color: Color(0xFF9EA2A9), + // ), + + icon: Image.asset( + _obscurePassword + ? MiscIconAssetPath + .visibilityOff + : MiscIconAssetPath.visibleOn, + + color: Color( + 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly. + width: 24, + height: 24, + ), + + onPressed: () { + setState(() { + _obscurePassword = + !_obscurePassword; + }); + }, + ), + // border: OutlineInputBorder(), + enabledBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade400, + width: 1), + ), + focusedBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Colors.deepPurple, + width: 2), // Focused border + ), + errorBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: 1), // Error border + ), + focusedErrorBorder: + OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: + 1), // Match the error color + ), + + counterText: '', + hintStyle: TextStyle( + color: Color(0xFFC3C6CB), + fontSize: + registerLocale?.languageCode == + 'ar' + ? 14 + : 16, + ), + ), + validator: _validatePassword, + maxLength: 40, + maxLengthEnforcement: + MaxLengthEnforcement.enforced, + ), + ), + SizedBox(height: 15), + Padding( + padding: const EdgeInsets.only( + top: 5.0, + bottom: 10, + left: 30, + right: 30), + child: TextFormField( + controller: _confirmpasswordController, + // focusNode: _focusNodes[3], + obscureText: _obscureConfirmPassword, + decoration: InputDecoration( + hintText: _showHints[3] + ? AppLocalizations.of(context)! + .register_Confirm_password + : null, + // _showHints[3] ? 'Confirm password' : null, + prefixIconConstraints: + const BoxConstraints( + maxWidth: 25 + 16 + 10, + maxHeight: 25 + (8 * 2), + ), + prefixIcon: Padding( + padding: const EdgeInsetsDirectional + .only( + start: 16, + end: 10, + ), + child: Image.asset( + MiscIconAssetPath.lock, + fit: BoxFit.fitHeight, + height: 25, + width: 25, + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade300, + ), + ), + + suffixIcon: IconButton( + icon: Image.asset( + _obscureConfirmPassword + ? MiscIconAssetPath + .visibilityOff + : MiscIconAssetPath.visibleOn, + + color: Color( + 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly. + width: 24, + height: 24, + ), + onPressed: () { + setState(() { + _obscureConfirmPassword = + !_obscureConfirmPassword; + }); + }, + ), + // border: OutlineInputBorder( + // borderSide: BorderSide(color: Colors.blue, width: 2), // Default border color + // ), + enabledBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: MyTheme.topicColor( + IndicatorTopic.economy) + .shade400, + width: 1), + ), + focusedBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Colors.deepPurple, + width: 2), // Focused border + ), + errorBorder: OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: 1), // Error border + ), + focusedErrorBorder: + OutlineInputBorder( + borderRadius: + BorderRadius.circular(10), + borderSide: BorderSide( + color: Color(0xFFb22222), + width: + 1), // Match the error color + ), + counterText: '', + hintStyle: TextStyle( + color: Color(0xFFC3C6CB), + fontSize: + registerLocale?.languageCode == + 'ar' + ? 14 + : 16, + ), + ), + validator: _validateConfirmPassword, + maxLength: 40, + maxLengthEnforcement: + MaxLengthEnforcement.enforced, + inputFormatters: [ + LengthLimitingTextInputFormatter( + 64), // Limit to 40 characters + ], + ), + ), + SizedBox(height: 10), + Padding( + padding: const EdgeInsets.only( + top: 0, + bottom: 10, + left: 25, + right: 30), + child: Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Checkbox( + value: isChecked, + onChanged: (value) { + setState(() { + isChecked = value ?? false; + showError = false; + }); + }, + side: BorderSide( + color: showError + ? Color(0xFF7296BE) + : Color(0xFF7DAFBC), + width: 1, + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.only( + top: 11.0), + child: Text.rich( + TextSpan( + text: AppLocalizations.of( + context)! + .agree, + // text: 'I agree to ', + style: TextStyle( + color: Color( + 0xFF898C81), // Change to your desired color + ), + children: [ + TextSpan( + recognizer:TapGestureRecognizer() + ..onTap = () => context.push('/terms&conditions'), + text: AppLocalizations.of( + context)! + .terms_conditions, + // text: 'Terms & Conditions', + style: TextStyle( + fontSize: registerLocale + ?.languageCode == + 'ar' + ? 12 + : 14, + fontWeight: + FontWeight.bold, + color: + Color(0xFF985400), + // Makes the text bold + // decoration: + // TextDecoration.underline, + decorationColor: + Color(0xFF985400), + decorationThickness: + 1), + ), + TextSpan( + text: AppLocalizations.of( + context)! + .t_and, + style: TextStyle( + color: Color( + 0xFF898C81), // Change to your desired color + ), + ), + TextSpan( + recognizer: TapGestureRecognizer() + ..onTap = () => context.push('/privacy_policy'), + text: AppLocalizations.of( + context)! + .privacy_policy, + style: TextStyle( + fontWeight: + FontWeight.bold, + fontSize: registerLocale + ?.languageCode == + 'ar' + ? 12 + : 14, + fontFamily: 'Roboto', + color: + Color(0xFF985400), + // decoration: + // TextDecoration.underline, + decorationColor: + Color(0xFF648CBA), + decorationThickness: + 1), + ), + TextSpan( + text: AppLocalizations.of( + context)! + .conditions, + style: TextStyle( + color: Color( + 0xFF898C81), // Change to your desired color + ), + ), + ], + ), + ), + ), + ), + ], + ), + ), + if (showError) + Row( + mainAxisAlignment: + MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only( + left: 30.0), + child: Text( + 'Required', + style: TextStyle( + color: Color(0xFFb22222), + fontSize: registerLocale + ?.languageCode == + 'ar' + ? 12 + : 14, + ), + ), + ), + ], + ), + SizedBox(height: 20), + Padding( + padding: const EdgeInsets.only( + top: 5.0, + bottom: 10, + left: 30, + right: 30), + child: SizedBox( + width: screenwidth / 1, + child: ElevatedButton( + onPressed: isRegistering + ? null + : _registerUser, + style: ElevatedButton.styleFrom( + backgroundColor: Color( + 0xFFA7887A), // Brownish color for Register + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10), + ), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + // "Register", + AppLocalizations.of(context)! + .register_title, + style: TextStyle( + fontSize: registerLocale + ?.languageCode == + 'ar' + ? 14 + : 16, + color: Colors.white), + ), + SizedBox(width: 8), + const Icon( + Icons.chevron_right_outlined, + color: Colors + .white, // Set your desired color here + ) + ], + ), + ), + ), + ), + SizedBox(height: 15), + Text( + AppLocalizations.of(context)! + .account_confirmation, + style: TextStyle( + fontSize: + registerLocale?.languageCode == + 'ar' + ? 12 + : 14, + color: Color(0xFF898C81), + ), + ), + SizedBox(height: 15), + Padding( + padding: const EdgeInsets.only( + top: 5.0, + bottom: 10, + left: 30, + right: 30), + child: SizedBox( + width: screenwidth / 1, + child: ElevatedButton( + onPressed: () { + context.go('/'); + }, + style: ElevatedButton.styleFrom( + backgroundColor: Color( + 0xFF82AFCB), // Blueish color for Login + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10), + ), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + AppLocalizations.of(context)! + .login_title, + style: TextStyle( + fontSize: 16, + color: Colors.white), + ), + SizedBox(width: 8), + const Icon( + Icons.chevron_right_outlined, + color: Colors + .white, // Set your desired color here + ) + ], + ), + ), + ), + ), + SizedBox( + height: 10, + ), + Center( + child: Container( + height: screenheight / 16, + width: screenwidth / 3, + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + "assets/splash_screen/logo.png"), // Background image asset + fit: BoxFit.fill, + ), + ), + )), + SizedBox( + height: 20, + ), + ], + ), + ), ), - ), - ]), + ]), + ), ), - ), - ], + ], + ), ), ), ); diff --git a/lib/presentation/Screens/auth_verification/terms&conditions.dart b/lib/presentation/Screens/auth_verification/terms&conditions.dart new file mode 100644 index 00000000..c4e2192d --- /dev/null +++ b/lib/presentation/Screens/auth_verification/terms&conditions.dart @@ -0,0 +1,713 @@ +import 'package:flutter/material.dart'; +import 'package:uae_stat/domain/use_cases/language.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + +class TermsOfUse extends StatelessWidget { + const TermsOfUse({super.key}); + + @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),), + bodyLarge: TextStyle(fontSize: 16, color:Color(0xFF414042), fontFamily: 'Roboto',fontWeight: FontWeight.w500), + ), + ), + child: Scaffold( + appBar: AppBar( + title:Text(context.translate( + 'Terms & Conditions', + 'الشروط والأحكام', + ), + style: TextStyle( + fontSize:22, + color: Colors.black87, + fontWeight: FontWeight.w600, + // fontWeight: FontWeight.w500, + ), + ), + backgroundColor: Colors.white, + bottom: PreferredSize( + preferredSize: Size.fromHeight(1), // Height of the line + child: Container( + color: Colors.grey.shade300, // Line color + height: 1, // Line thickness + ), + ), + ), + + 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( + context.translate( + 'Welcome to UAE.Stat Terms of Use' + , 'مؤسسة المشاع الإبداعي نَسْبُ الـمُصنَّف 4.0 رخصة عمومية دولية'), + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + ), + SizedBox(height: 7), + RichText( + text: TextSpan( + text: context.translate( + 'The data and information available through UAE.Stat are subject to ', + 'يخضع المحتوى والبيانات المتاحة من خلال UAE.Stat', + ), + style: TextStyle( + fontSize: 16, + color: Color(0xFF898C81), + fontFamily: 'Roboto', + height: 1.4, + ), + children: [ + TextSpan( + text: context.translate( + 'Creative Commons Attribution ', + 'لرخصة المشاع الإبداعي – نَسْبُ المُصنَّف ', + ), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto', + ), + ), + TextSpan( + text: context.translate( + '(CC BY 4.0)', + '(CC BY 4.0)،', + ), + style: TextStyle( + color: Color(0xFF414042), // No bold + fontFamily: 'Roboto', + ), + ), + TextSpan( + text: context.translate( + ' This means that the content of this site can be used and reused freely for commercial and non-commercial purposes.You are free to: ', + 'مما يعني أنه يمكن استخدامه وإعادة استخدامه بحرية للأغراض التجارية وغير التجارية.يُسمح لك بـ:', + ), + ), + ], + ), + ), + + SizedBox(height: 10), + Text(context.translate( + '1.Terms of Use', + '1.الشروط والأحكام', + ), + style: TextStyle( + fontSize:20, + color: Colors.black87, + fontWeight: FontWeight.w600, + // fontWeight: FontWeight.w500, + ), + ), + SizedBox(height: 5), + Text( + context.translate('You are free to:', 'يُسمح لك بـ:'), + style: TextStyle(fontSize: 16, color:Color(0xFF414042), fontFamily: 'Roboto',fontWeight: FontWeight.w500), + ), + Padding(padding: EdgeInsets.only(left: 10,top: 5, bottom: 7), + child: Column( + children: [ + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Share –', + 'المشاركة – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate(' Copy and redistribute the material in any medium or format.', + 'نسخ وإعادة توزيع المحتوى بأي وسيلة أو صيغة.', + )) + ], + ), + ), + ), + ], + ), + SizedBox(height: 3), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text:context.translate( 'Adapt –', + 'التعديل – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan(text:context.translate( 'Remix, transform, and build upon the material for any purpose, even commercially.', + 'إعادة مزج، تعديل، أو البناء على المحتوى لأي غرض، بما في ذلك الأغراض التجارية.'), + ) + ], + ), + ), + ), + ], + ), + ], + ), + ), + Text( context.translate( + 'The licensor cannot revoke these freedoms as long as you follow the license terms', + 'لا يمكن للمرخِّص إلغاء هذه الحريات طالما أنك تتبع شروط الترخيص.')), + SizedBox(height: 8), + Text( + context.translate( + '2.License Terms' + , '2.شروط الترخيص',), + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + SizedBox(height: 5), + Text( + context.translate('Under the following terms:', 'وفقًا للشروط التالية:'), + style: TextStyle(fontSize: 16, color:Color(0xFF414042), fontFamily: 'Roboto',fontWeight: FontWeight.w500), + ), + SizedBox(height: 5), + Padding(padding: EdgeInsets.only(left: 10,top: 5, bottom: 7), + child: Column( + children: [ + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Attribution –',' نَسْب المُصنَّف'), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + ' Copy and redistribute the material in any medium or format.', + 'يجب أن توفر الإسناد المناسب، وتضع رابط الترخيص، وتُوضِّح أي تعديلات أُجريت على المحتوى.', + ), + ), + ], + ), + ), + ), + ], + ), + SizedBox(height: 3), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('No additional restrictions – ','عدم فرض قيود إضافية – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'You may not impose legal or technological measures that restrict others from using the content as permitted.', + 'لا يجوز فرض قيود قانونية أو تكنولوجية تحد من إمكانية استخدام المحتوى كما هو مسموح به في الترخيص.' + ), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + SizedBox(height: 8), + Text( + context.translate( + '3.License Scope' + , '3.نطاق الترخيص',), + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + SizedBox(height: 5), + Text( + context.translate('The Licensor grants you:', 'يمنحك المرخِّص:'), + style: TextStyle(fontSize: 16, color:Color(0xFF414042), fontFamily: 'Roboto',fontWeight: FontWeight.w400), + ), + SizedBox(height: 5), + Padding(padding: EdgeInsets.only(left: 10,top: 5, bottom: 7), + child: Column( + children: [ + Text( + context.translate('A worldwide, royalty-free, non-exclusive, irrevocable license to:', + 'ترخيصًا عالميًا، خاليًا من الإتاوات، غير حصري، وغير قابل للإلغاء لـ:'), + style: TextStyle(fontSize: 16, color:Color(0xFF414042), fontFamily: 'Roboto',fontWeight: FontWeight.w400), + ), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Reproduce and share ','نسخ ومشاركة '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'the licensed material.', + 'المواد المرخَّصة', + ), + ), + ], + ), + ), + ), + ], + ), + SizedBox(height: 3), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('Modify and create ','تعديل وإنشاء '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'adapted material.', + 'مواد مشتقة من المحتوى', + ), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + Text(context.translate('This license applies to all media formats, including future technologies.', + 'ينطبق هذا الترخيص على جميع الوسائط والصيغ، بما في ذلك التقنيات المستقبلية.',), + style: TextStyle(fontSize: 16, color:Color(0xFF414042), fontFamily: 'Roboto',fontWeight: FontWeight.w400), + ), + SizedBox(height: 8), + Text( + context.translate( + '4.Restrictions & Endorsement' + , '4.القيود والمصادقة',), + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + SizedBox(height: 5), + Padding(padding: EdgeInsets.only(left: 10,top: 5, bottom: 7), + child: Column( + children: [ + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('No Endorsement – ','عدم المصادقة – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'You may not imply that the licensor endorses you or your use of the content.', + 'لا يجوز لك الإيحاء بأن المرخِّص يدعمك أو يدعم استخدامك للمحتوى.', + ), + ), + ], + ), + ), + ), + ], + ), + SizedBox(height: 3), + 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( + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('No Patent or Trademark Rights – ','التجارية – '), + style: TextStyle( + fontWeight: FontWeight.w500, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'This license does not grant any patent or trademark rights.', + 'لا يمنحك هذا الترخيص أي حقوق على براءات الاختراع أو العلامات التجارية.', + ), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + SizedBox(height: 8), + + Text( + context.translate( + '5.Liability Disclaimer' + , '5.إخلاء المسؤولية',), + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + SizedBox(height: 5), + Padding(padding: EdgeInsets.only(left: 10,top: 5, bottom: 7), + child: Column( + children: [ + 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: context.translate('The content is provided ','دون أي ضمانات '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('"as is" ', '"كما هو" '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'without any warranties.', + 'يتم توفير المحتوى.' + ), + ), + ], + ), + ), + ), + ], + ), + SizedBox(height: 3), + 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: context.translate('The Licensor is ','دون أي ضمانات '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('not responsible ', 'أي مسؤولية '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'for any damages resulting from the use of the content.', + 'عن أي أضرار تنتج عن استخدام المحتوى.' + ), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + SizedBox(height: 8), + + Text( + context.translate( + '6.Termination of License' + , '7.إنهاء الترخيص',), + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + SizedBox(height: 5), + Padding(padding: EdgeInsets.only(left: 10,top: 5, bottom: 7), + child: Column( + children: [ + 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: context.translate('If you ','إذا '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('violate the license terms ', 'انتهكت شروط الترخيص، '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + ', your rights under this license terminate automatically.', + 'فستنتهي حقوقك تلقائيًا.' + ), + ), + ], + ), + ), + ), + ], + ), + SizedBox(height: 3), + 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: context.translate('Rights may be reinstated ','يمكن استعادة الحقوق '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('if the violation is corrected within 30 days.', 'إذا تم تصحيح الانتهاك خلال 30 يومًا. '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + + ], + ), + ), + ), + ], + ), + ], + ), + ), + SizedBox(height: 8), + Text( + context.translate( + '7.Other Terms' + , '7.شروط إضافية',), + style: + TextStyle( + fontSize:20, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ),), + SizedBox(height: 5), + Padding(padding: EdgeInsets.only(left: 10,top: 5, bottom: 7), + child: Column( + children: [ + 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: context.translate('The Licensor is not bound by ','لا يكون المرخِّص ملزمًا '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('any additional terms ', 'بأي شروط إضافية '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'unless explicitly agreed.', + ' ما لم يتم الاتفاق عليها صراحةً.' + ), + ), + ], + ), + ), + ), + ], + ), + SizedBox(height: 3), + 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: context.translate('If any provision is ','لا يكون المرخِّص ملزمًا '), + style: TextStyle(fontSize: 16, color: Color(0xFF898C81), fontFamily: 'Roboto'), + children: [ + TextSpan(text: context.translate('unenforceable,', 'أي شرط غير قابل للتنفيذ، '), + style: TextStyle( + fontWeight: FontWeight.w400, + color: Color(0xFF414042), + fontFamily: 'Roboto' + ),), + TextSpan( + text: context.translate( + 'the rest of the terms remain in effect.', + ' تبقى بقية الشروط سارية المفعول.' + ), + ), + ], + ), + ), + ), + ], + ), + ], + ), + ), + SizedBox(height: 10), + ], + ), + ), + ), + ) + ,); + } +} + + + + + diff --git a/lib/presentation/Screens/profilepage.dart b/lib/presentation/Screens/profilepage.dart index 7aedb77d..3de32b0e 100644 --- a/lib/presentation/Screens/profilepage.dart +++ b/lib/presentation/Screens/profilepage.dart @@ -644,6 +644,8 @@ class _ProfileScreenState extends State { hintText: _showHints[2] ? 'Enter the name' : null, hintStyle: TextStyle(color: Colors.grey), border: OutlineInputBorder( + borderSide:BorderSide(color: Color(0xFF7296BE), + ), borderRadius: BorderRadius.circular(8), ), counterText: '', @@ -671,6 +673,8 @@ class _ProfileScreenState extends State { focusNode: _focusNodes[3], decoration: InputDecoration( border: OutlineInputBorder( + borderSide:BorderSide(color: Color(0xFF7296BE), + ), borderRadius: BorderRadius.circular(8), ), hintText: _showHints[3] ? 'DD/MM/YYYY' : null, @@ -712,6 +716,8 @@ class _ProfileScreenState extends State { value: _selectedCountry, decoration: InputDecoration( border: OutlineInputBorder( + borderSide:BorderSide(color: Color(0xFF7296BE), + ), borderRadius: BorderRadius.circular(8), ), labelText: 'Select', @@ -764,6 +770,8 @@ class _ProfileScreenState extends State { style: TextStyle(color: Color(0xFF898C81)), children: [ TextSpan( + recognizer:TapGestureRecognizer() + ..onTap = () => context.push('/terms&conditions'), text: AppLocalizations.of( context, )! @@ -776,10 +784,6 @@ class _ProfileScreenState extends State { decorationColor: Color(0xFF985400), decorationThickness: 1, ), - recognizer: TapGestureRecognizer() - ..onTap = () { - // Add action for Terms & Conditions tap - }, ), TextSpan( text: AppLocalizations.of( @@ -789,6 +793,9 @@ class _ProfileScreenState extends State { style: TextStyle(color: Color(0xFF898C81)), ), TextSpan( + recognizer: TapGestureRecognizer() + ..onTap = () => context.push('/privacy_policy'), + text: AppLocalizations.of( context, )! @@ -801,10 +808,7 @@ class _ProfileScreenState extends State { decorationColor: Color(0xFF985400), decorationThickness: 1, ), - recognizer: TapGestureRecognizer() - ..onTap = () { - // Add action for Privacy Policy tap - }, + ), TextSpan( text: AppLocalizations.of( diff --git a/lib/presentation/routes/auth_routes/login_route.dart b/lib/presentation/routes/auth_routes/login_route.dart index f961aae6..790a60e0 100644 --- a/lib/presentation/routes/auth_routes/login_route.dart +++ b/lib/presentation/routes/auth_routes/login_route.dart @@ -562,7 +562,7 @@ class LoginRoute extends HookConsumerWidget { children: [ TextSpan( text: context.translate( - 'Don\'t have an account?', + 'Don\'t have an account? ', 'ليس لديك حساب؟', ), style: const TextStyle( @@ -578,6 +578,7 @@ class LoginRoute extends HookConsumerWidget { 'سجل الان', ), style: TextStyle( + fontSize: locale?.languageCode == 'ar' ? 12 : 14, color: Color(0xFF985400), ), ), diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart b/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart index f14a53ce..096ef0bf 100644 --- a/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/edit_profile.dart @@ -778,6 +778,8 @@ class _EditProfileState extends State { value: _selectedCountry, decoration: InputDecoration( border: OutlineInputBorder( + borderSide:BorderSide(color: Color(0xFF7296BE), + ), borderRadius: BorderRadius.circular(8), ), @@ -857,11 +859,8 @@ class _EditProfileState extends State { TextDecoration .underline, ), - recognizer: - TapGestureRecognizer() - ..onTap = () { - // Add action for Terms & Conditions tap - }, + recognizer:TapGestureRecognizer() + ..onTap = () => context.push('/terms&conditions'), ), TextSpan( text: AppLocalizations @@ -887,11 +886,9 @@ class _EditProfileState extends State { TextDecoration .underline, ), - recognizer: - TapGestureRecognizer() - ..onTap = () { - // Add action for Privacy Policy tap - }, + recognizer: TapGestureRecognizer() + ..onTap = () => context.push('/privacy_policy'), + ), TextSpan( text: AppLocalizations diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart b/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart index a588779c..390e2371 100644 --- a/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/manage_users.dart @@ -299,6 +299,9 @@ class _ManageUserRouterState extends State { ), child: TextField( decoration: InputDecoration( + labelStyle:TextStyle( + color:Color(0xFFC3C6CB), + ), hintText: AppLocalizations.of(context)!.search, prefixIcon: Image.asset( MiscIconAssetPath.search, diff --git a/lib/presentation/routes/drawer_routes/Drawer Items/notification/notification.dart b/lib/presentation/routes/drawer_routes/Drawer Items/notification/notification.dart new file mode 100644 index 00000000..e5b1ccf3 --- /dev/null +++ b/lib/presentation/routes/drawer_routes/Drawer Items/notification/notification.dart @@ -0,0 +1,169 @@ +import 'package:flutter/material.dart'; +import '../../custom_drawer_routes.dart'; + +class NotificationPage extends StatefulWidget { + @override + _NotificationPageState createState() => _NotificationPageState(); +} + +class _NotificationPageState extends State { + // Example notification data + List> notifications = [ + {"title": "Social datasets are updated", "date": "04 Nov 2024 08:25 PM", "category": "Social"}, + {"title": "New feature updated", "date": "04 Nov 2024 08:25 PM", "category": "App updates"}, + ]; + + // Current selected tab index + int selectedTabIndex = 0; + + // Tab categories + final List tabs = ["All updates", "App updates", "Social", "Economy", "Environment", "Favourites"]; + + @override + Widget build(BuildContext context) { + // Filter notifications based on the selected tab + List> filteredNotifications = selectedTabIndex == 0 + ? notifications + : notifications.where((notification) => notification["category"] == tabs[selectedTabIndex]).toList(); + + return BaseScaffold( + title: Text('Notification'), + body: Column( + children: [ + TabBarHeader( + tabs: tabs, + selectedIndex: selectedTabIndex, + onTabSelected: (index) { + setState(() { + selectedTabIndex = index; + }); + }, + ), + Expanded( + child: selectedTabIndex == 1 + ? Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/backgrounds/Notification/Update_notific.png', + height: 200, + ), + SizedBox(height: 16), + Text( + filteredNotifications.isNotEmpty + ? filteredNotifications[0]['title'] + : 'No updates available.', + style: TextStyle(fontSize: 16, color: Colors.grey), + textAlign: TextAlign.center, + ), + ], + ), + ) + : filteredNotifications.isEmpty + ? Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.info_outline, size: 100, color: Colors.grey[400]), + SizedBox(height: 16), + Text( + 'No notifications available.', + style: TextStyle(fontSize: 16, color: Colors.grey), + ), + ], + ), + ) + : ListView.builder( + itemCount: filteredNotifications.length, + itemBuilder: (context, index) { + final notification = filteredNotifications[index]; + return NotificationTile( + title: notification["title"]!, + date: notification["date"]!, + category: notification["category"]!, + ); + }, + ), + ), + ], + ), + ); + } +} + +class TabBarHeader extends StatelessWidget { + final List tabs; + final int selectedIndex; + final ValueChanged onTabSelected; + + const TabBarHeader({ + required this.tabs, + required this.selectedIndex, + required this.onTabSelected, + }); + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.grey[200], + padding: const EdgeInsets.symmetric(vertical: 8), + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: tabs.asMap().entries.map((entry) { + int index = entry.key; + String text = entry.value; + return Row( + children: [ + TextButton( + onPressed: () => onTabSelected(index), + style: ButtonStyle( + foregroundColor: MaterialStateProperty.resolveWith((states) { + return selectedIndex == index ? Color(0xFF985400) : Colors.grey[700]; + }), + ), + child: Text(text), + ), + if (index < tabs.length - 1) buildDivider(), + ], + ); + }).toList(), + ), + ), + ); + } + + Widget buildDivider() { + return Container( + height: 20, + child: const VerticalDivider( + color: Colors.grey, + thickness: 1, + width: 16, + ), + ); + } +} + +class NotificationTile extends StatelessWidget { + final String title; + final String date; + final String category; + + const NotificationTile({ + required this.title, + required this.date, + required this.category, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + leading: Icon(Icons.circle, size: 12, color: category == "Social" ? Colors.red : Colors.grey), + title: Text(title, style: const TextStyle(fontWeight: FontWeight.bold)), + subtitle: Text(date), + ); + } +} 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 index 616912c4..53f73395 100755 --- 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 @@ -20,17 +20,14 @@ class aboutFCSC extends StatelessWidget { 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, - ), + title: Text( + 'Getting Started', + style: TextStyle( + fontFamily: 'Roboto', + fontSize: 22, + color: Color(0xFF7DAFBC), + // fontWeight: FontWeight.normal, + fontWeight: FontWeight.w500, ), ), body: Container( @@ -65,7 +62,7 @@ class aboutFCSC extends StatelessWidget { text: TextSpan( text: 'The ', style: TextStyle( - color: Colors.grey, fontSize: 16, fontFamily: 'Roboto'), + color: Colors.grey, fontSize: 16, fontFamily: 'Roboto', height: 1.4,), children: const [ TextSpan( text: 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 index 82bbfa55..1a0ebf95 100755 --- 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 @@ -27,16 +27,13 @@ class GetStarted extends StatelessWidget { 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, - ), + title: Text( + 'Getting Started', + style: TextStyle( + fontSize: 22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( @@ -49,96 +46,43 @@ class GetStarted extends StatelessWidget { children: [ Align( alignment: Alignment.topLeft, - child: Text( - 'How to Get Started', - style: TextStyle( - fontSize: 20, + 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, + 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, - ), - ), - ], + + 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: 2,), + Text( + '2. Log in to access advanced features', + textAlign: TextAlign.justify, // Align the text + softWrap: true, ), SizedBox( - height: MediaQuery.of(context).size.height * 0.1, + height:MediaQuery.of(context).size.height * 0.12, ), Align( alignment: Alignment.bottomCenter, child: fcscBanner, ), - SizedBox( - height: 25, - ), + SizedBox(height: 25,), + ], ), ), 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 index 0fbeba15..c654831b 100755 --- 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 @@ -47,157 +47,160 @@ class AppFeatures extends StatelessWidget { children: [ Align( alignment: Alignment.topLeft, - child: Text( - 'App Features', - style: TextStyle( - fontSize: 20, + 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, + 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, + 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'), + Padding( + padding: const EdgeInsets.only(left:7.0), + child: Column( + children: [ + 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 ', + 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.'), + ], + ), ), - 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, - ), - ), - ], + 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, + 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), + Padding( + padding: const EdgeInsets.only(left:7.0), + child: Column( + children: [ + 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, + ), + ), + ], ), - ), // 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, + 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), + Padding( + padding: const EdgeInsets.only(left:7.0), + child: Column( + children: [ + 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, + ), + ), + ], ), - ), // 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, + ], + ), ), + SizedBox(height: 25,), Align( alignment: Alignment.bottomCenter, child: fcscBanner, ), - SizedBox( - height: 25, - ), + 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 index 0db02f39..cbdda79b 100755 --- 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 @@ -25,16 +25,13 @@ class ChangeMyPassword extends StatelessWidget { 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, - ), + title: Text( + 'App Features', + style: TextStyle( + fontSize: 22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( @@ -47,18 +44,17 @@ class ChangeMyPassword extends StatelessWidget { children: [ Align( alignment: Alignment.topLeft, - child: Text( - 'How to Change My Password', - style: TextStyle( - fontSize: 20, + 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, + 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, @@ -68,281 +64,279 @@ class ChangeMyPassword extends StatelessWidget { '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, + 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, + 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'), + Padding( + padding: const EdgeInsets.only(left:8.0), + child: Column( + children: [ + 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.',) + ], + ), ), - TextSpan( - text: ' link at the bottom.', - ) - ], - ), + ), + ], ), - ), - ], + ], + ), ), + SizedBox(height: 8), - Text( - '2. Enter Old Password:', - style: TextStyle( - fontSize: 16, + 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'), + Padding( + padding: const EdgeInsets.only(left:8.0), + child: Column( + children: [ + 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, ), - 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, + 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), + Padding( + padding: const EdgeInsets.only(left:8.0), + child: Column( + children: [ + 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, + ), + ), + ], ), - ), // 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, + 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: 25, + + SizedBox(height: 8), + Text('4. Password Requirements:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), ), + SizedBox(height: 8), + Padding( + padding: const EdgeInsets.only(left:8.0), + child: Column( + children: [ + 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), + Padding( + padding: const EdgeInsets.only(left:8.0), + child: Column( + children: [ + 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), + Padding( + padding: const EdgeInsets.only(left:8.0), + child: Column( + children: [ + 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, - ), + 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 index 32d26816..9668065d 100755 --- 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 @@ -25,16 +25,13 @@ class EditMyProfile extends StatelessWidget { 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, - ), + title: Text( + 'App Features', + style: TextStyle( + fontSize: 22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( @@ -47,18 +44,17 @@ class EditMyProfile extends StatelessWidget { children: [ Align( alignment: Alignment.topLeft, - child: Text( - 'How to Edit My Profile', - style: TextStyle( - fontSize: 20, + 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, + 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, @@ -68,413 +64,369 @@ class EditMyProfile extends StatelessWidget { '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, + 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, + 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.', + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Column( + children: [ 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, - color: Color(0xFF414042), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Column( + children: [ + 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).',) + ], + ), + ) + ), + ], ), - ), // 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), + ), // 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, - color: Color(0xFF414042), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Column( + children: [ + 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.',), + ], + ), + ) + ), + ], ), - ), // 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'), + ], + ), + ), + + SizedBox(height: 8), + Text('4. Agree to Terms and Conditions:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), + ), + SizedBox(height: 8), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Column( + children: [ + 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, ), - 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, + + SizedBox(height: 8), + Text('5. Save Your Changes:', + style:TextStyle( + fontSize:16, + color: Color(0xFF414042), + fontWeight: FontWeight.w600, + ), ), + SizedBox(height: 8), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Column( + children: [ + 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, - ), + 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 index e6ad832c..b20bd1c0 100755 --- 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 @@ -25,16 +25,13 @@ class HowUseTheApp extends StatelessWidget { 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, - ), + title: Text( + 'Key Features', + style: TextStyle( + fontSize: 22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( 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 index d61602a3..273e7371 100755 --- 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 @@ -28,16 +28,13 @@ class Purpose extends StatelessWidget { 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, - ), + title: Text( + 'Key Features', + style: TextStyle( + fontSize: 22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( 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 index 3c2bbe37..bf90dd4f 100755 --- 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 @@ -28,16 +28,13 @@ class StayUpdate extends StatelessWidget { 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, - ), + title: Text( + 'Key Features', + style: TextStyle( + fontSize: 22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( @@ -82,7 +79,7 @@ class StayUpdate extends StatelessWidget { 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.', + 'The app regularly updates datasets and features to reflect the latest information. Notifications will alert you about new data or improvements.', textAlign: TextAlign.justify, // Align the text softWrap: true, ), 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 index 2b76c420..07f187be 100755 --- 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 @@ -48,7 +48,7 @@ class WhoUseTheApp extends StatelessWidget { Align( alignment: Alignment.topLeft, child: Text( - 'Who Use the App', + 'Who can use the App?', style: TextStyle( fontSize: 20, color: Color(0xFF414042), 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 index 70a5c6d4..b41c7224 100755 --- a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/aboutApp.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/aboutApp.dart @@ -20,17 +20,14 @@ class aboutTheApp extends StatelessWidget { 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, - ), + title: Text( + 'Getting Started', + style: TextStyle( + fontSize: 22, + fontFamily: 'Roboto', + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( 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 index 26fd1f1d..8089482b 100755 --- 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 @@ -17,16 +17,13 @@ class _FAQPageState extends State { 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, - ), + title: Text( + ' FAQs', + style: TextStyle( + fontSize: 22, + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: SafeArea( 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 index ddb2c774..a646a1ca 100755 --- a/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart +++ b/lib/presentation/routes/drawer_routes/Drawer Items/user_guide/features.dart @@ -21,17 +21,14 @@ class UsingFeatures extends StatelessWidget { 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, - ), + title: Text( + 'Key Features', + style: TextStyle( + fontSize: 22, + fontFamily: 'Roboto', + color: Color(0xFF7DAFBC), + fontWeight: FontWeight.w500, + // fontWeight: FontWeight.w500, ), ), body: Container( @@ -78,7 +75,7 @@ class UsingFeatures extends StatelessWidget { }, // tileColor: Colors.white, title: Text( - 'Who can use The App', + 'Who can use The App?', style: TextStyle( fontSize: 16, color: Color(0xFF414042), @@ -107,7 +104,7 @@ class UsingFeatures extends StatelessWidget { }, // tileColor: Colors.white, title: Text( - 'Purpose of the App ?', + 'Purpose of the App', style: TextStyle( fontSize: 16, color: Color(0xFF414042), diff --git a/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart b/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart index de8376b5..d669fdae 100644 --- a/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart +++ b/lib/presentation/routes/drawer_routes/custom_drawer_routes.dart @@ -778,6 +778,11 @@ class _BaseScaffoldState extends ConsumerState { ), ), if (userId != 'guest') + ListTile( + leading: Icon(Icons.notifications_none), + title: const Text('Notification'), + onTap: () => context.go('/notification'), + ), ListTile( leading: Image.asset( DrawerAssetIconPath.feedback, diff --git a/pubspec.yaml b/pubspec.yaml index eea7fbf6..22886e9f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -123,6 +123,7 @@ flutter: - assets/icons/drawer/feedback.png - assets/icons/drawer/manageusr.png - assets/feedback/disappointed.png + - assets/backgrounds/Notification/ - assets/feedback/frowning.png - assets/feedback/neutral.png - assets/feedback/smiling.png