diff --git a/lib/logic/cubit/client_jobs/client_jobs_cubit.dart b/lib/logic/cubit/client_jobs/client_jobs_cubit.dart index dacdcc29..d3330d7a 100644 --- a/lib/logic/cubit/client_jobs/client_jobs_cubit.dart +++ b/lib/logic/cubit/client_jobs/client_jobs_cubit.dart @@ -24,14 +24,10 @@ class JobsCubit extends Cubit { final ServicesCubit servicesCubit; void addJob(final ClientJob job) { - final List newJobsList = []; - if (state is JobsStateWithJobs) { - final JobsStateWithJobs jobsState = state as JobsStateWithJobs; - newJobsList.addAll(jobsState.clientJobList); - } - newJobsList.add(job); - getIt().showSnackBar('jobs.job_added'.tr()); - emit(JobsStateWithJobs(newJobsList)); + _updateJobsState([ + ...currentJobList, + ...[job] + ]); } void removeJob(final String id) { @@ -58,17 +54,28 @@ class JobsCubit extends Cubit { } } - void createShhJobIfNotExist(final CreateSSHKeyJob job) { - final List newJobsList = []; + List get currentJobList { + final List jobs = []; if (state is JobsStateWithJobs) { - newJobsList.addAll((state as JobsStateWithJobs).clientJobList); + jobs.addAll((state as JobsStateWithJobs).clientJobList); } - final bool isExistInJobList = - newJobsList.any((final el) => el is CreateSSHKeyJob); - if (!isExistInJobList) { - newJobsList.add(job); - getIt().showSnackBar('jobs.job_added'.tr()); - emit(JobsStateWithJobs(newJobsList)); + + return jobs; + } + + void _updateJobsState(final List newJobs) { + getIt().showSnackBar('jobs.job_added'.tr()); + emit(JobsStateWithJobs(newJobs)); + } + + void addUniqueJob(final J job) { + final List jobs = currentJobList; + final bool exists = jobs.any((final el) => el is J); + if (!exists) { + _updateJobsState([ + ...jobs, + ...[job] + ]); } } diff --git a/lib/ui/pages/server_details/server_settings.dart b/lib/ui/pages/server_details/server_settings.dart index f669dce0..ffeed77f 100644 --- a/lib/ui/pages/server_details/server_settings.dart +++ b/lib/ui/pages/server_details/server_settings.dart @@ -10,7 +10,6 @@ class _ServerSettings extends StatefulWidget { class _ServerSettingsState extends State<_ServerSettings> { bool? allowAutoUpgrade; bool? rebootAfterUpgrade; - bool? didSomethingChange; @override Widget build(final BuildContext context) { @@ -25,18 +24,14 @@ class _ServerSettingsState extends State<_ServerSettings> { rebootAfterUpgrade = serverDetailsState.autoUpgradeSettings.allowReboot; } - didSomethingChange ??= false; - return Column( children: [ SwitchListTile( value: allowAutoUpgrade ?? false, onChanged: (final switched) { - if (didSomethingChange == false) { - context.read().addJob( - RebuildServerJob(title: 'jobs.upgrade_server'.tr()), - ); - } + context.read().addUniqueJob( + RebuildServerJob(title: 'jobs.upgrade_server'.tr()), + ); context .read() .repository @@ -48,7 +43,6 @@ class _ServerSettingsState extends State<_ServerSettings> { ); setState(() { allowAutoUpgrade = switched; - didSomethingChange = true; }); }, title: Text('server.allow_autoupgrade'.tr()), @@ -60,11 +54,9 @@ class _ServerSettingsState extends State<_ServerSettings> { SwitchListTile( value: rebootAfterUpgrade ?? false, onChanged: (final switched) { - if (didSomethingChange == false) { - context.read().addJob( - RebuildServerJob(title: 'jobs.upgrade_server'.tr()), - ); - } + context.read().addUniqueJob( + RebuildServerJob(title: 'jobs.upgrade_server'.tr()), + ); context .read() .repository @@ -76,7 +68,6 @@ class _ServerSettingsState extends State<_ServerSettings> { ); setState(() { rebootAfterUpgrade = switched; - didSomethingChange = true; }); }, title: Text('server.reboot_after_upgrade'.tr()), @@ -91,14 +82,9 @@ class _ServerSettingsState extends State<_ServerSettings> { serverDetailsState.serverTimezone.toString(), ), onTap: () { - if (didSomethingChange == false) { - context.read().addJob( - RebuildServerJob(title: 'jobs.upgrade_server'.tr()), - ); - } - setState(() { - didSomethingChange = true; - }); + context.read().addUniqueJob( + RebuildServerJob(title: 'jobs.upgrade_server'.tr()), + ); Navigator.of(context).push( materialRoute( const SelectTimezone(),