Skip to content
Snippets Groups Projects
Commit 400eb874 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Use ActivityParameters widgets from flutter_custom_toolbox

parent 72da20ff
No related branches found
No related tags found
1 merge request!29Resolve "Use ActivityParameters widgets from flutter_custom_toolbox"
Pipeline #7058 passed
This commit is part of merge request !29. Comments created here will be created in the context of that merge request.
Showing
with 105 additions and 346 deletions
Use ActivityParameters widgets from flutter_custom_toolbox.
Utilisation des widgets ActivityParameters de flutter_custom_toolbox.
......@@ -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);
}
},
);
}
}
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();
},
);
}
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 [];
}
}
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 [];
}
}
......@@ -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();
......
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,
};
}
}
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,
];
}
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,
};
}
}
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,
];
}
......@@ -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
......
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
......
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,
};
}
}
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,
};
}
}
......@@ -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:
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment