From 378f4396d852288ec18ac1e3254041688841c67b Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 25 Jul 2024 15:19:10 +0300 Subject: [PATCH 1/8] profile page --- lib/features/menu/bloc/profile_bloc/profile_bloc.dart | 7 +++---- lib/features/menu/view/widgets/profile/profile_view.dart | 4 +--- lib/features/menu/view/widgets/profile/region_page.dart | 8 ++++++-- .../menu/view/widgets/profile/time_zone_screen_page.dart | 6 +++++- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart index 3e7e76e..7fa0889 100644 --- a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart +++ b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart @@ -54,8 +54,7 @@ class ProfileBloc extends Bloc { final lastName = nameParts.length > 1 ? nameParts[1] : ''; var response = await ProfileApi.saveName(firstName: firstName, lastName: lastName); add(InitialProfileEvent()); - final homeCubit = event.context.read(); - await homeCubit.fetchUserInfo(); + await HomeCubit.getInstance().fetchUserInfo(); Navigator.of(event.context).pop(true); CustomSnackBar.displaySnackBar('Save Successfully'); emit(SaveState()); @@ -102,7 +101,6 @@ class ProfileBloc extends Bloc { } } - Future selectTimeZone(SelectTimeZoneEvent event, Emitter emit) async { try { emit(LoadingInitialState()); @@ -135,6 +133,7 @@ class ProfileBloc extends Bloc { return region.name.toLowerCase().contains(query); }).toList() ?? []; regionList = filteredRegions;// Assume this fetches the regions + emit(RegionsLoadedState(regions: filteredRegions)); }else{ regionList = await ProfileApi.fetchRegion(); @@ -243,7 +242,7 @@ class ProfileBloc extends Bloc { if (Platform.isAndroid ) { AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; PermissionStatus status = await Permission.photos.status; - if(androidInfo.version.sdkInt<= 33){ + if(androidInfo.version.sdkInt<33){ if (status.isDenied) { PermissionStatus status = await Permission.storage.request(); if (status.isGranted) { diff --git a/lib/features/menu/view/widgets/profile/profile_view.dart b/lib/features/menu/view/widgets/profile/profile_view.dart index 760bbce..50d6699 100644 --- a/lib/features/menu/view/widgets/profile/profile_view.dart +++ b/lib/features/menu/view/widgets/profile/profile_view.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart'; -import 'package:syncrow_app/features/auth/bloc/auth_cubit.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_bloc.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_event.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_state.dart'; @@ -37,8 +36,7 @@ class ProfileView extends StatelessWidget { ), InkWell( onTap: () { - profileBloc.add( - SelectImageEvent(context: context, isSelected: false)); + profileBloc.add(SelectImageEvent(context: context, isSelected: false)); }, child: SizedBox.square( dimension: 125, diff --git a/lib/features/menu/view/widgets/profile/region_page.dart b/lib/features/menu/view/widgets/profile/region_page.dart index 16fef45..9f84576 100644 --- a/lib/features/menu/view/widgets/profile/region_page.dart +++ b/lib/features/menu/view/widgets/profile/region_page.dart @@ -23,6 +23,11 @@ class RegionPage extends StatelessWidget { ), ); } + if (state is SaveState) { + new Future.delayed(const Duration(milliseconds: 500), () { + Navigator.of(context).pop(true); + }); + } }, builder: (context, state) { final profileBloc = BlocProvider.of(context); @@ -60,8 +65,7 @@ class RegionPage extends StatelessWidget { itemBuilder: (context, index) { return InkWell( onTap: () { - profileBloc.add(SelectRegionEvent( - val: regionList[index].id, context: context)); + profileBloc.add(SelectRegionEvent(val: regionList[index].id, context: context)); }, child: Padding( padding: const EdgeInsets.all(10.0), diff --git a/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart b/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart index fe80b0f..7594b05 100644 --- a/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart +++ b/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart @@ -25,7 +25,11 @@ class TimeZoneScreenPage extends StatelessWidget { backgroundColor: Colors.red, ), ); - } + }if (state is SaveState) { + new Future.delayed(const Duration(milliseconds: 500), () { + Navigator.of(context).pop(true); + }); + } }, builder: (context, state) { final profileBloc = BlocProvider.of(context); From 76b867d4b960524b3cdd55fea151ba2d545ef25b Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 25 Jul 2024 16:19:02 +0300 Subject: [PATCH 2/8] profile page --- .../menu/bloc/profile_bloc/profile_bloc.dart | 38 +++++++++++++++++-- .../view/widgets/profile/profile_view.dart | 38 ++++++++++--------- lib/services/api/profile_api.dart | 3 +- 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart index 7fa0889..91b452b 100644 --- a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart +++ b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart @@ -45,6 +45,7 @@ class ProfileBloc extends Bloc { Future saveName(SaveNameEvent event, Emitter emit) async { if (_validateInputs()) return; try { + add(const ChangeNameEvent(value: false)); isSaving = true; emit(LoadingInitialState()); @@ -55,7 +56,7 @@ class ProfileBloc extends Bloc { var response = await ProfileApi.saveName(firstName: firstName, lastName: lastName); add(InitialProfileEvent()); await HomeCubit.getInstance().fetchUserInfo(); - Navigator.of(event.context).pop(true); + // Navigator.of(event.context).pop(true); CustomSnackBar.displaySnackBar('Save Successfully'); emit(SaveState()); } catch (_) { @@ -229,14 +230,45 @@ class ProfileBloc extends Bloc { + bool _validateInputs() { - if (nameController.text.length < 2) { - CustomSnackBar.displaySnackBar('Name Must More than 2 '); + final nameError = fullNameValidator(nameController.text); + if (nameError != null) { + CustomSnackBar.displaySnackBar(nameError); return true; } return false; } + + String? fullNameValidator(String? value) { + if (value == null) return 'Full name is required'; + + final withoutExtraSpaces = value.replaceAll(RegExp(r"\s+"), ' ').trim(); + + if (withoutExtraSpaces.length < 2 || withoutExtraSpaces.length > 30) { + return 'Full name must be between 2 and 30 characters long'; + } + + // Test if it contains anything but alphanumeric spaces and single quote + + if (RegExp(r"/[^ a-zA-Z0-9-\']/").hasMatch(withoutExtraSpaces)) { + return 'Only alphanumeric characters, space, dash and single quote are allowed'; + } + + final parts = withoutExtraSpaces.split(' '); + + if (parts.length < 2) return 'Full name must contain first and last names'; + + if (parts.length > 3) return 'Full name can at most contain 3 parts'; + + if (parts.any((part) => part.length < 2 || part.length > 30)) { + return 'Full name parts must be between 2 and 30 characters long'; + } + return null; + } + + Future _requestPermission() async { DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); if (Platform.isAndroid ) { diff --git a/lib/features/menu/view/widgets/profile/profile_view.dart b/lib/features/menu/view/widgets/profile/profile_view.dart index 50d6699..22082b5 100644 --- a/lib/features/menu/view/widgets/profile/profile_view.dart +++ b/lib/features/menu/view/widgets/profile/profile_view.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart'; +import 'package:syncrow_app/features/auth/bloc/auth_cubit.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_bloc.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_event.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_state.dart'; @@ -73,23 +74,26 @@ class ProfileView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ IntrinsicWidth( - child: TextFormField( - maxLength: 30, - style: const TextStyle( - color: Colors.black, - ), - textAlign: TextAlign.center, - focusNode: profileBloc.focusNode, - controller: profileBloc.nameController, - enabled: profileBloc.editName, - onEditingComplete: () { - profileBloc.add(SaveNameEvent(context: context)); - }, - decoration: const InputDecoration( - hintText: "Your Name", - border: InputBorder.none, - fillColor: Colors.white10, - counterText: '', // Hides the character count + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 200), + child: TextFormField( + maxLength: 30, + style: const TextStyle( + color: Colors.black, + ), + textAlign: TextAlign.center, + focusNode: profileBloc.focusNode, + controller: profileBloc.nameController, + enabled: profileBloc.editName, + onEditingComplete: () { + profileBloc.add(SaveNameEvent(context: context)); + }, + decoration: const InputDecoration( + hintText: "Your Name", + border: InputBorder.none, + fillColor: Colors.white10, + counterText: '', + ), ), ), ), diff --git a/lib/services/api/profile_api.dart b/lib/services/api/profile_api.dart index 5666923..3b617ce 100644 --- a/lib/services/api/profile_api.dart +++ b/lib/services/api/profile_api.dart @@ -43,6 +43,7 @@ class ProfileApi { rethrow; } } + static Future saveTimeZone({String? regionUuid,}) async { try { final response = await _httpService.put( @@ -99,7 +100,6 @@ class ProfileApi { return response as List; } - static Future> fetchTimeZone() async { final response = await _httpService.get( path: ApiEndpoints.getTimezone, @@ -111,5 +111,4 @@ class ProfileApi { return response as List; } - } From 00199dda90eb0bcaf1df4bfc029ec7a7520b2cfb Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 25 Jul 2024 16:27:09 +0300 Subject: [PATCH 3/8] profile page fix bugs --- lib/features/menu/bloc/profile_bloc/profile_bloc.dart | 4 ++-- lib/features/menu/bloc/profile_bloc/profile_state.dart | 4 ++-- .../menu/{bloc/profile_bloc => model}/region_model.dart | 0 .../menu/{bloc/profile_bloc => model}/time_zone_model.dart | 0 lib/services/api/profile_api.dart | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) rename lib/features/menu/{bloc/profile_bloc => model}/region_model.dart (100%) rename lib/features/menu/{bloc/profile_bloc => model}/time_zone_model.dart (100%) diff --git a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart index 91b452b..d12a9de 100644 --- a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart +++ b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart @@ -7,8 +7,8 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_event.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_state.dart'; -import 'package:syncrow_app/features/menu/bloc/profile_bloc/region_model.dart'; -import 'package:syncrow_app/features/menu/bloc/profile_bloc/time_zone_model.dart'; +import 'package:syncrow_app/features/menu/model/region_model.dart'; +import 'package:syncrow_app/features/menu/model/time_zone_model.dart'; import 'package:syncrow_app/services/api/profile_api.dart'; import 'package:syncrow_app/utils/helpers/snack_bar.dart'; import 'package:image_picker/image_picker.dart'; diff --git a/lib/features/menu/bloc/profile_bloc/profile_state.dart b/lib/features/menu/bloc/profile_bloc/profile_state.dart index 19b1f5c..c5eacb5 100644 --- a/lib/features/menu/bloc/profile_bloc/profile_state.dart +++ b/lib/features/menu/bloc/profile_bloc/profile_state.dart @@ -1,6 +1,6 @@ import 'package:equatable/equatable.dart'; -import 'package:syncrow_app/features/menu/bloc/profile_bloc/region_model.dart'; -import 'package:syncrow_app/features/menu/bloc/profile_bloc/time_zone_model.dart'; +import 'package:syncrow_app/features/menu/model/region_model.dart'; +import 'package:syncrow_app/features/menu/model/time_zone_model.dart'; class ProfileState extends Equatable { const ProfileState(); diff --git a/lib/features/menu/bloc/profile_bloc/region_model.dart b/lib/features/menu/model/region_model.dart similarity index 100% rename from lib/features/menu/bloc/profile_bloc/region_model.dart rename to lib/features/menu/model/region_model.dart diff --git a/lib/features/menu/bloc/profile_bloc/time_zone_model.dart b/lib/features/menu/model/time_zone_model.dart similarity index 100% rename from lib/features/menu/bloc/profile_bloc/time_zone_model.dart rename to lib/features/menu/model/time_zone_model.dart diff --git a/lib/services/api/profile_api.dart b/lib/services/api/profile_api.dart index 3b617ce..c942f68 100644 --- a/lib/services/api/profile_api.dart +++ b/lib/services/api/profile_api.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart'; import 'package:syncrow_app/features/auth/model/user_model.dart'; -import 'package:syncrow_app/features/menu/bloc/profile_bloc/region_model.dart'; -import 'package:syncrow_app/features/menu/bloc/profile_bloc/time_zone_model.dart'; +import 'package:syncrow_app/features/menu/model/region_model.dart'; +import 'package:syncrow_app/features/menu/model/time_zone_model.dart'; import 'package:syncrow_app/services/api/api_links_endpoints.dart'; import 'package:syncrow_app/services/api/http_service.dart'; From b9432c3de39f7bab001bf93b319afaec23e54bd1 Mon Sep 17 00:00:00 2001 From: mohammad Date: Thu, 25 Jul 2024 16:28:46 +0300 Subject: [PATCH 4/8] profile page fix bugs --- lib/features/menu/view/widgets/profile/profile_view.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/features/menu/view/widgets/profile/profile_view.dart b/lib/features/menu/view/widgets/profile/profile_view.dart index 22082b5..4047b89 100644 --- a/lib/features/menu/view/widgets/profile/profile_view.dart +++ b/lib/features/menu/view/widgets/profile/profile_view.dart @@ -46,7 +46,7 @@ class ProfileView extends StatelessWidget { child: SizedBox.square( dimension: 120, child: CircleAvatar( - backgroundColor: Colors.grey, + backgroundColor: Colors.white, backgroundImage: profileBloc.image == null ? null : FileImage(profileBloc.image!), @@ -57,8 +57,8 @@ class ProfileView extends StatelessWidget { child: Image.memory( HomeCubit.user!.profilePicture!, fit: BoxFit.cover, - width: 110, - height: 110, + width: 120, + height: 120, ), ) : null, From 6c5acc3a084a9121d07f1d2f193c43e928f8d059 Mon Sep 17 00:00:00 2001 From: mohammad Date: Sun, 28 Jul 2024 09:12:15 +0300 Subject: [PATCH 5/8] profile page fix bugs --- .../menu/bloc/profile_bloc/profile_bloc.dart | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart index d12a9de..603fe20 100644 --- a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart +++ b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart @@ -15,7 +15,6 @@ import 'package:image_picker/image_picker.dart'; import 'package:permission_handler/permission_handler.dart'; class ProfileBloc extends Bloc { - bool isSaving = false; bool editName = false; final FocusNode focusNode = FocusNode(); @@ -24,7 +23,8 @@ class ProfileBloc extends Bloc { String timeZoneSelected = ''; String regionSelected = ''; final TextEditingController searchController = TextEditingController(); - final TextEditingController nameController = TextEditingController(text: '${HomeCubit.user!.firstName} ${HomeCubit.user!.lastName}'); + final TextEditingController nameController = TextEditingController( + text: '${HomeCubit.user!.firstName} ${HomeCubit.user!.lastName}'); List? timeZoneList; List? regionList; @@ -45,7 +45,6 @@ class ProfileBloc extends Bloc { Future saveName(SaveNameEvent event, Emitter emit) async { if (_validateInputs()) return; try { - add(const ChangeNameEvent(value: false)); isSaving = true; emit(LoadingInitialState()); @@ -56,11 +55,10 @@ class ProfileBloc extends Bloc { var response = await ProfileApi.saveName(firstName: firstName, lastName: lastName); add(InitialProfileEvent()); await HomeCubit.getInstance().fetchUserInfo(); - // Navigator.of(event.context).pop(true); CustomSnackBar.displaySnackBar('Save Successfully'); emit(SaveState()); - } catch (_) { - // Handle the error + } catch (e) { + emit(FailedState(errorMessage: e.toString())); } finally { isSaving = false; } @@ -133,8 +131,7 @@ class ProfileBloc extends Bloc { final filteredRegions = regionList?.where((region) { return region.name.toLowerCase().contains(query); }).toList() ?? []; - regionList = filteredRegions;// Assume this fetches the regions - + regionList = filteredRegions; emit(RegionsLoadedState(regions: filteredRegions)); }else{ regionList = await ProfileApi.fetchRegion(); From 9162dd1033baa236db4e1af1c6b63cafa03d9071 Mon Sep 17 00:00:00 2001 From: mohammad Date: Sun, 28 Jul 2024 10:42:29 +0300 Subject: [PATCH 6/8] profile page fix bugs --- .../view/widgets/profile/profile_view.dart | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/features/menu/view/widgets/profile/profile_view.dart b/lib/features/menu/view/widgets/profile/profile_view.dart index 4047b89..bac4502 100644 --- a/lib/features/menu/view/widgets/profile/profile_view.dart +++ b/lib/features/menu/view/widgets/profile/profile_view.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart'; -import 'package:syncrow_app/features/auth/bloc/auth_cubit.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_bloc.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_event.dart'; import 'package:syncrow_app/features/menu/bloc/profile_bloc/profile_state.dart'; @@ -115,18 +114,30 @@ class ProfileView extends StatelessWidget { ), ), const SizedBox(height: 10), - // Info DefaultContainer( padding: const EdgeInsets.symmetric( horizontal: 25, vertical: 5, ), - child: - - Column( + child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, children: [ + Padding( + padding: const EdgeInsets.only(top: 20, bottom: 20), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const BodyMedium(text: 'email '), + Flexible(child: BodyMedium(text: HomeCubit.user!.email ?? 'No Email')), + ], + ), + ), + Container( + height: 1, + color: ColorsManager.greyColor, + ), + InkWell( onTap: () { Navigator.push( From 9502c745540e1e60672dfb20083170e8e1fe929d Mon Sep 17 00:00:00 2001 From: mohammad Date: Sun, 28 Jul 2024 11:12:06 +0300 Subject: [PATCH 7/8] profile page fix bugs --- .../view/widgets/profile/region_page.dart | 24 ++++----- .../profile/time_zone_screen_page.dart | 51 +++++++++---------- 2 files changed, 36 insertions(+), 39 deletions(-) diff --git a/lib/features/menu/view/widgets/profile/region_page.dart b/lib/features/menu/view/widgets/profile/region_page.dart index 9f84576..6a5ae74 100644 --- a/lib/features/menu/view/widgets/profile/region_page.dart +++ b/lib/features/menu/view/widgets/profile/region_page.dart @@ -60,39 +60,37 @@ class RegionPage extends StatelessWidget { topRight: Radius.circular(20), ), ), - child: ListView.builder( + child:Padding( + padding: const EdgeInsets.only(bottom: 10.0,top: 10.0,left: 15,right: 15), + child: ListView.builder( itemCount: regionList.length, itemBuilder: (context, index) { return InkWell( onTap: () { profileBloc.add(SelectRegionEvent(val: regionList[index].id, context: context)); }, - child: Padding( - padding: const EdgeInsets.all(10.0), - child: Column( + child:Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), + padding: const EdgeInsets.symmetric(horizontal: 10,), child: SizedBox( - height: 45, child: ListTile( contentPadding: EdgeInsets.zero, - // trailing: BodyMedium( - // text: regionList[index].offset, - // fontSize: 13, - // fontColor: ColorsManager.textGray,), leading: BodyMedium( fontSize: 15, - text: regionList[index].name,),), + text: regionList[index].name, + ), + ), ), ), const Divider(color: ColorsManager.textGray), // Divider between items ], ), - ), ); }, - ), + )), ), ), ], diff --git a/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart b/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart index 7594b05..6fd50b0 100644 --- a/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart +++ b/lib/features/menu/view/widgets/profile/time_zone_screen_page.dart @@ -62,41 +62,40 @@ class TimeZoneScreenPage extends StatelessWidget { topRight: Radius.circular(20), ), ), - child: ListView.builder( + child: Padding( + padding: const EdgeInsets.only(bottom: 10.0,top: 10.0,left: 15,right: 15), + child: ListView.builder( itemCount: timeZoneList.length, itemBuilder: (context, index) { return InkWell( onTap: () { - profileBloc.add(SelectTimeZoneEvent( - val: timeZoneList[index].id, - context: context)); + profileBloc.add(SelectTimeZoneEvent(val: timeZoneList[index].id, context: context)); }, - child: Padding( - padding: const EdgeInsets.all(10.0), - child: Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: SizedBox( - height: 45, - child: ListTile( - contentPadding: EdgeInsets.zero, - trailing: BodyMedium( - text: timeZoneList[index].offset, - fontSize: 13, - fontColor: ColorsManager.textGray,), - leading: BodyMedium( - fontSize: 15, - text: timeZoneList[index].name,),), - ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10,), + child: SizedBox( + height: 45, + child: ListTile( + contentPadding: EdgeInsets.zero, + trailing: BodyMedium( + text: timeZoneList[index].offset, + fontSize: 13, + fontColor: ColorsManager.textGray,), + leading: BodyMedium( + fontSize: 15, + text: timeZoneList[index].name,),), ), - const Divider(color: ColorsManager.textGray), // Divider between items - ], - ), + ), + const Divider(color: ColorsManager.textGray), // Divider between items + ], ), ); }, - ), + )), ), ), ], From 38d571a2c9d6eda447983f0ef3c77a57dcb7a08a Mon Sep 17 00:00:00 2001 From: mohammad Date: Sun, 28 Jul 2024 11:20:28 +0300 Subject: [PATCH 8/8] profile page fix bugs --- .../view/widgets/profile/profile_tab.dart | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/lib/features/menu/view/widgets/profile/profile_tab.dart b/lib/features/menu/view/widgets/profile/profile_tab.dart index 19c091a..d3e2dd3 100644 --- a/lib/features/menu/view/widgets/profile/profile_tab.dart +++ b/lib/features/menu/view/widgets/profile/profile_tab.dart @@ -20,7 +20,7 @@ class ProfileTab extends StatelessWidget { Widget _buildProfileContent(BuildContext context) { final homeCubit = context.read(); return Padding( - padding: const EdgeInsets.symmetric(vertical: 10), + padding: const EdgeInsets.symmetric(vertical: 10,), child: InkWell( onTap: () { Navigator.of(context) @@ -39,23 +39,27 @@ class ProfileTab extends StatelessWidget { children: [ const SizedBox(height: 20), DefaultContainer( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - BodyMedium( - text: '${HomeCubit.user!.firstName ?? ''} ', - fontWeight: FontWeight.bold, - ), - BodyMedium( - text: HomeCubit.user!.lastName ?? '', - fontWeight: FontWeight.bold, - ), - ], - ), - const BodySmall(text: "Syncrow Account"), - ], + child: Padding( + padding: const EdgeInsets.all(10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + BodyMedium( + text: '${HomeCubit.user!.firstName ?? ''} ', + fontWeight: FontWeight.bold, + ), + BodyMedium( + text: HomeCubit.user!.lastName ?? '', + fontWeight: FontWeight.bold, + ), + ], + ), + SizedBox(height: 5,), + const BodySmall(text: "Syncrow Account"), + ], + ), ), ), ],