UI changes added

This commit is contained in:
venbaittech 2025-02-05 14:44:27 +05:30
parent ec156e49dc
commit 53f1e10721
12 changed files with 322 additions and 177 deletions

View File

@ -15,8 +15,8 @@
"agree": "أوافق على الشروط والأحكام وسياسة الخصوصية للمركز الإتحادي للتنافسية والإحصاء", "agree": "أوافق على الشروط والأحكام وسياسة الخصوصية للمركز الإتحادي للتنافسية والإحصاء",
"t_and": "", "t_and": "",
"conditions": "", "conditions": "",
"terms_conditions": "", "terms_conditions": "الشروط والأحكام",
"privacy_policy":"", "privacy_policy":"سياسة الخصوصية",
"account_confirmation": "هل لديك حساب؟ سجل الدخول", "account_confirmation": "هل لديك حساب؟ سجل الدخول",
"login_title": "تسجيل الدخول", "login_title": "تسجيل الدخول",

View File

@ -12,7 +12,7 @@
"enter_your_email": "Enter your email", "enter_your_email": "Enter your email",
"enter_your_password": "Enter your password", "enter_your_password": "Enter your password",
"register_Confirm_password": "Confirm password", "register_Confirm_password": "Confirm password",
"agree": "I agree to the", "agree": "I agree to the ",
"t_and": " and ", "t_and": " and ",
"conditions": " of FCSC", "conditions": " of FCSC",
"terms_conditions": "Terms & Conditions", "terms_conditions": "Terms & Conditions",

View File

@ -83,12 +83,13 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(30.0), borderRadius: BorderRadius.circular(30.0),
border: Border.all(width: 1)), border: Border.all(width: 1,color: Color(0xFFAA8E83)),),
child: TextField( child: TextField(
decoration: InputDecoration( decoration: InputDecoration(
hintText: "Search", hintText: "Search",
prefixIcon: Icon(Icons.search), prefixIcon: Icon(Icons.search,
border: InputBorder.none, color: Color(0xFFAA8E83),),
border: InputBorder.none,
contentPadding: contentPadding:
EdgeInsets.symmetric(vertical: 15.0, horizontal: 20.0), EdgeInsets.symmetric(vertical: 15.0, horizontal: 20.0),
), ),

View File

@ -474,7 +474,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
), ),
) )
: Padding( : Padding(
padding: const EdgeInsets.only(top: 5.0,bottom: 20, left: 20,right: 20), padding: const EdgeInsets.only(top: 5.0,bottom: 20, left: 30,right: 30),
child: Form( child: Form(
key: _formKey, key: _formKey,
@ -503,12 +503,12 @@ class _RegisterScreenState extends State<RegisterScreen> {
? AppLocalizations.of(context)!.register_name ? AppLocalizations.of(context)!.register_name
: null, : null,
prefixIcon: Padding( prefixIcon: Padding(
padding: const EdgeInsets.all(8.0), // Adjust the padding as needed padding: const EdgeInsets.only(bottom: 1.0,top:1.0,right:10.0,left:15.0 ), // Adjust the padding as needed
child: Image.asset( child: Image.asset(
MiscIconAssetPath.person, MiscIconAssetPath.person,
color: Color(0xFF90B0D5), color: Color(0xFF90B0D5),
width: 24, width: 25,
height: 24, height: 15,
), ),
), ),
@ -520,15 +520,20 @@ class _RegisterScreenState extends State<RegisterScreen> {
// border: OutlineInputBorder(), // border: OutlineInputBorder(),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFF90B0D5), width: 2), // Enabled border borderSide: BorderSide(color: MyTheme.topicColor(IndicatorTopic.economy).shade400,
), width: 1), // Enabled border
),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
), ),
errorBorder: OutlineInputBorder( errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFFD83731), width: 1), // Error border 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: '', counterText: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)), hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
@ -550,26 +555,31 @@ class _RegisterScreenState extends State<RegisterScreen> {
: null, : null,
// _showHints[1] ? 'Enter your email' : null, // _showHints[1] ? 'Enter your email' : null,
prefixIcon: Padding( prefixIcon: Padding(
padding: const EdgeInsets.all(8.0), // Adjust the padding as needed padding: const EdgeInsets.only(bottom: 1.0,top:1.0,right:10.0,left:15.0 ), // Adjust the padding as needed
child: Image.asset( child: Image.asset(
MiscIconAssetPath.vector, MiscIconAssetPath.vector,
color: Color(0xFF90B0D5), color: Color(0xFF90B0D5),
width: 24, width: 25,
height: 24, height: 15,
), ),
), ),
// border: OutlineInputBorder(), // border: OutlineInputBorder(),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFF90B0D5), width: 2), // Enabled border borderSide: BorderSide(color: MyTheme.topicColor(IndicatorTopic.economy).shade400,
), width: 1),
),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
), ),
errorBorder: OutlineInputBorder( errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFFD83731), width: 1), // Error border 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: '', counterText: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)), hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
@ -594,12 +604,12 @@ class _RegisterScreenState extends State<RegisterScreen> {
: null, : null,
// _showHints[2] ? 'Enter your password' : null, // _showHints[2] ? 'Enter your password' : null,
prefixIcon: Padding( prefixIcon: Padding(
padding: const EdgeInsets.all(8.0), // Adjust the padding as needed padding: const EdgeInsets.only(bottom: 1.0,top:1.0,right:10.0,left:15.0 ), // Adjust the padding as needed
child: Image.asset( child: Image.asset(
MiscIconAssetPath.lock, MiscIconAssetPath.lock,
color: Color(0xFF90B0D5), color: Color(0xFF90B0D5),
width: 24, width: 25,
height: 24, height: 15,
), ),
), ),
// prefixIcon: Icon( // prefixIcon: Icon(
@ -634,16 +644,22 @@ class _RegisterScreenState extends State<RegisterScreen> {
// border: OutlineInputBorder(), // border: OutlineInputBorder(),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFF90B0D5), width: 2), // Enabled border borderSide: BorderSide(color: MyTheme.topicColor(IndicatorTopic.economy).shade400,
), width: 1),
),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
), ),
errorBorder: OutlineInputBorder( errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFFD83731), width: 1), // Error border 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: '', counterText: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)), hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
), ),
@ -663,12 +679,12 @@ class _RegisterScreenState extends State<RegisterScreen> {
: null, : null,
// _showHints[3] ? 'Confirm password' : null, // _showHints[3] ? 'Confirm password' : null,
prefixIcon: Padding( prefixIcon: Padding(
padding: const EdgeInsets.all(8.0), // Adjust the padding as needed padding: const EdgeInsets.only(bottom: 1.0,top:1.0,right:10.0,left:15.0 ), // Adjust the padding as needed
child: Image.asset( child: Image.asset(
MiscIconAssetPath.lock, MiscIconAssetPath.lock,
color: Color(0xFF90B0D5), color: Color(0xFF90B0D5),
width: 24, width: 25,
height: 24, height: 15,
), ),
), ),
suffixIcon: IconButton( suffixIcon: IconButton(
@ -694,15 +710,20 @@ class _RegisterScreenState extends State<RegisterScreen> {
// ), // ),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFF90B0D5), width: 2), // Enabled border borderSide: BorderSide(color: MyTheme.topicColor(IndicatorTopic.economy).shade400,
), width: 1),
),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
), ),
errorBorder: OutlineInputBorder( errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Color(0xFFD83731), width: 1), // Error border 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: '', counterText: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)), hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
@ -727,8 +748,8 @@ class _RegisterScreenState extends State<RegisterScreen> {
}); });
}, },
side: BorderSide( side: BorderSide(
color: showError ? Colors.red : Color(0xFF92722A), color: showError ? Color(0xFFD83731) : Color(0xFF92722A),
width: 1.5, width: 1,
), ),
), ),
Expanded( Expanded(
@ -741,16 +762,25 @@ class _RegisterScreenState extends State<RegisterScreen> {
text: AppLocalizations.of(context)! text: AppLocalizations.of(context)!
.terms_conditions, .terms_conditions,
// text: 'Terms & Conditions', // text: 'Terms & Conditions',
style: TextStyle( color: MyTheme.topicColor(IndicatorTopic.economy).shade600,), style: TextStyle(fontWeight: FontWeight.bold,
), color: Color(0xFF648CBA),
// Makes the text bold
decoration: TextDecoration.underline,
decorationColor: Color(0xFF648CBA),
decorationThickness: 1),
),
TextSpan( TextSpan(
text: AppLocalizations.of(context)! text: AppLocalizations.of(context)!
.t_and), .t_and),
TextSpan( TextSpan(
text: AppLocalizations.of(context)! text: AppLocalizations.of(context)!
.privacy_policy, .privacy_policy,
style: TextStyle( color: MyTheme.topicColor(IndicatorTopic.economy).shade600,), style: TextStyle(fontWeight: FontWeight.bold,
), color: Color(0xFF648CBA),
decoration: TextDecoration.underline,
decorationColor: Color(0xFF648CBA),
decorationThickness: 1),
),
TextSpan( TextSpan(
text: AppLocalizations.of(context)! text: AppLocalizations.of(context)!
.conditions), .conditions),
@ -769,7 +799,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
child: Text( child: Text(
'Please agree to terms and conditions.', 'Please agree to terms and conditions.',
style: TextStyle( style: TextStyle(
color: Colors.red[700], color: Color(0xFFb22222),
fontSize: 12, fontSize: 12,
), ),
), ),
@ -778,7 +808,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
), ),
SizedBox(height: 20), SizedBox(height: 20),
SizedBox( SizedBox(
width: screenwidth / 1.3, width: screenwidth / 1,
child: ElevatedButton( child: ElevatedButton(
onPressed: isRegistering ? null : _registerUser, onPressed: isRegistering ? null : _registerUser,
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
@ -807,15 +837,15 @@ class _RegisterScreenState extends State<RegisterScreen> {
), ),
), ),
), ),
SizedBox(height: 10), SizedBox(height: 15),
Text( Text(
AppLocalizations.of(context)!.account_confirmation, AppLocalizations.of(context)!.account_confirmation,
style: TextStyle( style: TextStyle(
fontSize: 16, color: Colors.grey[600]), fontSize: 16, color: Colors.grey[600]),
), ),
SizedBox(height: 10), SizedBox(height: 15),
SizedBox( SizedBox(
width: screenwidth / 1.3, width: screenwidth / 1,
child: ElevatedButton( child: ElevatedButton(
onPressed: () { onPressed: () {
context.go('/'); context.go('/');

View File

@ -1296,14 +1296,21 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
selectedFiltersStorage.clear(); selectedFiltersStorage.clear();
Navigator.pop(context); Navigator.pop(context);
}, },
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
vertical: 12), // Added padding horizontal: 0.0, vertical: 14.2), // Added padding
child: Text( child: Text(
context.translate('Clear', 'واضح'), context.translate('Clear', 'واضح'),
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 16, fontSize: 13,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
overflow: overflow:
@ -1311,12 +1318,6 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
maxLines: 1, // Ensures single line maxLines: 1, // Ensures single line
), ),
), ),
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
), ),
), ),
SizedBox(width: 16), SizedBox(width: 16),
@ -1334,9 +1335,15 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
selectedFilters); selectedFilters);
selectedFiltersStorage = List.from(selectedFilters); selectedFiltersStorage = List.from(selectedFilters);
}, },
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Padding( child: Padding(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
vertical: 12), // Added padding horizontal: 0.0, vertical: 16.0), // Added padding
child: FittedBox( child: FittedBox(
fit: BoxFit fit: BoxFit
.scaleDown, // Ensures text resizes if necessary .scaleDown, // Ensures text resizes if necessary
@ -1345,7 +1352,7 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
'Apply Filter', 'تطبيق الفلتر'), 'Apply Filter', 'تطبيق الفلتر'),
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 16, fontSize: 12,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
overflow: overflow:
@ -1354,12 +1361,6 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
), ),
), ),
), ),
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
), ),
), ),
], ],

View File

@ -74,6 +74,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
// Regular expression to validate Full Name (no special characters) // Regular expression to validate Full Name (no special characters)
final RegExp _nameRegExp = RegExp(r"^[a-zA-Z\s]+$"); final RegExp _nameRegExp = RegExp(r"^[a-zA-Z\s]+$");
late Future<RecordModel> userDetails; late Future<RecordModel> userDetails;
bool _isHoveringDate = false;
bool _isHoveringDropdown = false;
@override @override
void initState() { void initState() {
@ -368,7 +370,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
child: Form( child: Form(
key: _formKey, key: _formKey,
child: Padding( child: Padding(
padding: const EdgeInsets.all(20.0), padding: const EdgeInsets.only(top: 20.0,bottom: 20.0, left: 25,right: 25),
child: Column( child: Column(
children: [ children: [
// CircleAvatar( // CircleAvatar(
@ -539,7 +541,10 @@ class _ProfileScreenState extends State<ProfileScreen> {
], ],
), ),
SizedBox(height: 10), SizedBox(height: 10),
TextFormField( MouseRegion(
onEnter: (_) => setState(() => _isHoveringDate = true),
onExit: (_) => setState(() => _isHoveringDate = false),
child: TextFormField(
controller: _dateController, controller: _dateController,
focusNode: _focusNodes[3], focusNode: _focusNodes[3],
decoration: InputDecoration( decoration: InputDecoration(
@ -549,12 +554,22 @@ class _ProfileScreenState extends State<ProfileScreen> {
hintText: _showHints[3] ? 'DD/MM/YYYY' : null, hintText: _showHints[3] ? 'DD/MM/YYYY' : null,
//_showHints[3] ? 'Select your Date of Birth' : null, //_showHints[3] ? 'Select your Date of Birth' : null,
hintStyle: TextStyle(color: Colors.grey), hintStyle: TextStyle(color: Colors.grey),
suffixIcon: const Icon(Icons.arrow_drop_down_sharp),
), suffixIcon: Container(
width: 45,
padding: EdgeInsets.only(right: 1),
alignment: Alignment.center, // Center the icon vertically
child: Icon(
Icons.keyboard_arrow_down_sharp,
color: _isHoveringDate ? Colors.black : Colors.grey,
),
),
),
readOnly: true, readOnly: true,
onTap: _pickDate, onTap: _pickDate,
validator: _validateDob, validator: _validateDob,
), ),),
SizedBox(height: 10), SizedBox(height: 10),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
@ -567,7 +582,10 @@ class _ProfileScreenState extends State<ProfileScreen> {
], ],
), ),
SizedBox(height: 10), SizedBox(height: 10),
DropdownButtonFormField<String>( MouseRegion(
onEnter: (_) => setState(() => _isHoveringDropdown = true),
onExit: (_) => setState(() => _isHoveringDropdown = false),
child: DropdownButtonFormField<String>(
value: _selectedCountry, value: _selectedCountry,
decoration: InputDecoration( decoration: InputDecoration(
border: OutlineInputBorder( border: OutlineInputBorder(
@ -575,6 +593,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
), ),
labelText: 'Select', labelText: 'Select',
), ),
icon: Icon(Icons.keyboard_arrow_down_sharp,
color: _isHoveringDropdown ? Colors.black : Colors.grey ),
items: _countries items: _countries
.map((item) => DropdownMenuItem<String>( .map((item) => DropdownMenuItem<String>(
value: item, value: item,
@ -587,7 +607,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
}); });
}, },
validator: _validateDropdown, validator: _validateDropdown,
), ),),
SizedBox(height: 20), SizedBox(height: 20),
Row( Row(
children: [ children: [
@ -600,8 +620,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
}); });
}, },
side: BorderSide( side: BorderSide(
color: showError ? Colors.red : Colors.grey, color: showError ? Color(0xFFb22222) : Color(0xFF92722A),
width: 1.5, width: 1,
), ),
), ),
Expanded( Expanded(
@ -620,8 +640,11 @@ class _ProfileScreenState extends State<ProfileScreen> {
TextSpan( TextSpan(
text: 'Terms & Conditions', text: 'Terms & Conditions',
style: TextStyle( style: TextStyle(
color: Colors.blue, color: Color(0xFF648CBA),
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
fontWeight: FontWeight.bold, // Makes the text bold
decorationColor: Color(0xFF648CBA),
decorationThickness: 1,
), ),
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
@ -635,8 +658,12 @@ class _ProfileScreenState extends State<ProfileScreen> {
TextSpan( TextSpan(
text: 'Privacy Policy', text: 'Privacy Policy',
style: TextStyle( style: TextStyle(
color: Colors.blue, color: Color(0xFF648CBA),
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
fontWeight: FontWeight.bold, // Makes the text bold
decorationColor: Color(0xFF648CBA),
decorationThickness: 1,
), ),
recognizer: TapGestureRecognizer() recognizer: TapGestureRecognizer()
..onTap = () { ..onTap = () {
@ -668,7 +695,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
child: Text( child: Text(
'Please agree to terms and conditions', 'Please agree to terms and conditions',
style: TextStyle( style: TextStyle(
color: Colors.red[700], color: Color(0xFFb22222),
fontSize: 12, fontSize: 12,
), ),
), ),
@ -685,53 +712,30 @@ class _ProfileScreenState extends State<ProfileScreen> {
context.go('/createNewPw/$userId/$email'); context.go('/createNewPw/$userId/$email');
}, },
child: Text( child: Text(
"Change Password", 'Change Password',
style: TextStyle( style: TextStyle(
color: Colors.blue, color: Color(0xFF648CBA),
decoration: TextDecoration.underline), fontSize: 14,
fontWeight: FontWeight.w700,
fontFamily: 'Roboto',
// decoration: TextDecoration.underline),
),
), ),
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
ElevatedButton.icon( // ElevatedButton.icon(
ElevatedButton(
onPressed: () { onPressed: () {
if ((_formKey.currentState?.validate() ?? false) && if ((_formKey.currentState?.validate() ?? false) && (isChecked)) {
(isChecked)) {
_formKey.currentState?.save(); _formKey.currentState?.save();
showConfirmationDialog(context); showConfirmationDialog(context);
} else { } else {
setState(() { setState(() {
showError = showError = !isChecked; // Show error if the checkbox is not checked
!isChecked; // Show error if the checkbox is not checked
}); });
} }
// if ((_formKey.currentState?.validate() ?? false) && (isChecked)) {
// _formKey.currentState?.save();
// showConfirmationDialog(context);
// // if (isChecked) {
// // _formKey.currentState?.save();
// // // _confirmSaveProfile();
// // showConfirmationDialog(context);
// // }
// else {
// setState(() {
// showError = !isChecked; // Show error if the checkbox is not checked
// });
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(content: Text('Please accept the terms and conditions.',style: TextStyle(color: Colors.white),)),
// );
//}
//}
}, },
icon: Icon(
Icons.save,
color: Colors.white,
),
label: Text(
'Save',
style: TextStyle(color: Colors.white),
),
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A), backgroundColor: Color(0xFF92722A),
minimumSize: Size(double.infinity, 50), minimumSize: Size(double.infinity, 50),
@ -739,7 +743,22 @@ class _ProfileScreenState extends State<ProfileScreen> {
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
), ),
), child: Row(
mainAxisAlignment: MainAxisAlignment.center, // Center the content
children: [
Text(
'Save',
style: TextStyle(color: Colors.white),
),
SizedBox(width: 8), // Add space between text and icon
Icon(
Icons.save_outlined,
color: Colors.white,
),
],
),
)
], ],
), ),
), ),

View File

@ -25,13 +25,13 @@ class ThemedFormField extends HookWidget {
final isObscured = useState<bool>(true); final isObscured = useState<bool>(true);
final boxDecoration = BoxDecoration( final boxDecoration = BoxDecoration(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [ // boxShadow: [
BoxShadow( // BoxShadow(
offset: const Offset(0, 1), // offset: const Offset(0, 1),
blurRadius: 2, // blurRadius: 2,
color: Colors.black.withOpacity(0.1), // color: Colors.black.withOpacity(0.1),
), // ),
], // ],
); );
final obscureBtn = IconButton( final obscureBtn = IconButton(
onPressed: () => isObscured.value = !isObscured.value, onPressed: () => isObscured.value = !isObscured.value,

View File

@ -177,7 +177,7 @@ class LoginRoute extends HookConsumerWidget {
), ),
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 14, fontSize: 14,
color: MyTheme.topicColor(IndicatorTopic.economy).shade600, color: Color(0xFF985400),
), ),
), ),
); );
@ -361,7 +361,7 @@ class LoginRoute extends HookConsumerWidget {
6.horizontalSpace, 6.horizontalSpace,
const Icon( const Icon(
Icons.chevron_right_outlined, Icons.chevron_right_outlined,
color: Colors.white, // Set your desired color here color: Colors.white, // Set your desired color here
) )
], ],
), ),
@ -390,7 +390,8 @@ class LoginRoute extends HookConsumerWidget {
validator: (text) { validator: (text) {
if (text == null || text.isEmpty) { if (text == null || text.isEmpty) {
return context.translate('Required', 'مطلوب'); return context.translate('Required', 'مطلوب');
} else if (text.length < 8) { }
else if (text.length < 8) {
return 'The password must be at least 8 characters'; return 'The password must be at least 8 characters';
} }
return FieldValidator.password(minLength: 8)(text); return FieldValidator.password(minLength: 8)(text);
@ -402,6 +403,7 @@ class LoginRoute extends HookConsumerWidget {
imgPath: MiscIconAssetPath.lock, imgPath: MiscIconAssetPath.lock,
controller: pwCtl, controller: pwCtl,
isObscurable: true, isObscurable: true,
), ),
// 6.verticalSpace, // 6.verticalSpace,
Align( Align(
@ -441,7 +443,7 @@ class LoginRoute extends HookConsumerWidget {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
fontSize: 18, fontSize: context.translate(18.0, 14.0),
color: const Color(0xff898C81), color: const Color(0xff898C81),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
@ -480,8 +482,8 @@ class LoginRoute extends HookConsumerWidget {
'سجل الان', 'سجل الان',
), ),
style: TextStyle( style: TextStyle(
color: MyTheme.topicColor(IndicatorTopic.economy).shade600, color: Color(0xFF985400),
), ),
), ),
], ],
), ),
@ -576,7 +578,7 @@ class LoginRoute extends HookConsumerWidget {
dontHaveAnAccountRegisterBtn, dontHaveAnAccountRegisterBtn,
20.verticalSpace, 20.verticalSpace,
// continueAsGuestBtn, // continueAsGuestBtn,
25.verticalSpace, 95.verticalSpace,
fcscBanner, fcscBanner,
], ],
); );

View File

@ -76,6 +76,8 @@ class _EditProfileState extends State<EditProfile> {
dynamic collectionId; dynamic collectionId;
dynamic role; dynamic role;
bool _isHoveringDropdown = false;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -426,13 +428,15 @@ class _EditProfileState extends State<EditProfile> {
body: SingleChildScrollView( body: SingleChildScrollView(
child: Padding( child: Padding(
padding: const EdgeInsets.only(left: 10.0, right: 10.0, top: 3.0), padding: const EdgeInsets.only(left: 10.0, right: 10.0, top: 3.0),
child: Column( child: Column(
children: [ children: [
SingleChildScrollView( SingleChildScrollView(
child: Form( child: Form(
key: _formKey, key: _formKey,
child: Padding( child: Padding(
padding: const EdgeInsets.all(20.0), // padding: const EdgeInsets.all(20.0),
padding: const EdgeInsets.only(top: 20.0,bottom: 20.0, left: 25,right: 25),
child: isPageLoad child: isPageLoad
? Center( ? Center(
child: CircularProgressIndicator(), child: CircularProgressIndicator(),
@ -720,8 +724,16 @@ class _EditProfileState extends State<EditProfile> {
), ),
// hintText: _showHints[3] ? 'Select your Date of Birth' : null, // hintText: _showHints[3] ? 'Select your Date of Birth' : null,
hintStyle: TextStyle(color: Colors.grey), hintStyle: TextStyle(color: Colors.grey),
suffixIcon: suffixIcon: Container(
const Icon(Icons.arrow_drop_down_sharp), width: 45,
padding: EdgeInsets.only(right: 1),
alignment: Alignment.center, // Center the icon vertically
child: Icon(
Icons.keyboard_arrow_down_sharp,
color: Colors.grey,
),
),
enabled: !_isProfileCompleted, enabled: !_isProfileCompleted,
), ),
readOnly: true, readOnly: true,
@ -742,7 +754,10 @@ class _EditProfileState extends State<EditProfile> {
], ],
), ),
SizedBox(height: 10), SizedBox(height: 10),
DropdownButtonFormField<String>( MouseRegion(
onEnter: (_) => setState(() => _isHoveringDropdown = true),
onExit: (_) => setState(() => _isHoveringDropdown = false),
child: DropdownButtonFormField<String>(
value: _selectedCountry, value: _selectedCountry,
decoration: InputDecoration( decoration: InputDecoration(
border: OutlineInputBorder( border: OutlineInputBorder(
@ -750,6 +765,8 @@ class _EditProfileState extends State<EditProfile> {
), ),
labelText: 'Select', labelText: 'Select',
), ),
icon: Icon(Icons.keyboard_arrow_down_sharp,
color: _isHoveringDropdown ? Colors.black : Colors.grey ),
items: _countries items: _countries
.map( .map(
(item) => DropdownMenuItem<String>( (item) => DropdownMenuItem<String>(
@ -764,7 +781,7 @@ class _EditProfileState extends State<EditProfile> {
}); });
}, },
validator: _validateDropdown, validator: _validateDropdown,
), ),),
SizedBox(height: 20), SizedBox(height: 20),
if (!_isProfileCompleted) // Conditional rendering if (!_isProfileCompleted) // Conditional rendering
Column( Column(
@ -809,7 +826,8 @@ class _EditProfileState extends State<EditProfile> {
)! )!
.terms_conditions, .terms_conditions,
style: TextStyle( style: TextStyle(
color: Colors.blue, // color: Colors.blue,
color: Color(0xFF648CBA),
decoration: decoration:
TextDecoration TextDecoration
.underline, .underline,
@ -835,7 +853,8 @@ class _EditProfileState extends State<EditProfile> {
)! )!
.privacy_policy, .privacy_policy,
style: TextStyle( style: TextStyle(
color: Colors.blue, // color: Colors.blue,
color: Color(0xFF648CBA),
decoration: decoration:
TextDecoration TextDecoration
.underline, .underline,
@ -898,25 +917,47 @@ class _EditProfileState extends State<EditProfile> {
AppLocalizations.of(context)! AppLocalizations.of(context)!
.change_password, .change_password,
style: TextStyle( style: TextStyle(
color: Colors.blue, color: Color(0xFF648CBA),
decoration: TextDecoration.underline, fontSize: 14,
fontWeight: FontWeight.w700,
fontFamily: 'Roboto',
// decoration: TextDecoration.underline
), ),
), ),
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
ElevatedButton.icon( // ElevatedButton.icon(
// onPressed: () {
// showConfirmationDialog(context);
// },
// icon: Icon(
// Icons.save,
// color: Colors.white,
// ),
// label: Text(
// AppLocalizations.of(context)!.save,
// style: TextStyle(color: Colors.white),
// ),
// style: ElevatedButton.styleFrom(
// backgroundColor: Color(0xFF92722A),
// minimumSize: Size(double.infinity, 50),
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(8),
// ),
// ),
// ),
ElevatedButton(
onPressed: () { onPressed: () {
showConfirmationDialog(context); if ((_formKey.currentState?.validate() ?? false) && (isChecked)) {
_formKey.currentState?.save();
showConfirmationDialog(context);
} else {
setState(() {
showError = !isChecked; // Show error if the checkbox is not checked
});
}
}, },
icon: Icon(
Icons.save,
color: Colors.white,
),
label: Text(
AppLocalizations.of(context)!.save,
style: TextStyle(color: Colors.white),
),
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A), backgroundColor: Color(0xFF92722A),
minimumSize: Size(double.infinity, 50), minimumSize: Size(double.infinity, 50),
@ -924,7 +965,22 @@ class _EditProfileState extends State<EditProfile> {
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
), ),
), child: Row(
mainAxisAlignment: MainAxisAlignment.center, // Center the content
children: [
Text(
'Save',
style: TextStyle(color: Colors.white),
),
SizedBox(width: 8), // Add space between text and icon
Icon(
Icons.save_outlined,
color: Colors.white,
),
],
),
)
], ],
), ),
), ),

View File

@ -10,6 +10,7 @@ import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:tutorial_coach_mark/tutorial_coach_mark.dart'; import 'package:tutorial_coach_mark/tutorial_coach_mark.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/bottom_bar_asset_icon_path.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart'; import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart'; import 'package:uae_stat/presentation/components/my_toggle.dart';
@ -124,7 +125,7 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
text: AppLocalizations.of(context)!.tour_navBar, text: AppLocalizations.of(context)!.tour_navBar,
alignment: ContentAlign.top, alignment: ContentAlign.top,
space: 0, space: 0,
gap: 105, gap: 100,
), ),
TargetContent( TargetContent(
align: ContentAlign.top, align: ContentAlign.top,
@ -816,29 +817,64 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
type: BottomNavigationBarType.fixed, type: BottomNavigationBarType.fixed,
items: [ items: [
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.home), icon: Padding(
padding: const EdgeInsets.only(bottom: 4), // Adjust this for spacing
child: Image.asset(
BottomBarAssetIconPath.home,
color: _getSelectedIndex(currentRoute) == 0 ? Colors.black : Color(0xFF989898),
width: 20,
height: 20,
),),
// label: 'Home', // label: 'Home',
label: AppLocalizations.of(context)!.nav_home, label: AppLocalizations.of(context)!.nav_home,
), ),
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.map), // icon: Icon(Icons.map),
icon:Padding(
padding: const EdgeInsets.only(bottom: 4), // Adjust this for spacing
child: Image.asset(
BottomBarAssetIconPath.uaeMap,
color: _getSelectedIndex(currentRoute) == 1 ? Colors.black : Color(0xFF989898),
width: 20,
height: 20,
),),
// label: 'UAE Numbers' // label: 'UAE Numbers'
label: AppLocalizations.of(context)!.nav_uae, label: AppLocalizations.of(context)!.nav_uae,
), ),
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.bar_chart), icon: Padding(
// label: 'Competitiveness', padding: const EdgeInsets.only(bottom: 4), // Adjust this for spacing
child: Image.asset(
BottomBarAssetIconPath.ranking,
color: _getSelectedIndex(currentRoute) == 2 ? Colors.black : Color(0xFF989898),
width: 20,
height: 20,
),),
// label: 'Competitiveness',
label: AppLocalizations.of(context)!.nav_competitiveness, label: AppLocalizations.of(context)!.nav_competitiveness,
), ),
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.public), icon: Padding(
// label: 'Country Profile', padding: const EdgeInsets.only(bottom: 4), // Adjust this for spacing
child: Image.asset(
BottomBarAssetIconPath.globe,
color: _getSelectedIndex(currentRoute) == 2 ? Colors.black : Color(0xFF989898),
width: 20,
height: 20,
),),
// label: 'Country Profile',
label: AppLocalizations.of(context)!.country_profile, label: AppLocalizations.of(context)!.country_profile,
), ),
], ],
key: bottomNavKey, key: bottomNavKey,
selectedItemColor: Colors.black, selectedItemColor: Colors.black,
unselectedItemColor: Colors.grey, unselectedItemColor: Colors.grey,
selectedLabelStyle: TextStyle(
fontSize: 10, // Font size for unselected label
),
unselectedLabelStyle: TextStyle(
fontSize: 10, // Font size for unselected label
),
showUnselectedLabels: true, showUnselectedLabels: true,
), ),
body: widget.body, body: widget.body,

