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": "أوافق على الشروط والأحكام وسياسة الخصوصية للمركز الإتحادي للتنافسية والإحصاء",
"t_and": "",
"conditions": "",
"terms_conditions": "",
"privacy_policy":"",
"terms_conditions": "الشروط والأحكام",
"privacy_policy":"سياسة الخصوصية",
"account_confirmation": "هل لديك حساب؟ سجل الدخول",
"login_title": "تسجيل الدخول",

View File

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

View File

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

View File

@ -474,7 +474,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
),
)
: 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(
key: _formKey,
@ -503,12 +503,12 @@ class _RegisterScreenState extends State<RegisterScreen> {
? AppLocalizations.of(context)!.register_name
: null,
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(
MiscIconAssetPath.person,
color: Color(0xFF90B0D5),
width: 24,
height: 24,
width: 25,
height: 15,
),
),
@ -520,15 +520,20 @@ class _RegisterScreenState extends State<RegisterScreen> {
// border: OutlineInputBorder(),
enabledBorder: OutlineInputBorder(
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(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
),
errorBorder: OutlineInputBorder(
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: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
@ -550,26 +555,31 @@ class _RegisterScreenState extends State<RegisterScreen> {
: null,
// _showHints[1] ? 'Enter your email' : null,
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(
MiscIconAssetPath.vector,
color: Color(0xFF90B0D5),
width: 24,
height: 24,
width: 25,
height: 15,
),
),
// border: OutlineInputBorder(),
enabledBorder: OutlineInputBorder(
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(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
),
errorBorder: OutlineInputBorder(
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: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
@ -594,12 +604,12 @@ class _RegisterScreenState extends State<RegisterScreen> {
: null,
// _showHints[2] ? 'Enter your password' : null,
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(
MiscIconAssetPath.lock,
color: Color(0xFF90B0D5),
width: 24,
height: 24,
width: 25,
height: 15,
),
),
// prefixIcon: Icon(
@ -634,16 +644,22 @@ class _RegisterScreenState extends State<RegisterScreen> {
// border: OutlineInputBorder(),
enabledBorder: OutlineInputBorder(
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(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
),
errorBorder: OutlineInputBorder(
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: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
),
@ -663,12 +679,12 @@ class _RegisterScreenState extends State<RegisterScreen> {
: null,
// _showHints[3] ? 'Confirm password' : null,
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(
MiscIconAssetPath.lock,
color: Color(0xFF90B0D5),
width: 24,
height: 24,
width: 25,
height: 15,
),
),
suffixIcon: IconButton(
@ -694,15 +710,20 @@ class _RegisterScreenState extends State<RegisterScreen> {
// ),
enabledBorder: OutlineInputBorder(
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(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(color: Colors.deepPurple, width: 2), // Focused border
),
errorBorder: OutlineInputBorder(
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: '',
hintStyle: TextStyle(color: Color(0xFFC3C6CB)),
@ -727,8 +748,8 @@ class _RegisterScreenState extends State<RegisterScreen> {
});
},
side: BorderSide(
color: showError ? Colors.red : Color(0xFF92722A),
width: 1.5,
color: showError ? Color(0xFFD83731) : Color(0xFF92722A),
width: 1,
),
),
Expanded(
@ -741,16 +762,25 @@ class _RegisterScreenState extends State<RegisterScreen> {
text: AppLocalizations.of(context)!
.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(
text: AppLocalizations.of(context)!
.t_and),
TextSpan(
text: AppLocalizations.of(context)!
.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(
text: AppLocalizations.of(context)!
.conditions),
@ -769,7 +799,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
child: Text(
'Please agree to terms and conditions.',
style: TextStyle(
color: Colors.red[700],
color: Color(0xFFb22222),
fontSize: 12,
),
),
@ -778,7 +808,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
),
SizedBox(height: 20),
SizedBox(
width: screenwidth / 1.3,
width: screenwidth / 1,
child: ElevatedButton(
onPressed: isRegistering ? null : _registerUser,
style: ElevatedButton.styleFrom(
@ -807,15 +837,15 @@ class _RegisterScreenState extends State<RegisterScreen> {
),
),
),
SizedBox(height: 10),
SizedBox(height: 15),
Text(
AppLocalizations.of(context)!.account_confirmation,
style: TextStyle(
fontSize: 16, color: Colors.grey[600]),
),
SizedBox(height: 10),
SizedBox(height: 15),
SizedBox(
width: screenwidth / 1.3,
width: screenwidth / 1,
child: ElevatedButton(
onPressed: () {
context.go('/');

View File

@ -1295,15 +1295,22 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
});
selectedFiltersStorage.clear();
Navigator.pop(context);
},
},
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 12), // Added padding
horizontal: 0.0, vertical: 14.2), // Added padding
child: Text(
context.translate('Clear', 'واضح'),
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontSize: 13,
fontWeight: FontWeight.bold,
),
overflow:
@ -1311,12 +1318,6 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
maxLines: 1, // Ensures single line
),
),
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
),
),
SizedBox(width: 16),
@ -1334,9 +1335,15 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
selectedFilters);
selectedFiltersStorage = List.from(selectedFilters);
},
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFF92722A),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 12), // Added padding
horizontal: 0.0, vertical: 16.0), // Added padding
child: FittedBox(
fit: BoxFit
.scaleDown, // Ensures text resizes if necessary
@ -1345,7 +1352,7 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
'Apply Filter', 'تطبيق الفلتر'),
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontSize: 12,
fontWeight: FontWeight.bold,
),
overflow:
@ -1353,13 +1360,7 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
maxLines: 1, // Ensures single line
),
),
),
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)
final RegExp _nameRegExp = RegExp(r"^[a-zA-Z\s]+$");
late Future<RecordModel> userDetails;
bool _isHoveringDate = false;
bool _isHoveringDropdown = false;
@override
void initState() {
@ -368,7 +370,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
child: Form(
key: _formKey,
child: Padding(
padding: const EdgeInsets.all(20.0),
padding: const EdgeInsets.only(top: 20.0,bottom: 20.0, left: 25,right: 25),
child: Column(
children: [
// CircleAvatar(
@ -539,7 +541,10 @@ class _ProfileScreenState extends State<ProfileScreen> {
],
),
SizedBox(height: 10),
TextFormField(
MouseRegion(
onEnter: (_) => setState(() => _isHoveringDate = true),
onExit: (_) => setState(() => _isHoveringDate = false),
child: TextFormField(
controller: _dateController,
focusNode: _focusNodes[3],
decoration: InputDecoration(
@ -549,12 +554,22 @@ class _ProfileScreenState extends State<ProfileScreen> {
hintText: _showHints[3] ? 'DD/MM/YYYY' : null,
//_showHints[3] ? 'Select your Date of Birth' : null,
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,
onTap: _pickDate,
validator: _validateDob,
),
),),
SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.start,
@ -567,7 +582,10 @@ class _ProfileScreenState extends State<ProfileScreen> {
],
),
SizedBox(height: 10),
DropdownButtonFormField<String>(
MouseRegion(
onEnter: (_) => setState(() => _isHoveringDropdown = true),
onExit: (_) => setState(() => _isHoveringDropdown = false),
child: DropdownButtonFormField<String>(
value: _selectedCountry,
decoration: InputDecoration(
border: OutlineInputBorder(
@ -575,6 +593,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
),
labelText: 'Select',
),
icon: Icon(Icons.keyboard_arrow_down_sharp,
color: _isHoveringDropdown ? Colors.black : Colors.grey ),
items: _countries
.map((item) => DropdownMenuItem<String>(
value: item,
@ -587,7 +607,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
});
},
validator: _validateDropdown,
),
),),
SizedBox(height: 20),
Row(
children: [
@ -600,8 +620,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
});
},
side: BorderSide(
color: showError ? Colors.red : Colors.grey,
width: 1.5,
color: showError ? Color(0xFFb22222) : Color(0xFF92722A),
width: 1,
),
),
Expanded(
@ -620,8 +640,11 @@ class _ProfileScreenState extends State<ProfileScreen> {
TextSpan(
text: 'Terms & Conditions',
style: TextStyle(
color: Colors.blue,
color: Color(0xFF648CBA),
decoration: TextDecoration.underline,
fontWeight: FontWeight.bold, // Makes the text bold
decorationColor: Color(0xFF648CBA),
decorationThickness: 1,
),
recognizer: TapGestureRecognizer()
..onTap = () {
@ -635,8 +658,12 @@ class _ProfileScreenState extends State<ProfileScreen> {
TextSpan(
text: 'Privacy Policy',
style: TextStyle(
color: Colors.blue,
color: Color(0xFF648CBA),
decoration: TextDecoration.underline,
fontWeight: FontWeight.bold, // Makes the text bold
decorationColor: Color(0xFF648CBA),
decorationThickness: 1,
),
recognizer: TapGestureRecognizer()
..onTap = () {
@ -668,7 +695,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
child: Text(
'Please agree to terms and conditions',
style: TextStyle(
color: Colors.red[700],
color: Color(0xFFb22222),
fontSize: 12,
),
),
@ -685,53 +712,30 @@ class _ProfileScreenState extends State<ProfileScreen> {
context.go('/createNewPw/$userId/$email');
},
child: Text(
"Change Password",
'Change Password',
style: TextStyle(
color: Colors.blue,
decoration: TextDecoration.underline),
color: Color(0xFF648CBA),
fontSize: 14,
fontWeight: FontWeight.w700,
fontFamily: 'Roboto',
// decoration: TextDecoration.underline),
),
),
),
),
SizedBox(height: 20),
ElevatedButton.icon(
// ElevatedButton.icon(
ElevatedButton(
onPressed: () {
if ((_formKey.currentState?.validate() ?? false) &&
(isChecked)) {
if ((_formKey.currentState?.validate() ?? false) && (isChecked)) {
_formKey.currentState?.save();
showConfirmationDialog(context);
} else {
setState(() {
showError =
!isChecked; // Show error if the checkbox is not checked
showError = !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(
backgroundColor: Color(0xFF92722A),
minimumSize: Size(double.infinity, 50),
@ -739,7 +743,22 @@ class _ProfileScreenState extends State<ProfileScreen> {
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 boxDecoration = BoxDecoration(
borderRadius: BorderRadius.circular(10),
boxShadow: [
BoxShadow(
offset: const Offset(0, 1),
blurRadius: 2,
color: Colors.black.withOpacity(0.1),
),
],
// boxShadow: [
// BoxShadow(
// offset: const Offset(0, 1),
// blurRadius: 2,
// color: Colors.black.withOpacity(0.1),
// ),
// ],
);
final obscureBtn = IconButton(
onPressed: () => isObscured.value = !isObscured.value,

View File

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

View File

@ -76,6 +76,8 @@ class _EditProfileState extends State<EditProfile> {
dynamic collectionId;
dynamic role;
bool _isHoveringDropdown = false;
@override
void initState() {
super.initState();
@ -426,13 +428,15 @@ class _EditProfileState extends State<EditProfile> {
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.only(left: 10.0, right: 10.0, top: 3.0),
child: Column(
children: [
SingleChildScrollView(
child: Form(
key: _formKey,
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
? Center(
child: CircularProgressIndicator(),
@ -720,8 +724,16 @@ class _EditProfileState extends State<EditProfile> {
),
// hintText: _showHints[3] ? 'Select your Date of Birth' : null,
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: Colors.grey,
),
),
enabled: !_isProfileCompleted,
),
readOnly: true,
@ -742,7 +754,10 @@ class _EditProfileState extends State<EditProfile> {
],
),
SizedBox(height: 10),
DropdownButtonFormField<String>(
MouseRegion(
onEnter: (_) => setState(() => _isHoveringDropdown = true),
onExit: (_) => setState(() => _isHoveringDropdown = false),
child: DropdownButtonFormField<String>(
value: _selectedCountry,
decoration: InputDecoration(
border: OutlineInputBorder(
@ -750,6 +765,8 @@ class _EditProfileState extends State<EditProfile> {
),
labelText: 'Select',
),
icon: Icon(Icons.keyboard_arrow_down_sharp,
color: _isHoveringDropdown ? Colors.black : Colors.grey ),
items: _countries
.map(
(item) => DropdownMenuItem<String>(
@ -764,7 +781,7 @@ class _EditProfileState extends State<EditProfile> {
});
},
validator: _validateDropdown,
),
),),
SizedBox(height: 20),
if (!_isProfileCompleted) // Conditional rendering
Column(
@ -809,7 +826,8 @@ class _EditProfileState extends State<EditProfile> {
)!
.terms_conditions,
style: TextStyle(
color: Colors.blue,
// color: Colors.blue,
color: Color(0xFF648CBA),
decoration:
TextDecoration
.underline,
@ -835,7 +853,8 @@ class _EditProfileState extends State<EditProfile> {
)!
.privacy_policy,
style: TextStyle(
color: Colors.blue,
// color: Colors.blue,
color: Color(0xFF648CBA),
decoration:
TextDecoration
.underline,
@ -898,25 +917,47 @@ class _EditProfileState extends State<EditProfile> {
AppLocalizations.of(context)!
.change_password,
style: TextStyle(
color: Colors.blue,
decoration: TextDecoration.underline,
color: Color(0xFF648CBA),
fontSize: 14,
fontWeight: FontWeight.w700,
fontFamily: 'Roboto',
// decoration: TextDecoration.underline
),
),
),
),
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: () {
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(
backgroundColor: Color(0xFF92722A),
minimumSize: Size(double.infinity, 50),
@ -924,7 +965,22 @@ class _EditProfileState extends State<EditProfile> {
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:flutter_gen/gen_l10n/app_localizations.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/my_toggle.dart';
@ -124,7 +125,7 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
text: AppLocalizations.of(context)!.tour_navBar,
alignment: ContentAlign.top,
space: 0,
gap: 105,
gap: 100,
),
TargetContent(
align: ContentAlign.top,
@ -816,29 +817,64 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
type: BottomNavigationBarType.fixed,
items: [
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: AppLocalizations.of(context)!.nav_home,
),
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: AppLocalizations.of(context)!.nav_uae,
),
BottomNavigationBarItem(
icon: Icon(Icons.bar_chart),
// label: 'Competitiveness',
icon: Padding(
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,
),
BottomNavigationBarItem(
icon: Icon(Icons.public),
// label: 'Country Profile',
icon: Padding(
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,
),
],
key: bottomNavKey,
selectedItemColor: Colors.black,
unselectedItemColor: Colors.grey,
selectedLabelStyle: TextStyle(
fontSize: 10, // Font size for unselected label
),
unselectedLabelStyle: TextStyle(
fontSize: 10, // Font size for unselected label
),
showUnselectedLabels: true,
),
body: widget.body,

View File

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

View File

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