From 400eb874fa7b78a552c46ee7eb1909cb41de5382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Fri, 15 Nov 2024 15:38:04 +0100 Subject: [PATCH] Use ActivityParameters widgets from flutter_custom_toolbox --- .../metadata/android/en-US/changelogs/27.txt | 1 + .../metadata/android/fr-FR/changelogs/27.txt | 1 + lib/common/config/activity_page.dart | 39 ++++++++--- lib/config/application_config.dart | 46 ++++++++++++- lib/config/default_activity_settings.dart | 32 --------- lib/config/default_global_settings.dart | 28 -------- lib/cubit/activity/activity_cubit.dart | 16 +++-- .../settings/settings_activity_cubit.dart | 62 ----------------- .../settings/settings_activity_state.dart | 15 ----- lib/cubit/settings/settings_global_cubit.dart | 67 ------------------- lib/cubit/settings/settings_global_state.dart | 15 ----- lib/main.dart | 9 +-- lib/models/activity/activity.dart | 21 +++--- lib/models/settings/settings_activity.dart | 42 ------------ lib/models/settings/settings_global.dart | 47 ------------- pubspec.lock | 6 +- pubspec.yaml | 4 +- 17 files changed, 105 insertions(+), 346 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/27.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/27.txt delete mode 100644 lib/config/default_activity_settings.dart delete mode 100644 lib/config/default_global_settings.dart delete mode 100644 lib/cubit/settings/settings_activity_cubit.dart delete mode 100644 lib/cubit/settings/settings_activity_state.dart delete mode 100644 lib/cubit/settings/settings_global_cubit.dart delete mode 100644 lib/cubit/settings/settings_global_state.dart delete mode 100644 lib/models/settings/settings_activity.dart delete mode 100644 lib/models/settings/settings_global.dart diff --git a/fastlane/metadata/android/en-US/changelogs/27.txt b/fastlane/metadata/android/en-US/changelogs/27.txt new file mode 100644 index 0000000..c20ed39 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/27.txt @@ -0,0 +1 @@ +Use ActivityParameters widgets from flutter_custom_toolbox. diff --git a/fastlane/metadata/android/fr-FR/changelogs/27.txt b/fastlane/metadata/android/fr-FR/changelogs/27.txt new file mode 100644 index 0000000..f732ebd --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/27.txt @@ -0,0 +1 @@ +Utilisation des widgets ActivityParameters de flutter_custom_toolbox. diff --git a/lib/common/config/activity_page.dart b/lib/common/config/activity_page.dart index 5b8b165..1c1c3db 100644 --- a/lib/common/config/activity_page.dart +++ b/lib/common/config/activity_page.dart @@ -5,15 +5,18 @@ import 'package:plotter/common/ui/pages/home.dart'; import 'package:plotter/common/ui/pages/player.dart'; import 'package:plotter/common/ui/pages/remote_control.dart'; +import 'package:plotter/cubit/activity/activity_cubit.dart'; +import 'package:plotter/models/activity/activity.dart'; + class ActivityPageItem { final String code; final Icon icon; - final Widget page; + final Widget Function({required Activity currentActivity})? builder; const ActivityPageItem({ required this.code, required this.icon, - required this.page, + required this.builder, }); } @@ -21,27 +24,33 @@ class ActivityPage { static const bool displayBottomNavBar = true; static const indexHome = 0; - static const pageHome = ActivityPageItem( + static final ActivityPageItem pageHome = ActivityPageItem( code: 'page_home', icon: Icon(UniconsLine.home), - page: PageHome(), + builder: ({required Activity currentActivity}) { + return PageHome(); + }, ); static const indexPlayer = 1; - static const pagePlayer = ActivityPageItem( + static final ActivityPageItem pagePlayer = ActivityPageItem( code: 'page_player', icon: Icon(UniconsLine.star), - page: PagePlayer(), + builder: ({required Activity currentActivity}) { + return PagePlayer(); + }, ); static const indexRemoteControl = 2; - static const pageRemoteControl = ActivityPageItem( + static final ActivityPageItem pageRemoteControl = ActivityPageItem( code: 'page_remote_control', icon: Icon(UniconsLine.star), - page: PageRemoteControl(), + builder: ({required Activity currentActivity}) { + return PageRemoteControl(); + }, ); - static const Map<int, ActivityPageItem> items = { + static final Map<int, ActivityPageItem> items = { indexHome: pageHome, indexPlayer: pagePlayer, indexRemoteControl: pageRemoteControl, @@ -54,6 +63,16 @@ class ActivityPage { } static Widget getWidget(int pageIndex) { - return items[pageIndex]?.page ?? pageHome.page; + return BlocBuilder<ActivityCubit, ActivityState>( + builder: (BuildContext context, ActivityState activityState) { + final Activity currentActivity = activityState.currentActivity; + + if (items.keys.contains(pageIndex)) { + return items[pageIndex]?.builder!(currentActivity: currentActivity) ?? Text('oups'); + } else { + return getWidget(defaultPageIndex); + } + }, + ); } } diff --git a/lib/config/application_config.dart b/lib/config/application_config.dart index 81de9d3..51f1ec7 100644 --- a/lib/config/application_config.dart +++ b/lib/config/application_config.dart @@ -1,3 +1,47 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; + +import 'package:plotter/common/cubit/nav/nav_cubit_pages.dart'; + +import 'package:plotter/cubit/activity/activity_cubit.dart'; + class ApplicationConfig { - static const String appTitle = 'Stepper plotter assistant'; + // plotter type + static const String parameterCodePlotterType = 'plotterType'; + static const String plotterTypeNone = 'none'; + static const String plotterTypeRadial = 'radial'; + static const String plotterTypeAxial = 'axial'; + + static final ApplicationConfigDefinition config = ApplicationConfigDefinition( + appTitle: 'Stepper plotter assistant', + activitySettings: [ + // plotter type + ApplicationSettingsParameter( + code: parameterCodePlotterType, + values: [ + ApplicationSettingsParameterItemValue( + value: plotterTypeNone, + isDefault: true, + ), + ApplicationSettingsParameterItemValue( + value: plotterTypeRadial, + ), + ApplicationSettingsParameterItemValue( + value: plotterTypeAxial, + ), + ], + ), + ], + startNewActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).startNewActivity(context); + BlocProvider.of<NavCubitPage>(context).goToPageHome(); + }, + deleteCurrentActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).deleteSavedActivity(); + }, + resumeActivity: (BuildContext context) { + BlocProvider.of<ActivityCubit>(context).resumeSavedActivity(); + BlocProvider.of<NavCubitPage>(context).goToPageHome(); + }, + ); } diff --git a/lib/config/default_activity_settings.dart b/lib/config/default_activity_settings.dart deleted file mode 100644 index 3f4d852..0000000 --- a/lib/config/default_activity_settings.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -class DefaultActivitySettings { - // available game parameters codes - static const String parameterCodePlotterType = 'plotterType'; - static const List<String> availableParameters = [ - parameterCodePlotterType, - ]; - - // plotter type: available values - static const String plotterTypeNone = 'none'; - static const String plotterTypeRadial = 'radial'; - static const String plotterTypeAxial = 'axial'; - static const List<String> allowedPlotterTypeValues = [ - plotterTypeNone, - plotterTypeRadial, - plotterTypeAxial, - ]; - // items count: default value - static const String defaultPlotterTypeValue = plotterTypeNone; - - // available values from parameter code - static List<String> getAvailableValues(String parameterCode) { - switch (parameterCode) { - case parameterCodePlotterType: - return DefaultActivitySettings.allowedPlotterTypeValues; - } - - printlog('Did not find any available value for game parameter "$parameterCode".'); - return []; - } -} diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart deleted file mode 100644 index d92229c..0000000 --- a/lib/config/default_global_settings.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -class DefaultGlobalSettings { - // available global parameters codes - static const String parameterCodeSkin = 'skin'; - static const List<String> availableParameters = [ - parameterCodeSkin, - ]; - - // skin: available values - static const String skinValueDefault = 'default'; - static const List<String> allowedSkinValues = [ - skinValueDefault, - ]; - // skin: default value - static const String defaultSkinValue = skinValueDefault; - - // available values from parameter code - static List<String> getAvailableValues(String parameterCode) { - switch (parameterCode) { - case parameterCodeSkin: - return DefaultGlobalSettings.allowedSkinValues; - } - - printlog('Did not find any available value for global parameter "$parameterCode".'); - return []; - } -} diff --git a/lib/cubit/activity/activity_cubit.dart b/lib/cubit/activity/activity_cubit.dart index cca3910..473b3d4 100644 --- a/lib/cubit/activity/activity_cubit.dart +++ b/lib/cubit/activity/activity_cubit.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:plotter/models/activity/activity.dart'; -import 'package:plotter/models/settings/settings_global.dart'; part 'activity_state.dart'; @@ -21,7 +20,7 @@ class ActivityCubit extends HydratedCubit<ActivityState> { void refresh() { final Activity activity = Activity( // Settings - globalSettings: state.currentActivity.globalSettings, + activitySettings: state.currentActivity.activitySettings, // State isRunning: state.currentActivity.isRunning, // Base data @@ -34,12 +33,13 @@ class ActivityCubit extends HydratedCubit<ActivityState> { updateState(activity); } - void startNewActivity({ - required GlobalSettings globalSettings, - }) { + void startNewActivity(BuildContext context) { + final ActivitySettingsCubit activitySettingsCubit = + BlocProvider.of<ActivitySettingsCubit>(context); + final Activity newActivity = Activity.createNew( // Settings - globalSettings: globalSettings, + activitySettings: activitySettingsCubit.state.settings, ); newActivity.dump(); @@ -48,6 +48,10 @@ class ActivityCubit extends HydratedCubit<ActivityState> { refresh(); } + bool canBeResumed() { + return state.currentActivity.canBeResumed; + } + void quitActivity() { state.currentActivity.isRunning = false; refresh(); diff --git a/lib/cubit/settings/settings_activity_cubit.dart b/lib/cubit/settings/settings_activity_cubit.dart deleted file mode 100644 index a3d1c72..0000000 --- a/lib/cubit/settings/settings_activity_cubit.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:plotter/config/default_activity_settings.dart'; -import 'package:plotter/models/settings/settings_activity.dart'; - -part 'settings_activity_state.dart'; - -class ActivitySettingsCubit extends HydratedCubit<ActivitySettingsState> { - ActivitySettingsCubit() - : super(ActivitySettingsState(settings: ActivitySettings.createDefault())); - - void setValues({ - String? plotterType, - }) { - emit( - ActivitySettingsState( - settings: ActivitySettings( - plotterType: plotterType ?? state.settings.plotterType, - ), - ), - ); - } - - String getParameterValue(String code) { - switch (code) { - case DefaultActivitySettings.parameterCodePlotterType: - return ActivitySettings.getPlotterTypeValueFromUnsafe(state.settings.plotterType); - } - - return ''; - } - - void setParameterValue(String code, String value) { - final String plotterType = code == DefaultActivitySettings.parameterCodePlotterType - ? value - : getParameterValue(DefaultActivitySettings.parameterCodePlotterType); - - setValues( - plotterType: plotterType, - ); - } - - @override - ActivitySettingsState? fromJson(Map<String, dynamic> json) { - final String plotterType = - json[DefaultActivitySettings.parameterCodePlotterType] as String; - - return ActivitySettingsState( - settings: ActivitySettings( - plotterType: plotterType, - ), - ); - } - - @override - Map<String, dynamic>? toJson(ActivitySettingsState state) { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodePlotterType: state.settings.plotterType, - }; - } -} diff --git a/lib/cubit/settings/settings_activity_state.dart b/lib/cubit/settings/settings_activity_state.dart deleted file mode 100644 index 2b2de42..0000000 --- a/lib/cubit/settings/settings_activity_state.dart +++ /dev/null @@ -1,15 +0,0 @@ -part of 'settings_activity_cubit.dart'; - -@immutable -class ActivitySettingsState extends Equatable { - const ActivitySettingsState({ - required this.settings, - }); - - final ActivitySettings settings; - - @override - List<dynamic> get props => <dynamic>[ - settings, - ]; -} diff --git a/lib/cubit/settings/settings_global_cubit.dart b/lib/cubit/settings/settings_global_cubit.dart deleted file mode 100644 index dfe550e..0000000 --- a/lib/cubit/settings/settings_global_cubit.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:plotter/config/default_global_settings.dart'; -import 'package:plotter/models/settings/settings_global.dart'; - -part 'settings_global_state.dart'; - -class GlobalSettingsCubit extends HydratedCubit<GlobalSettingsState> { - GlobalSettingsCubit() : super(GlobalSettingsState(settings: GlobalSettings.createDefault())); - - void setValues({ - String? skin, - String? apiHost, - }) { - emit( - GlobalSettingsState( - settings: GlobalSettings( - skin: skin ?? state.settings.skin, - apiHost: apiHost ?? state.settings.apiHost, - ), - ), - ); - } - - String getParameterValue(String code) { - switch (code) { - case DefaultGlobalSettings.parameterCodeSkin: - return GlobalSettings.getSkinValueFromUnsafe(state.settings.skin); - case 'apiHost': - return state.settings.apiHost; - } - return ''; - } - - void setParameterValue(String code, String value) { - final String skin = (code == DefaultGlobalSettings.parameterCodeSkin) - ? value - : getParameterValue(DefaultGlobalSettings.parameterCodeSkin); - final String apiHost = (code == 'apiHost') ? value : getParameterValue('apiHost'); - - setValues( - skin: skin, - apiHost: apiHost, - ); - } - - @override - GlobalSettingsState? fromJson(Map<String, dynamic> json) { - final String skin = json[DefaultGlobalSettings.parameterCodeSkin] as String; - final String apiHost = json['apiHost'] as String; - - return GlobalSettingsState( - settings: GlobalSettings( - skin: skin, - apiHost: apiHost, - ), - ); - } - - @override - Map<String, dynamic>? toJson(GlobalSettingsState state) { - return <String, dynamic>{ - DefaultGlobalSettings.parameterCodeSkin: state.settings.skin, - }; - } -} diff --git a/lib/cubit/settings/settings_global_state.dart b/lib/cubit/settings/settings_global_state.dart deleted file mode 100644 index ebcddd7..0000000 --- a/lib/cubit/settings/settings_global_state.dart +++ /dev/null @@ -1,15 +0,0 @@ -part of 'settings_global_cubit.dart'; - -@immutable -class GlobalSettingsState extends Equatable { - const GlobalSettingsState({ - required this.settings, - }); - - final GlobalSettings settings; - - @override - List<dynamic> get props => <dynamic>[ - settings, - ]; -} diff --git a/lib/main.dart b/lib/main.dart index 3fb2ddd..d6396af 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,8 +9,6 @@ import 'package:plotter/common/cubit/nav/nav_cubit_screens.dart'; import 'package:plotter/config/application_config.dart'; import 'package:plotter/cubit/activity/activity_cubit.dart'; -import 'package:plotter/cubit/settings/settings_activity_cubit.dart'; -import 'package:plotter/cubit/settings/settings_global_cubit.dart'; import 'package:plotter/ui/skeleton.dart'; void main() async { @@ -56,17 +54,14 @@ class MyApp extends StatelessWidget { BlocProvider<ActivityCubit>( create: (context) => ActivityCubit(), ), - BlocProvider<GlobalSettingsCubit>( - create: (context) => GlobalSettingsCubit(), - ), BlocProvider<ActivitySettingsCubit>( - create: (context) => ActivitySettingsCubit(), + create: (context) => ActivitySettingsCubit(appConfig: ApplicationConfig.config), ), ], child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>( builder: (BuildContext context, ApplicationThemeModeState state) { return MaterialApp( - title: ApplicationConfig.appTitle, + title: ApplicationConfig.config.appTitle, home: const SkeletonScreen(), // Theme stuff diff --git a/lib/models/activity/activity.dart b/lib/models/activity/activity.dart index 1c0058e..55f95f8 100644 --- a/lib/models/activity/activity.dart +++ b/lib/models/activity/activity.dart @@ -1,11 +1,11 @@ import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; -import 'package:plotter/models/settings/settings_global.dart'; +import 'package:plotter/config/application_config.dart'; class Activity { Activity({ // Settings - required this.globalSettings, + required this.activitySettings, // State this.isRunning = false, @@ -18,7 +18,7 @@ class Activity { }); // Settings - final GlobalSettings globalSettings; + final ActivitySettings activitySettings; // State bool isRunning; @@ -32,20 +32,21 @@ class Activity { factory Activity.createNull() { return Activity( // Settings - globalSettings: GlobalSettings.createDefault(), + activitySettings: ActivitySettings.createDefault(appConfig: ApplicationConfig.config), // Base data apiHost: '', ); } factory Activity.createNew({ - GlobalSettings? globalSettings, + ActivitySettings? activitySettings, }) { - final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault(); + final ActivitySettings newActivitySettings = activitySettings ?? + ActivitySettings.createDefault(appConfig: ApplicationConfig.config); return Activity( // Settings - globalSettings: newGlobalSettings, + activitySettings: newActivitySettings, // State isRunning: true, // Base data @@ -53,13 +54,15 @@ class Activity { ); } + bool get canBeResumed => false; + void dump() { printlog(''); printlog('## Current activity dump:'); printlog(''); printlog('$Activity:'); printlog(' Settings'); - globalSettings.dump(); + activitySettings.dump(); printlog(' State'); printlog(' isRunning: $isRunning'); printlog(' Base data'); @@ -77,7 +80,7 @@ class Activity { Map<String, dynamic>? toJson() { return <String, dynamic>{ // Settings - 'globalSettings': globalSettings.toJson(), + 'activitySettings': activitySettings.toJson(), // State 'isRunning': isRunning, // Base data diff --git a/lib/models/settings/settings_activity.dart b/lib/models/settings/settings_activity.dart deleted file mode 100644 index 4b85637..0000000 --- a/lib/models/settings/settings_activity.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:plotter/config/default_activity_settings.dart'; - -class ActivitySettings { - final String plotterType; - - ActivitySettings({ - required this.plotterType, - }); - - static String getPlotterTypeValueFromUnsafe(String plotterType) { - if (DefaultActivitySettings.allowedPlotterTypeValues.contains(plotterType)) { - return plotterType; - } - - return DefaultActivitySettings.defaultPlotterTypeValue; - } - - factory ActivitySettings.createDefault() { - return ActivitySettings( - plotterType: DefaultActivitySettings.defaultPlotterTypeValue, - ); - } - - void dump() { - printlog('$ActivitySettings:'); - printlog(' ${DefaultActivitySettings.parameterCodePlotterType}: $plotterType'); - printlog(''); - } - - @override - String toString() { - return '$ActivitySettings(${toJson()})'; - } - - Map<String, dynamic>? toJson() { - return <String, dynamic>{ - DefaultActivitySettings.parameterCodePlotterType: plotterType, - }; - } -} diff --git a/lib/models/settings/settings_global.dart b/lib/models/settings/settings_global.dart deleted file mode 100644 index 040dfe6..0000000 --- a/lib/models/settings/settings_global.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; - -import 'package:plotter/config/default_global_settings.dart'; - -class GlobalSettings { - String skin; - String apiHost; - - GlobalSettings({ - required this.skin, - required this.apiHost, - }); - - static String getSkinValueFromUnsafe(String skin) { - if (DefaultGlobalSettings.allowedSkinValues.contains(skin)) { - return skin; - } - - return DefaultGlobalSettings.defaultSkinValue; - } - - factory GlobalSettings.createDefault() { - return GlobalSettings( - skin: DefaultGlobalSettings.defaultSkinValue, - apiHost: '', - ); - } - - void dump() { - printlog('$GlobalSettings:'); - printlog(' ${DefaultGlobalSettings.parameterCodeSkin}: $skin'); - printlog(' apiHost: $apiHost'); - printlog(''); - } - - @override - String toString() { - return '$GlobalSettings(${toJson()})'; - } - - Map<String, dynamic>? toJson() { - return <String, dynamic>{ - DefaultGlobalSettings.parameterCodeSkin: skin, - 'apiHost': apiHost, - }; - } -} diff --git a/pubspec.lock b/pubspec.lock index 9203cf6..d8427bb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -122,11 +122,11 @@ packages: dependency: "direct main" description: path: "." - ref: "0.4.0" - resolved-ref: eb9c090bd00d73324eab8737f74b3339cc24c9e8 + ref: "0.5.0" + resolved-ref: b8164a50489ba981ea57d9f02e2334f09cb8c6a7 url: "https://git.harrault.fr/android/flutter-toolbox.git" source: git - version: "0.4.0" + version: "0.5.0" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 2a79f1b..1ef2828 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A plotter helper application. publish_to: "none" -version: 0.3.2+26 +version: 0.4.0+27 environment: sdk: "^3.0.0" @@ -16,7 +16,7 @@ dependencies: flutter_custom_toolbox: git: url: https://git.harrault.fr/android/flutter-toolbox.git - ref: 0.4.0 + ref: 0.5.0 # specific http: ^1.1.0 -- GitLab