diff --git a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart index 112b7c0..640527b 100644 --- a/lib/features/menu/bloc/profile_bloc/profile_bloc.dart +++ b/lib/features/menu/bloc/profile_bloc/profile_bloc.dart @@ -24,8 +24,10 @@ class ProfileBloc extends Bloc { String regionSelected = ''; final TextEditingController searchController = TextEditingController(); final TextEditingController nameController = TextEditingController(text: '${HomeCubit.user!.firstName} ${HomeCubit.user!.lastName}'); - List? timeZoneList; - List? regionList; + + + List allRegions = []; + List allTimeZone = []; ProfileBloc() : super(InitialState()) { @@ -90,9 +92,9 @@ class ProfileBloc extends Bloc { Future _fetchTimeZone(TimeZoneInitialEvent event, Emitter emit) async { emit(LoadingInitialState()); try { - timeZoneList = await ProfileApi.fetchTimeZone(); - emit(UpdateState(timeZoneList: timeZoneList!)); - return timeZoneList; + allTimeZone = await ProfileApi.fetchTimeZone(); + emit(TimeZoneLoadedState(timezone: allTimeZone)); + return allTimeZone; } catch (e) { emit(FailedState(errorMessage: e.toString())); return; @@ -123,33 +125,36 @@ class ProfileBloc extends Bloc { } } - Future searchRegion(SearchRegionEvent event, Emitter emit) async { + + Future searchRegion(SearchRegionEvent event, Emitter emit) async { emit(LoadingInitialState()); final query = event.query.toLowerCase(); - if(event.query.isNotEmpty){ - final filteredRegions = regionList?.where((region) { + if (allRegions.isEmpty) { + allRegions = await ProfileApi.fetchRegion(); + } + if (query.isNotEmpty) { + final filteredRegions = allRegions.where((region) { return region.name.toLowerCase().contains(query); - }).toList() ?? []; - regionList = filteredRegions; + }).toList(); emit(RegionsLoadedState(regions: filteredRegions)); - }else{ - regionList = await ProfileApi.fetchRegion(); - emit(RegionsLoadedState(regions: regionList!)); + } else { + emit(RegionsLoadedState(regions: allRegions)); } } - Future searchTimeZone(SearchTimeZoneEvent event, Emitter emit) async { + Future searchTimeZone(SearchTimeZoneEvent event, Emitter emit) async { emit(LoadingInitialState()); final query = event.query.toLowerCase(); - if(event.query.isNotEmpty){ - final filtered = timeZoneList?.where((region) { + if (allTimeZone.isEmpty) { + allTimeZone = await ProfileApi.fetchTimeZone(); + } + if (query.isNotEmpty) { + final filteredRegions = allTimeZone.where((region) { return region.name.toLowerCase().contains(query); - }).toList() ?? []; - timeZoneList = filtered; - emit(TimeZoneLoadedState(regions: filtered)); - }else{ - timeZoneList = await ProfileApi.fetchTimeZone(); - emit(UpdateState(timeZoneList: timeZoneList!)); + }).toList(); + emit(TimeZoneLoadedState(timezone: filteredRegions)); + } else { + emit(TimeZoneLoadedState(timezone: allTimeZone)); } } @@ -157,9 +162,8 @@ class ProfileBloc extends Bloc { void _fetchRegion(RegionInitialEvent event, Emitter emit) async { try { emit(LoadingInitialState()); - - regionList = await ProfileApi.fetchRegion(); - emit(RegionsLoadedState(regions: regionList!)); + allRegions = await ProfileApi.fetchRegion(); + emit(RegionsLoadedState(regions: allRegions)); } catch (e) { emit(FailedState(errorMessage: e.toString())); } diff --git a/lib/features/menu/bloc/profile_bloc/profile_state.dart b/lib/features/menu/bloc/profile_bloc/profile_state.dart index c5eacb5..f98b1bb 100644 --- a/lib/features/menu/bloc/profile_bloc/profile_state.dart +++ b/lib/features/menu/bloc/profile_bloc/profile_state.dart @@ -51,7 +51,7 @@ class RegionsLoadedState extends ProfileState { } class TimeZoneLoadedState extends ProfileState { - final List regions; + final List timezone; - const TimeZoneLoadedState({required this.regions}); + const TimeZoneLoadedState({required this.timezone}); } \ No newline at end of file diff --git a/lib/features/menu/view/widgets/profile/region_page.dart b/lib/features/menu/view/widgets/profile/region_page.dart index 0212cb2..5f1a0f1 100644 --- a/lib/features/menu/view/widgets/profile/region_page.dart +++ b/lib/features/menu/view/widgets/profile/region_page.dart @@ -9,7 +9,6 @@ import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; class RegionPage extends StatelessWidget { const RegionPage({super.key}); - @override Widget build(BuildContext context) { return BlocProvider( @@ -29,7 +28,7 @@ class RegionPage extends StatelessWidget { }, builder: (context, state) { final profileBloc = BlocProvider.of(context); - final regionList = profileBloc.regionList ?? []; // Safeguard against null + final regionList = state is RegionsLoadedState ? state.regions : []; return DefaultScaffold( padding: const EdgeInsets.all(0), title: 'Region', 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 747d89f..9aac6cf 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 @@ -15,60 +15,60 @@ class TimeZoneScreenPage extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( - create: (BuildContext context) => ProfileBloc()..add(TimeZoneInitialEvent()), - child: - BlocConsumer(listener: (context, state) { - if (state is FailedState) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(state.errorMessage), - backgroundColor: Colors.red, + create: (BuildContext context) => ProfileBloc()..add(TimeZoneInitialEvent()), + child: BlocConsumer(listener: (context, state) { + if (state is FailedState) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(state.errorMessage), + backgroundColor: Colors.red, ), ); - }if (state is SaveState) { - Navigator.of(context).pop(true); + } + if (state is SaveState) { + Navigator.of(context).pop(true); } - }, - builder: (context, state) { + }, + builder: (context, state) { final profileBloc = BlocProvider.of(context); - final timeZoneList = profileBloc.timeZoneList ?? []; // Safeguard against null - return DefaultScaffold( - padding: const EdgeInsets.all(0), - title: 'Time Zone', - child: state is LoadingInitialState - ? const Center(child: CircularProgressIndicator()) - : Column( - children: [ - TextFormField( - controller:profileBloc.searchController , - onChanged: (value) { - profileBloc.add(SearchTimeZoneEvent(query: value)); - }, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.search), - hintText: 'Search', - fillColor: ColorsManager.textGray, + final timeZoneList = state is TimeZoneLoadedState ?state.timezone : []; + return DefaultScaffold( + padding: const EdgeInsets.all(0), + title: 'Time Zone', + child: state is LoadingInitialState + ? const Center(child: CircularProgressIndicator()) + : Column( + children: [ + TextFormField( + controller:profileBloc.searchController , + onChanged: (value) { + profileBloc.add(SearchTimeZoneEvent(query: value)); + }, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.search), + hintText: 'Search', + fillColor: ColorsManager.textGray, + ), + ), + const SizedBox(height: 10), + Expanded( + child: Container( + decoration: const BoxDecoration( + color: ColorsManager.onPrimaryColor, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), ), ), - const SizedBox(height: 10), - Expanded( - child: Container( - decoration: const BoxDecoration( - color: ColorsManager.onPrimaryColor, - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - ), - ), - child: Padding( - padding: const EdgeInsets.only(bottom: 10.0,top: 10.0,left: 15,right: 15), - 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)); - }, + }, child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, @@ -84,7 +84,7 @@ class TimeZoneScreenPage extends StatelessWidget { fontSize: 13, fontColor: ColorsManager.textGray,), leading: BodyMedium( - fontSize: 15, + fontSize: 13, text: timeZoneList[index].name,),), ), ), @@ -99,7 +99,7 @@ class TimeZoneScreenPage extends StatelessWidget { ], ), ); - }) + }) ); } }