Merge pull request #38 from SyncrowIOT/profile_bugs

Profile bugs
This commit is contained in:
Abdullah
2024-07-29 12:38:45 +03:00
committed by GitHub
4 changed files with 11 additions and 23 deletions
@@ -23,8 +23,7 @@ class ProfileBloc extends Bloc<ProfileEvent, ProfileState> {
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<TimeZone>? timeZoneList;
List<RegionModel>? regionList;
@@ -158,6 +157,7 @@ class ProfileBloc extends Bloc<ProfileEvent, ProfileState> {
void _fetchRegion(RegionInitialEvent event, Emitter<ProfileState> emit) async {
try {
emit(LoadingInitialState());
regionList = await ProfileApi.fetchRegion();
emit(RegionsLoadedState(regions: regionList!));
} catch (e) {
@@ -240,25 +240,17 @@ class ProfileBloc extends Bloc<ProfileEvent, ProfileState> {
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.length > 2) return 'Full name can at most contain 2 parts';
if (parts.any((part) => part.length < 2 || part.length > 30)) {
return 'Full name parts must be between 2 and 30 characters long';
}
@@ -17,7 +17,6 @@ class ProfileView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) => ProfileBloc()..add(InitialProfileEvent()),
child: BlocConsumer<ProfileBloc, ProfileState>(
@@ -137,9 +136,9 @@ class ProfileView extends StatelessWidget {
height: 1,
color: ColorsManager.greyColor,
),
InkWell(
onTap: () {
profileBloc.add(const ChangeNameEvent(value: false));
Navigator.push(
context,
MaterialPageRoute(
@@ -166,6 +165,7 @@ class ProfileView extends StatelessWidget {
),
InkWell(
onTap: () {
profileBloc.add(const ChangeNameEvent(value: false));
Navigator.push(
context,
MaterialPageRoute(
@@ -24,9 +24,7 @@ class RegionPage extends StatelessWidget {
);
}
if (state is SaveState) {
new Future.delayed(const Duration(milliseconds: 500), () {
Navigator.of(context).pop(true);
});
Navigator.of(context).pop(true);
}
},
builder: (context, state) {
@@ -17,7 +17,7 @@ class TimeZoneScreenPage extends StatelessWidget {
return BlocProvider(
create: (BuildContext context) => ProfileBloc()..add(TimeZoneInitialEvent()),
child:
BlocConsumer<ProfileBloc, ProfileState>(listener: (context, state) {
BlocConsumer<ProfileBloc, ProfileState>(listener: (context, state) {
if (state is FailedState) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
@@ -26,10 +26,8 @@ class TimeZoneScreenPage extends StatelessWidget {
),
);
}if (state is SaveState) {
new Future.delayed(const Duration(milliseconds: 500), () {
Navigator.of(context).pop(true);
});
}
Navigator.of(context).pop(true);
}
},
builder: (context, state) {
final profileBloc = BlocProvider.of<ProfileBloc>(context);
@@ -38,8 +36,8 @@ class TimeZoneScreenPage extends StatelessWidget {
padding: const EdgeInsets.all(0),
title: 'Time Zone',
child: state is LoadingInitialState
? const Center(child: CircularProgressIndicator())
: Column(
? const Center(child: CircularProgressIndicator())
: Column(
children: [
TextFormField(
controller:profileBloc.searchController ,