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

Merge branch '74-normalize-activity-application-architecture' into 'master'

Resolve "Normalize Activity application architecture"

Closes #74

See merge request !70
parents fdd2f5e2 db07fd49
No related branches found
No related tags found
1 merge request!70Resolve "Normalize Activity application architecture"
Pipeline #6792 passed
Showing
with 232 additions and 89 deletions
Normalize Activity application architecture.
Harmonisation des applications en Activity.
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:ionicons/ionicons.dart'; import 'package:ionicons/ionicons.dart';
import 'package:scrobbles/ui/pages/discoveries.dart'; import 'package:scrobbles/common/ui/pages/discoveries.dart';
import 'package:scrobbles/ui/pages/home.dart'; import 'package:scrobbles/common/ui/pages/home.dart';
import 'package:scrobbles/ui/pages/statistics.dart'; import 'package:scrobbles/common/ui/pages/statistics.dart';
class ActivityPageItem { class ActivityPageItem {
final String code;
final Icon icon; final Icon icon;
final Widget page; final Widget page;
final String code;
const ActivityPageItem({ const ActivityPageItem({
required this.code,
required this.icon, required this.icon,
required this.page, required this.page,
required this.code,
}); });
} }
class ActivityPage { class ActivityPage {
static const bool displayBottomNavBar = false;
static const indexHome = 0; static const indexHome = 0;
static const pageHome = ActivityPageItem( static const pageHome = ActivityPageItem(
code: 'page_home',
icon: Icon(Ionicons.home_outline), icon: Icon(Ionicons.home_outline),
page: PageHome(), page: PageHome(),
code: 'page_home',
); );
static const indexDiscoveries = 1; static const indexDiscoveries = 1;
static const pageDiscoveries = ActivityPageItem( static const pageDiscoveries = ActivityPageItem(
code: 'page_discoveries',
icon: Icon(Ionicons.star_outline), icon: Icon(Ionicons.star_outline),
page: PageDiscoveries(), page: PageDiscoveries(),
code: 'page_discoveries',
); );
static const indexStatistics = 2; static const indexStatistics = 2;
static const pageStatistics = ActivityPageItem( static const pageStatistics = ActivityPageItem(
code: 'page_statistics',
icon: Icon(Ionicons.bar_chart_outline), icon: Icon(Ionicons.bar_chart_outline),
page: PageStatistics(), page: PageStatistics(),
code: 'page_statistics',
); );
static Map<int, ActivityPageItem> items = { static Map<int, ActivityPageItem> items = {
...@@ -45,17 +47,13 @@ class ActivityPage { ...@@ -45,17 +47,13 @@ class ActivityPage {
indexStatistics: pageStatistics, indexStatistics: pageStatistics,
}; };
static int defaultPageIndex = indexHome;
static bool isIndexAllowed(int pageIndex) { static bool isIndexAllowed(int pageIndex) {
return items.keys.contains(pageIndex); return items.keys.contains(pageIndex);
} }
static ActivityPageItem getPageItem(int pageIndex) { static Widget getWidget(int pageIndex) {
return items[pageIndex] ?? pageHome;
}
static Widget getPageWidget(int pageIndex) {
return items[pageIndex]?.page ?? pageHome.page; return items[pageIndex]?.page ?? pageHome.page;
} }
static int itemsCount = ActivityPage.items.length;
} }
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/ui/screens/about.dart'; import 'package:scrobbles/common/ui/screens/about.dart';
import 'package:scrobbles/ui/screens/activity.dart'; import 'package:scrobbles/common/ui/screens/activity.dart';
import 'package:scrobbles/ui/screens/settings.dart'; import 'package:scrobbles/common/ui/screens/settings.dart';
class ScreenItem { class ScreenItem {
final String code;
final Icon icon; final Icon icon;
final Widget screen; final Widget screen;
final bool displayBottomNavBar;
const ScreenItem({ const ScreenItem({
required this.code,
required this.icon, required this.icon,
required this.screen, required this.screen,
required this.displayBottomNavBar,
}); });
} }
class Screen { class Screen {
static const indexActivity = 0; static const indexActivity = 0;
static const screenActivity = ScreenItem( static const screenActivity = ScreenItem(
code: 'screen_activity',
icon: Icon(UniconsLine.home), icon: Icon(UniconsLine.home),
screen: ScreenActivity(), screen: ScreenActivity(),
displayBottomNavBar: true,
); );
static const indexSettings = 1; static const indexSettings = 1;
static const screenSettings = ScreenItem( static const screenSettings = ScreenItem(
code: 'screen_settings',
icon: Icon(UniconsLine.setting), icon: Icon(UniconsLine.setting),
screen: ScreenSettings(), screen: ScreenSettings(),
displayBottomNavBar: false,
); );
static const indexAbout = 2; static const indexAbout = 2;
static const screenAbout = ScreenItem( static const screenAbout = ScreenItem(
code: 'screen_about',
icon: Icon(UniconsLine.info_circle), icon: Icon(UniconsLine.info_circle),
screen: ScreenAbout(), screen: ScreenAbout(),
displayBottomNavBar: false,
); );
static Map<int, ScreenItem> items = { static Map<int, ScreenItem> items = {
...@@ -52,10 +52,4 @@ class Screen { ...@@ -52,10 +52,4 @@ class Screen {
static Widget getWidget(int screenIndex) { static Widget getWidget(int screenIndex) {
return items[screenIndex]?.screen ?? screenActivity.screen; return items[screenIndex]?.screen ?? screenActivity.screen;
} }
static bool displayBottomNavBar(int screenIndex) {
return items[screenIndex]?.displayBottomNavBar ?? screenActivity.displayBottomNavBar;
}
static int itemsCount = Screen.items.length;
} }
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/config/activity_page.dart'; import 'package:scrobbles/common/config/activity_page.dart';
class NavCubitPage extends HydratedCubit<int> { class NavCubitPage extends HydratedCubit<int> {
NavCubitPage() : super(0); NavCubitPage() : super(0);
...@@ -13,8 +13,8 @@ class NavCubitPage extends HydratedCubit<int> { ...@@ -13,8 +13,8 @@ class NavCubitPage extends HydratedCubit<int> {
} }
} }
void goToHomePage() { void goToPageHome() {
emit(ActivityPage.indexHome); updateIndex(ActivityPage.indexHome);
} }
@override @override
...@@ -24,6 +24,6 @@ class NavCubitPage extends HydratedCubit<int> { ...@@ -24,6 +24,6 @@ class NavCubitPage extends HydratedCubit<int> {
@override @override
Map<String, dynamic>? toJson(int state) { Map<String, dynamic>? toJson(int state) {
return <String, int>{'pageIndex': state}; return <String, int>{'index': state};
} }
} }
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/config/screen.dart'; import 'package:scrobbles/common/config/screen.dart';
class NavCubitScreen extends HydratedCubit<int> { class NavCubitScreen extends HydratedCubit<int> {
NavCubitScreen() : super(0); NavCubitScreen() : super(0);
...@@ -9,19 +9,19 @@ class NavCubitScreen extends HydratedCubit<int> { ...@@ -9,19 +9,19 @@ class NavCubitScreen extends HydratedCubit<int> {
if (Screen.isIndexAllowed(index)) { if (Screen.isIndexAllowed(index)) {
emit(index); emit(index);
} else { } else {
goToActivityPage(); goToScreenActivity();
} }
} }
void goToActivityPage() { void goToScreenActivity() {
emit(Screen.indexActivity); emit(Screen.indexActivity);
} }
void goToSettingsPage() { void goToScreenSettings() {
emit(Screen.indexSettings); emit(Screen.indexSettings);
} }
void goToAboutPage() { void goToScreenAbout() {
emit(Screen.indexAbout); emit(Screen.indexAbout);
} }
...@@ -32,6 +32,6 @@ class NavCubitScreen extends HydratedCubit<int> { ...@@ -32,6 +32,6 @@ class NavCubitScreen extends HydratedCubit<int> {
@override @override
Map<String, dynamic>? toJson(int state) { Map<String, dynamic>? toJson(int state) {
return <String, int>{'screenIndex': state}; return <String, int>{'index': state};
} }
} }
...@@ -2,13 +2,16 @@ import 'package:flutter/material.dart'; ...@@ -2,13 +2,16 @@ import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:flutter_swipe/flutter_swipe.dart'; import 'package:flutter_swipe/flutter_swipe.dart';
import 'package:scrobbles/config/activity_page.dart'; import 'package:scrobbles/common/config/activity_page.dart';
import 'package:scrobbles/cubit/nav_cubit_pages.dart'; import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart';
class BottomNavBar extends StatelessWidget { class BottomNavBar extends StatelessWidget {
const BottomNavBar({super.key, required this.swipeController}); const BottomNavBar({
super.key,
this.swipeController,
});
final SwiperController swipeController; final SwiperController? swipeController;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -20,23 +23,20 @@ class BottomNavBar extends StatelessWidget { ...@@ -20,23 +23,20 @@ class BottomNavBar extends StatelessWidget {
shape: const ContinuousRectangleBorder(), shape: const ContinuousRectangleBorder(),
child: BlocBuilder<NavCubitPage, int>( child: BlocBuilder<NavCubitPage, int>(
builder: (BuildContext context, int pageIndex) { builder: (BuildContext context, int pageIndex) {
final List<ActivityPageItem> pageItems = [ final List<BottomNavigationBarItem> items = [];
ActivityPage.pageHome,
ActivityPage.pageDiscoveries, ActivityPage.items.forEach((int pageIndex, ActivityPageItem item) {
ActivityPage.pageStatistics, items.add(BottomNavigationBarItem(
];
final List<BottomNavigationBarItem> items = pageItems.map((ActivityPageItem item) {
return BottomNavigationBarItem(
icon: item.icon, icon: item.icon,
label: tr(item.code), label: tr(item.code),
); ));
}).toList(); });
return BottomNavigationBar( return BottomNavigationBar(
currentIndex: pageIndex, currentIndex: pageIndex,
onTap: (int index) { onTap: (int index) {
BlocProvider.of<NavCubitPage>(context).updateIndex(index); BlocProvider.of<NavCubitPage>(context).updateIndex(index);
swipeController.move(index); swipeController?.move(index);
}, },
type: BottomNavigationBarType.fixed, type: BottomNavigationBarType.fixed,
elevation: 0, elevation: 0,
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart'; import 'package:scrobbles/common/config/screen.dart';
import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart'; import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart';
import 'package:scrobbles/cubit/data_discoveries_cubit.dart'; import 'package:scrobbles/common/cubit/nav/nav_cubit_screens.dart';
import 'package:scrobbles/cubit/data_heatmap_cubit.dart';
import 'package:scrobbles/cubit/data_new_artists_cubit.dart'; import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart';
import 'package:scrobbles/cubit/data_new_tracks_cubit.dart'; import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart';
import 'package:scrobbles/cubit/data_statistics_global_cubit.dart'; import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart';
import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart'; import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart';
import 'package:scrobbles/cubit/data_timeline_cubit.dart'; import 'package:scrobbles/cubit/activity/data_new_artists_cubit.dart';
import 'package:scrobbles/cubit/data_top_artists_cubit.dart'; import 'package:scrobbles/cubit/activity/data_new_tracks_cubit.dart';
import 'package:scrobbles/cubit/nav_cubit_pages.dart'; import 'package:scrobbles/cubit/activity/data_statistics_global_cubit.dart';
import 'package:scrobbles/config/screen.dart'; import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart';
import 'package:scrobbles/cubit/nav_cubit_screens.dart'; import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart';
import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart';
class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
const GlobalAppBar({super.key}); const GlobalAppBar({super.key});
...@@ -28,7 +29,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { ...@@ -28,7 +29,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
// go to Settings page // go to Settings page
menuActions.add(IconButton( menuActions.add(IconButton(
onPressed: () { onPressed: () {
BlocProvider.of<NavCubitScreen>(context).goToSettingsPage(); BlocProvider.of<NavCubitScreen>(context).goToScreenSettings();
}, },
icon: Screen.screenSettings.icon, icon: Screen.screenSettings.icon,
)); ));
...@@ -36,7 +37,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { ...@@ -36,7 +37,7 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
// go to About page // go to About page
menuActions.add(IconButton( menuActions.add(IconButton(
onPressed: () { onPressed: () {
BlocProvider.of<NavCubitScreen>(context).goToAboutPage(); BlocProvider.of<NavCubitScreen>(context).goToScreenAbout();
}, },
icon: Screen.screenAbout.icon, icon: Screen.screenAbout.icon,
)); ));
...@@ -61,8 +62,8 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { ...@@ -61,8 +62,8 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
// back to Home page // back to Home page
menuActions.add(IconButton( menuActions.add(IconButton(
onPressed: () { onPressed: () {
BlocProvider.of<NavCubitScreen>(context).goToActivityPage(); BlocProvider.of<NavCubitScreen>(context).goToScreenActivity();
BlocProvider.of<NavCubitPage>(context).goToHomePage(); BlocProvider.of<NavCubitPage>(context).goToPageHome();
}, },
icon: Screen.screenActivity.icon, icon: Screen.screenActivity.icon,
)); ));
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/cubit/data_discoveries_cubit.dart'; import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart';
import 'package:scrobbles/cubit/data_new_artists_cubit.dart'; import 'package:scrobbles/cubit/activity/data_new_artists_cubit.dart';
import 'package:scrobbles/cubit/data_new_tracks_cubit.dart'; import 'package:scrobbles/cubit/activity/data_new_tracks_cubit.dart';
import 'package:scrobbles/ui/widgets/cards/discoveries.dart'; import 'package:scrobbles/ui/widgets/cards/discoveries.dart';
import 'package:scrobbles/ui/widgets/cards/new_artists.dart'; import 'package:scrobbles/ui/widgets/cards/new_artists.dart';
import 'package:scrobbles/ui/widgets/cards/new_tracks.dart'; import 'package:scrobbles/ui/widgets/cards/new_tracks.dart';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/cubit/data_statistics_global_cubit.dart'; import 'package:scrobbles/cubit/activity/data_statistics_global_cubit.dart';
import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart'; import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart';
import 'package:scrobbles/cubit/data_timeline_cubit.dart'; import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart';
import 'package:scrobbles/cubit/data_top_artists_cubit.dart'; import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart';
import 'package:scrobbles/ui/widgets/cards/statistics_global.dart'; import 'package:scrobbles/ui/widgets/cards/statistics_global.dart';
import 'package:scrobbles/ui/widgets/cards/statistics_recent.dart'; import 'package:scrobbles/ui/widgets/cards/statistics_recent.dart';
import 'package:scrobbles/ui/widgets/cards/timeline.dart'; import 'package:scrobbles/ui/widgets/cards/timeline.dart';
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart'; import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart';
import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart'; import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart';
import 'package:scrobbles/cubit/data_heatmap_cubit.dart'; import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart';
import 'package:scrobbles/ui/widgets/cards/counts_by_day.dart'; import 'package:scrobbles/ui/widgets/cards/counts_by_day.dart';
import 'package:scrobbles/ui/widgets/cards/counts_by_hour.dart'; import 'package:scrobbles/ui/widgets/cards/counts_by_hour.dart';
import 'package:scrobbles/ui/widgets/cards/heatmap.dart'; import 'package:scrobbles/ui/widgets/cards/heatmap.dart';
......
...@@ -14,7 +14,7 @@ class ScreenAbout extends StatelessWidget { ...@@ -14,7 +14,7 @@ class ScreenAbout extends StatelessWidget {
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
children: <Widget>[ children: <Widget>[
const SizedBox(height: 8), const SizedBox(height: 8),
AppTitle(text: tr('about_title')), const AppTitle(text: 'about_title'),
const Text('about_content').tr(), const Text('about_content').tr(),
FutureBuilder<PackageInfo>( FutureBuilder<PackageInfo>(
future: PackageInfo.fromPlatform(), future: PackageInfo.fromPlatform(),
......
...@@ -2,10 +2,10 @@ import 'package:flutter/material.dart'; ...@@ -2,10 +2,10 @@ import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:flutter_swipe/flutter_swipe.dart'; import 'package:flutter_swipe/flutter_swipe.dart';
import 'package:scrobbles/config/activity_page.dart'; import 'package:scrobbles/common/config/activity_page.dart';
import 'package:scrobbles/config/screen.dart'; import 'package:scrobbles/common/config/screen.dart';
import 'package:scrobbles/cubit/nav_cubit_pages.dart'; import 'package:scrobbles/common/cubit/nav/nav_cubit_pages.dart';
import 'package:scrobbles/ui/nav/bottom_nav_bar.dart'; import 'package:scrobbles/common/ui/nav/bottom_nav_bar.dart';
class ScreenActivity extends StatelessWidget { class ScreenActivity extends StatelessWidget {
const ScreenActivity({super.key}); const ScreenActivity({super.key});
...@@ -15,9 +15,9 @@ class ScreenActivity extends StatelessWidget { ...@@ -15,9 +15,9 @@ class ScreenActivity extends StatelessWidget {
return BlocBuilder<NavCubitPage, int>( return BlocBuilder<NavCubitPage, int>(
builder: (BuildContext context, int pageIndex) { builder: (BuildContext context, int pageIndex) {
return Swiper( return Swiper(
itemCount: Screen.itemsCount, itemCount: Screen.items.length,
itemBuilder: (BuildContext context, int pageIndex) { itemBuilder: (BuildContext context, int pageIndex) {
return ActivityPage.getPageWidget(pageIndex); return ActivityPage.getWidget(pageIndex);
}, },
pagination: SwiperPagination( pagination: SwiperPagination(
margin: const EdgeInsets.all(0), margin: const EdgeInsets.all(0),
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/ui/settings/settings_form.dart'; import 'package:scrobbles/common/ui/settings/settings_form.dart';
class ScreenSettings extends StatelessWidget { class ScreenSettings extends StatelessWidget {
const ScreenSettings({super.key}); const ScreenSettings({super.key});
......
...@@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; ...@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/config/default_global_settings.dart'; import 'package:scrobbles/config/default_global_settings.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart'; import 'package:scrobbles/cubit/settings/settings_global_cubit.dart';
class SettingsForm extends StatefulWidget { class SettingsForm extends StatefulWidget {
const SettingsForm({super.key}); const SettingsForm({super.key});
......
class ApplicationConfig {
static const String appTitle = 'Scrobbles';
}
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
class DefaultActivitySettings {
// available game parameters codes
static const String parameterCodeDashboardType = 'dashboardType';
static const List<String> availableParameters = [
parameterCodeDashboardType,
];
// dashboard type: available values
static const String dashboardTypeDefault = 'default';
static const List<String> allowedDashboardTypeValues = [
dashboardTypeDefault,
];
// dashboard type: default value
static const String defaultDashboardTypeValue = dashboardTypeDefault;
// available values from parameter code
static List<String> getAvailableValues(String parameterCode) {
switch (parameterCode) {
case parameterCodeDashboardType:
return DefaultActivitySettings.allowedDashboardTypeValues;
}
printlog('Did not find any available value for game parameter "$parameterCode".');
return [];
}
}
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
class DefaultGlobalSettings { 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 [];
}
@Deprecated("Should be removed / normalized")
static const List<int> allowedDaysCountValues = [ static const List<int> allowedDaysCountValues = [
7, 7,
14, 14,
...@@ -7,17 +35,26 @@ class DefaultGlobalSettings { ...@@ -7,17 +35,26 @@ class DefaultGlobalSettings {
60, 60,
90, 90,
]; ];
@Deprecated("Should be removed / normalized")
static const List<int> allowedCountValues = [ static const List<int> allowedCountValues = [
5, 5,
10, 10,
20, 20,
]; ];
@Deprecated("Should be removed / normalized")
static const int defaultDiscoveriesDaysCount = 14; static const int defaultDiscoveriesDaysCount = 14;
@Deprecated("Should be removed / normalized")
static const int defaultDistributionDaysCount = 21; static const int defaultDistributionDaysCount = 21;
@Deprecated("Should be removed / normalized")
static const int defaultStatisticsRecentDaysCount = 21; static const int defaultStatisticsRecentDaysCount = 21;
@Deprecated("Should be removed / normalized")
static const int defaultTimelineDaysCount = 14; static const int defaultTimelineDaysCount = 14;
@Deprecated("Should be removed / normalized")
static const int defaultTopArtistsDaysCount = 14; static const int defaultTopArtistsDaysCount = 14;
@Deprecated("Should be removed / normalized")
static const int defaultNewArtistsCount = 5; static const int defaultNewArtistsCount = 5;
@Deprecated("Should be removed / normalized")
static const int defaultNewTracksCount = 5; static const int defaultNewTracksCount = 5;
} }
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/models/activity/activity.dart';
import 'package:scrobbles/models/settings/settings_activity.dart';
import 'package:scrobbles/models/settings/settings_global.dart';
part 'activity_state.dart';
class ActivityCubit extends HydratedCubit<ActivityState> {
ActivityCubit()
: super(ActivityState(
currentActivity: Activity.createNull(),
));
void updateState(Activity activity) {
emit(ActivityState(
currentActivity: activity,
));
}
void refresh() {
final Activity activity = Activity(
// Settings
activitySettings: state.currentActivity.activitySettings,
globalSettings: state.currentActivity.globalSettings,
// State
isRunning: state.currentActivity.isRunning,
);
updateState(activity);
}
void startNewActivity({
required ActivitySettings activitySettings,
required GlobalSettings globalSettings,
}) {
final Activity newActivity = Activity.createNew(
// Settings
activitySettings: activitySettings,
globalSettings: globalSettings,
);
newActivity.dump();
updateState(newActivity);
refresh();
}
@override
ActivityState? fromJson(Map<String, dynamic> json) {
final Activity currentActivity = json['currentActivity'] as Activity;
return ActivityState(
currentActivity: currentActivity,
);
}
@override
Map<String, dynamic>? toJson(ActivityState state) {
return <String, dynamic>{
'currentActivity': state.currentActivity.toJson(),
};
}
}
part of 'activity_cubit.dart';
@immutable
class ActivityState extends Equatable {
const ActivityState({
required this.currentActivity,
});
final Activity currentActivity;
@override
List<dynamic> get props => <dynamic>[
currentActivity,
];
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment