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

Normalize Activity application architecture

parent fdd2f5e2
No related branches found
No related tags found
1 merge request!70Resolve "Normalize Activity application architecture"
Pipeline #6687 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.
Finish editing this message first!
Please register or to comment