View File

@ -5,23 +5,23 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: _fe_analyzer_shared name: _fe_analyzer_shared
sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "72.0.0" version: "76.0.0"
_macros: _macros:
dependency: transitive dependency: transitive
description: dart description: dart
source: sdk source: sdk
version: "0.3.2" version: "0.3.3"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.7.0" version: "6.11.0"
analyzer_plugin: analyzer_plugin:
dependency: transitive dependency: transitive
description: description:
@ -210,10 +210,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.18.0" version: "1.19.0"
connectivity_plus: connectivity_plus:
dependency: "direct main" dependency: "direct main"
description: description:
@ -306,10 +306,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: custom_lint_visitor name: custom_lint_visitor
sha256: "8aeb3b6ae2bb765e7716b93d1d10e8356d04e0ff6d7592de6ee04e0dd7d6587d" sha256: bfe9b7a09c4775a587b58d10ebb871d4fe618237639b1e84d5ec62d7dfef25f9
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.0+6.7.0" version: "1.0.0+6.11.0"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
@ -433,10 +433,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: fl_chart name: fl_chart
sha256: "74959b99b92b9eebeed1a4049426fd67c4abc3c5a0f4d12e2877097d6a11ae08" sha256: "5276944c6ffc975ae796569a826c38a62d2abcf264e26b88fa6f482e107f4237"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.69.2" version: "0.70.2"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -837,18 +837,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.5" version: "10.0.7"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.5" version: "3.0.8"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
@ -877,10 +877,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: macros name: macros
sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.2-main.4" version: "0.1.3-main.0"
mailer: mailer:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1268,7 +1268,7 @@ packages:
dependency: transitive dependency: transitive
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.99" version: "0.0.0"
smart_api_client: smart_api_client:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1352,10 +1352,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.1" version: "1.12.0"
state_notifier: state_notifier:
dependency: transitive dependency: transitive
description: description:
@ -1384,10 +1384,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.0" version: "1.3.0"
syncfusion_flutter_charts: syncfusion_flutter_charts:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1424,10 +1424,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.2" version: "0.7.3"
the_validator: the_validator:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1592,10 +1592,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.2.5" version: "14.3.0"
watcher: watcher:
dependency: transitive dependency: transitive
description: description:

View File

@ -22,7 +22,7 @@ dependencies:
riverpod_annotation: ^2.3.3 riverpod_annotation: ^2.3.3
cupertino_icons: ^1.0.6 cupertino_icons: ^1.0.6
fl_chart: ^0.69.2 fl_chart: ^0.70.2
tutorial_coach_mark: ^1.2.12 tutorial_coach_mark: ^1.2.12
marquee: ^2.2.3 marquee: ^2.2.3
url_launcher: ^6.3.1 url_launcher: ^6.3.1