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

Normalize app architecture

parent 2fb921a6
No related branches found
No related tags found
1 merge request!61Resolve "Normalize game architecture"
Pipeline #5730 passed
Showing
with 494 additions and 148 deletions
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/models/new_artists.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart';
import 'package:scrobbles/models/data/new_artists.dart';
import 'package:scrobbles/network/scrobbles.dart';
part 'data_new_artists_state.dart';
class DataNewArtistsCubit extends HydratedCubit<DataNewArtistsState> {
DataNewArtistsCubit() : super(const DataNewArtistsState());
DataNewArtistsCubit()
: super(const DataNewArtistsState(
newArtists: null,
status: '',
));
void setLoading() {
emit(DataNewArtistsState(
newArtists: state.newArtists,
status: 'loading',
));
}
void setValue(NewArtistsData? newArtists) {
emit(DataNewArtistsState(
newArtists: newArtists,
status: '',
));
}
void getData(DataNewArtistsState state) {
emit(state);
void setFailed() {
emit(DataNewArtistsState(
newArtists: state.newArtists,
status: 'failed',
));
}
NewArtistsData? getValue() {
return state.newArtists;
void setLoaded() {
emit(DataNewArtistsState(
newArtists: state.newArtists,
status: '',
));
}
void update(NewArtistsData? newArtists) {
if ((newArtists != null) && (state.newArtists.toString() != newArtists.toString())) {
setValue(newArtists);
} else {
setLoaded();
}
}
void setValue(NewArtistsData? newArtists) {
emit(DataNewArtistsState(
newArtists: newArtists,
));
void refresh(BuildContext context) async {
setLoading();
GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context);
final int count = settings.getNewArtistsCount();
final NewArtistsData? data = await ScrobblesApi.fetchNewArtists(count);
if (data != null) {
update(data);
} else {
setFailed();
}
}
@override
DataNewArtistsState? fromJson(Map<String, dynamic> json) {
return DataNewArtistsState(
newArtists: NewArtistsData.fromJson(json['newArtists']),
status: '',
);
}
......@@ -40,6 +78,7 @@ class DataNewArtistsCubit extends HydratedCubit<DataNewArtistsState> {
Map<String, Object?>? toJson(DataNewArtistsState state) {
return <String, Object?>{
'newArtists': state.newArtists?.toJson(),
'status': state.status,
};
}
}
......@@ -3,13 +3,16 @@ part of 'data_new_artists_cubit.dart';
@immutable
class DataNewArtistsState extends Equatable {
const DataNewArtistsState({
this.newArtists,
required this.newArtists,
required this.status,
});
final NewArtistsData? newArtists;
final String status;
@override
List<Object?> get props => <Object?>[
newArtists,
status,
];
}
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/models/new_tracks.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart';
import 'package:scrobbles/models/data/new_tracks.dart';
import 'package:scrobbles/network/scrobbles.dart';
part 'data_new_tracks_state.dart';
class DataNewTracksCubit extends HydratedCubit<DataNewTracksState> {
DataNewTracksCubit() : super(const DataNewTracksState());
DataNewTracksCubit()
: super(const DataNewTracksState(
newTracks: null,
status: '',
));
void setLoading() {
emit(DataNewTracksState(
newTracks: state.newTracks,
status: 'loading',
));
}
void setValue(NewTracksData? newTracks) {
emit(DataNewTracksState(
newTracks: newTracks,
status: '',
));
}
void getData(DataNewTracksState state) {
emit(state);
void setFailed() {
emit(DataNewTracksState(
newTracks: state.newTracks,
status: 'failed',
));
}
NewTracksData? getValue() {
return state.newTracks;
void setLoaded() {
emit(DataNewTracksState(
newTracks: state.newTracks,
status: '',
));
}
void update(NewTracksData? newTracks) {
if ((newTracks != null) && (state.newTracks.toString() != newTracks.toString())) {
setValue(newTracks);
} else {
setLoaded();
}
}
void setValue(NewTracksData? newTracks) {
emit(DataNewTracksState(
newTracks: newTracks,
));
void refresh(BuildContext context) async {
setLoading();
GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context);
final int count = settings.getNewTracksCount();
final NewTracksData? data = await ScrobblesApi.fetchNewTracks(count);
if (data != null) {
update(data);
} else {
setFailed();
}
}
@override
DataNewTracksState? fromJson(Map<String, dynamic> json) {
return DataNewTracksState(
newTracks: NewTracksData.fromJson(json['newTracks']),
status: '',
);
}
......@@ -40,6 +78,7 @@ class DataNewTracksCubit extends HydratedCubit<DataNewTracksState> {
Map<String, Object?>? toJson(DataNewTracksState state) {
return <String, Object?>{
'newTracks': state.newTracks?.toJson(),
'status': state.status,
};
}
}
......@@ -3,13 +3,16 @@ part of 'data_new_tracks_cubit.dart';
@immutable
class DataNewTracksState extends Equatable {
const DataNewTracksState({
this.newTracks,
required this.newTracks,
required this.status,
});
final NewTracksData? newTracks;
final String status;
@override
List<Object?> get props => <Object?>[
newTracks,
status,
];
}
......@@ -2,38 +2,71 @@ import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/models/statistics_global.dart';
import 'package:scrobbles/models/data/statistics_global.dart';
import 'package:scrobbles/network/scrobbles.dart';
part 'data_statistics_global_state.dart';
class DataStatisticsGlobalCubit extends HydratedCubit<DataStatisticsGlobalState> {
DataStatisticsGlobalCubit() : super(const DataStatisticsGlobalState());
DataStatisticsGlobalCubit()
: super(const DataStatisticsGlobalState(
statisticsGlobal: null,
status: '',
));
void getData(DataStatisticsGlobalState state) {
emit(state);
void setLoading() {
emit(DataStatisticsGlobalState(
statisticsGlobal: state.statisticsGlobal,
status: 'loading',
));
}
StatisticsGlobalData? getValue() {
return state.statisticsGlobal;
void setValue(StatisticsGlobalData? statisticsGlobal) {
emit(DataStatisticsGlobalState(
statisticsGlobal: statisticsGlobal,
status: '',
));
}
void setFailed() {
emit(DataStatisticsGlobalState(
statisticsGlobal: state.statisticsGlobal,
status: 'failed',
));
}
void setLoaded() {
emit(DataStatisticsGlobalState(
statisticsGlobal: state.statisticsGlobal,
status: '',
));
}
void update(StatisticsGlobalData? statisticsGlobal) {
if ((statisticsGlobal != null) &&
(state.statisticsGlobal.toString() != statisticsGlobal.toString())) {
setValue(statisticsGlobal);
} else {
setLoaded();
}
}
void setValue(StatisticsGlobalData? statisticsGlobal) {
emit(DataStatisticsGlobalState(
statisticsGlobal: statisticsGlobal,
));
void refresh(BuildContext context) async {
setLoading();
final StatisticsGlobalData? data = await ScrobblesApi.fetchGlobalStatistics();
if (data != null) {
update(data);
} else {
setFailed();
}
}
@override
DataStatisticsGlobalState? fromJson(Map<String, dynamic> json) {
return DataStatisticsGlobalState(
statisticsGlobal: StatisticsGlobalData.fromJson(json['statisticsGlobal']),
status: '',
);
}
......@@ -41,6 +74,7 @@ class DataStatisticsGlobalCubit extends HydratedCubit<DataStatisticsGlobalState>
Map<String, Object?>? toJson(DataStatisticsGlobalState state) {
return <String, Object?>{
'statisticsGlobal': state.statisticsGlobal?.toJson(),
'status': state.status,
};
}
}
......@@ -3,13 +3,16 @@ part of 'data_statistics_global_cubit.dart';
@immutable
class DataStatisticsGlobalState extends Equatable {
const DataStatisticsGlobalState({
this.statisticsGlobal,
required this.statisticsGlobal,
required this.status,
});
final StatisticsGlobalData? statisticsGlobal;
final String status;
@override
List<Object?> get props => <Object?>[
statisticsGlobal,
status,
];
}
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/models/statistics_recent.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart';
import 'package:scrobbles/models/data/statistics_recent.dart';
import 'package:scrobbles/network/scrobbles.dart';
part 'data_statistics_recent_state.dart';
class DataStatisticsRecentCubit extends HydratedCubit<DataStatisticsRecentState> {
DataStatisticsRecentCubit() : super(const DataStatisticsRecentState());
DataStatisticsRecentCubit()
: super(const DataStatisticsRecentState(
statisticsRecent: null,
status: '',
));
void setLoading() {
emit(DataStatisticsRecentState(
statisticsRecent: state.statisticsRecent,
status: 'loading',
));
}
void setValue(StatisticsRecentData? statisticsRecent) {
emit(DataStatisticsRecentState(
statisticsRecent: statisticsRecent,
status: '',
));
}
void getData(DataStatisticsRecentState state) {
emit(state);
void setFailed() {
emit(DataStatisticsRecentState(
statisticsRecent: state.statisticsRecent,
status: 'failed',
));
}
StatisticsRecentData? getValue() {
return state.statisticsRecent;
void setLoaded() {
emit(DataStatisticsRecentState(
statisticsRecent: state.statisticsRecent,
status: '',
));
}
void update(StatisticsRecentData? statisticsRecent) {
if ((statisticsRecent != null) &&
(state.statisticsRecent.toString() != statisticsRecent.toString())) {
setValue(statisticsRecent);
} else {
setLoaded();
}
}
void setValue(StatisticsRecentData? statisticsRecent) {
emit(DataStatisticsRecentState(
statisticsRecent: statisticsRecent,
));
void refresh(BuildContext context) async {
setLoading();
GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context);
final int daysCount = settings.getStatisticsRecentDaysCount();
final StatisticsRecentData? data = await ScrobblesApi.fetchRecentStatistics(daysCount);
if (data != null) {
update(data);
} else {
setFailed();
}
}
@override
DataStatisticsRecentState? fromJson(Map<String, dynamic> json) {
return DataStatisticsRecentState(
statisticsRecent: StatisticsRecentData.fromJson(json['statisticsRecent']),
status: '',
);
}
......@@ -41,6 +79,7 @@ class DataStatisticsRecentCubit extends HydratedCubit<DataStatisticsRecentState>
Map<String, Object?>? toJson(DataStatisticsRecentState state) {
return <String, Object?>{
'statisticsRecent': state.statisticsRecent?.toJson(),
'status': state.status,
};
}
}
......@@ -3,13 +3,16 @@ part of 'data_statistics_recent_cubit.dart';
@immutable
class DataStatisticsRecentState extends Equatable {
const DataStatisticsRecentState({
this.statisticsRecent,
required this.statisticsRecent,
required this.status,
});
final StatisticsRecentData? statisticsRecent;
final String status;
@override
List<Object?> get props => <Object?>[
statisticsRecent,
status,
];
}
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/models/timeline.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart';
import 'package:scrobbles/models/data/timeline.dart';
import 'package:scrobbles/network/scrobbles.dart';
part 'data_timeline_state.dart';
class DataTimelineCubit extends HydratedCubit<DataTimelineState> {
DataTimelineCubit() : super(const DataTimelineState());
DataTimelineCubit()
: super(const DataTimelineState(
timeline: null,
status: '',
));
void setLoading() {
emit(DataTimelineState(
timeline: state.timeline,
status: 'loading',
));
}
void setValue(TimelineData? timeline) {
emit(DataTimelineState(
timeline: timeline,
status: '',
));
}
void getData(DataTimelineState state) {
emit(state);
void setFailed() {
emit(DataTimelineState(
timeline: state.timeline,
status: 'failed',
));
}
TimelineData? getValue() {
return state.timeline;
void setLoaded() {
emit(DataTimelineState(
timeline: state.timeline,
status: '',
));
}
void update(TimelineData? timeline) {
if ((timeline != null) && (state.timeline.toString() != timeline.toString())) {
setValue(timeline);
} else {
setLoaded();
}
}
void setValue(TimelineData? timeline) {
emit(DataTimelineState(
timeline: timeline,
));
void refresh(BuildContext context) async {
setLoading();
GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context);
final int daysCount = settings.getTimelineDaysCount();
final TimelineData? data = await ScrobblesApi.fetchTimeline(daysCount);
if (data != null) {
update(data);
} else {
setFailed();
}
}
@override
DataTimelineState? fromJson(Map<String, dynamic> json) {
return DataTimelineState(
timeline: TimelineData.fromJson(json['timeline']),
status: '',
);
}
......@@ -40,6 +78,7 @@ class DataTimelineCubit extends HydratedCubit<DataTimelineState> {
Map<String, Object?>? toJson(DataTimelineState state) {
return <String, Object?>{
'timeline': state.timeline?.toJson(),
'status': state.status,
};
}
}
......@@ -3,13 +3,16 @@ part of 'data_timeline_cubit.dart';
@immutable
class DataTimelineState extends Equatable {
const DataTimelineState({
this.timeline,
required this.timeline,
required this.status,
});
final TimelineData? timeline;
final String status;
@override
List<Object?> get props => <Object?>[
timeline,
status,
];
}
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/models/topartists.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart';
import 'package:scrobbles/models/data/topartists.dart';
import 'package:scrobbles/network/scrobbles.dart';
part 'data_top_artists_state.dart';
class DataTopArtistsCubit extends HydratedCubit<DataTopArtistsState> {
DataTopArtistsCubit() : super(const DataTopArtistsState());
DataTopArtistsCubit()
: super(const DataTopArtistsState(
topArtists: null,
status: '',
));
void setLoading() {
emit(DataTopArtistsState(
topArtists: state.topArtists,
status: 'loading',
));
}
void setValue(TopArtistsData? topArtists) {
emit(DataTopArtistsState(
topArtists: topArtists,
status: '',
));
}
void getData(DataTopArtistsState state) {
emit(state);
void setFailed() {
emit(DataTopArtistsState(
topArtists: state.topArtists,
status: 'failed',
));
}
TopArtistsData? getValue(key) {
return state.topArtists;
void setLoaded() {
emit(DataTopArtistsState(
topArtists: state.topArtists,
status: '',
));
}
void update(TopArtistsData? topArtists) {
if ((topArtists != null) && (state.topArtists.toString() != topArtists.toString())) {
setValue(topArtists);
} else {
setLoaded();
}
}
void setValue(TopArtistsData? topArtists) {
emit(DataTopArtistsState(
topArtists: topArtists,
));
void refresh(BuildContext context) async {
setLoading();
GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context);
final int daysCount = settings.getTopArtistsDaysCount();
final TopArtistsData? data = await ScrobblesApi.fetchTopArtists(daysCount);
if (data != null) {
if (context.mounted) update(data);
} else {
if (context.mounted) setFailed();
}
}
@override
DataTopArtistsState? fromJson(Map<String, dynamic> json) {
return DataTopArtistsState(
topArtists: TopArtistsData.fromJson(json['topArtists']),
status: '',
);
}
......@@ -40,6 +78,7 @@ class DataTopArtistsCubit extends HydratedCubit<DataTopArtistsState> {
Map<String, Object?>? toJson(DataTopArtistsState state) {
return <String, Object?>{
'topArtists': state.topArtists?.toJson(),
'status': state.status,
};
}
}
......@@ -3,13 +3,16 @@ part of 'data_top_artists_cubit.dart';
@immutable
class DataTopArtistsState extends Equatable {
const DataTopArtistsState({
this.topArtists,
required this.topArtists,
required this.status,
});
final TopArtistsData? topArtists;
final String status;
@override
List<Object?> get props => <Object?>[
topArtists,
status,
];
}
import 'package:hydrated_bloc/hydrated_bloc.dart';
class BottomNavCubit extends HydratedCubit<int> {
BottomNavCubit() : super(0);
import 'package:scrobbles/config/activity_page.dart';
int pagesCount = 4;
class NavCubitPage extends HydratedCubit<int> {
NavCubitPage() : super(0);
void updateIndex(int index) {
if (isIndexAllowed(index)) {
if (ActivityPage.isIndexAllowed(index)) {
emit(index);
} else {
goToHomePage();
emit(ActivityPage.indexHome);
}
}
bool isIndexAllowed(int index) {
return (index >= 0) && (index < pagesCount);
void goToHomePage() {
emit(ActivityPage.indexHome);
}
void goToHomePage() => emit(0);
@override
int? fromJson(Map<String, dynamic> json) {
return 0;
int fromJson(Map<String, dynamic> json) {
return ActivityPage.indexHome;
}
@override
......
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/config/screen.dart';
class NavCubitScreen extends HydratedCubit<int> {
NavCubitScreen() : super(0);
void updateIndex(int index) {
if (Screen.isIndexAllowed(index)) {
emit(index);
} else {
goToActivityPage();
}
}
void goToActivityPage() {
emit(Screen.indexActivity);
}
void goToSettingsPage() {
emit(Screen.indexSettings);
}
void goToAboutPage() {
emit(Screen.indexAbout);
}
@override
int fromJson(Map<String, dynamic> json) {
return Screen.indexActivity;
}
@override
Map<String, dynamic>? toJson(int state) {
return <String, int>{'screenIndex': state};
}
}
......@@ -2,12 +2,36 @@ import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:scrobbles/config/default_settings.dart';
import 'package:scrobbles/config/default_global_settings.dart';
part 'settings_state.dart';
part 'settings_global_state.dart';
class SettingsCubit extends HydratedCubit<SettingsState> {
SettingsCubit() : super(const SettingsState());
class GlobalSettingsCubit extends HydratedCubit<GlobalSettingsState> {
GlobalSettingsCubit() : super(const GlobalSettingsState());
void setValues({
String? username,
String? securityToken,
int? discoveriesDaysCount,
int? distributionDaysCount,
int? statisticsRecentDaysCount,
int? timelineDaysCount,
int? topArtistsDaysCount,
int? newArtistsCount,
int? newTracksCount,
}) {
emit(GlobalSettingsState(
username: username ?? state.username,
securityToken: securityToken ?? state.securityToken,
discoveriesDaysCount: discoveriesDaysCount ?? state.discoveriesDaysCount,
distributionDaysCount: distributionDaysCount ?? state.distributionDaysCount,
statisticsRecentDaysCount: statisticsRecentDaysCount ?? state.statisticsRecentDaysCount,
timelineDaysCount: timelineDaysCount ?? state.timelineDaysCount,
topArtistsDaysCount: topArtistsDaysCount ?? state.topArtistsDaysCount,
newArtistsCount: newArtistsCount ?? state.newArtistsCount,
newTracksCount: newTracksCount ?? state.newTracksCount,
));
}
String getUsername() {
return state.username ?? '';
......@@ -18,59 +42,36 @@ class SettingsCubit extends HydratedCubit<SettingsState> {
}
int getDiscoveriesDaysCount() {
return state.discoveriesDaysCount ?? DefaultSettings.defaultDiscoveriesDaysCount;
return state.discoveriesDaysCount ?? DefaultGlobalSettings.defaultDiscoveriesDaysCount;
}
int getDistributionDaysCount() {
return state.distributionDaysCount ?? DefaultSettings.defaultDistributionDaysCount;
return state.distributionDaysCount ?? DefaultGlobalSettings.defaultDistributionDaysCount;
}
int getStatisticsRecentDaysCount() {
return state.statisticsRecentDaysCount ?? DefaultSettings.defaultStatisticsRecentDaysCount;
return state.statisticsRecentDaysCount ??
DefaultGlobalSettings.defaultStatisticsRecentDaysCount;
}
int getTimelineDaysCount() {
return state.timelineDaysCount ?? DefaultSettings.defaultTimelineDaysCount;
return state.timelineDaysCount ?? DefaultGlobalSettings.defaultTimelineDaysCount;
}
int getTopArtistsDaysCount() {
return state.topArtistsDaysCount ?? DefaultSettings.defaultTopArtistsDaysCount;
return state.topArtistsDaysCount ?? DefaultGlobalSettings.defaultTopArtistsDaysCount;
}
int getNewArtistsCount() {
return state.newArtistsCount ?? DefaultSettings.defaultNewArtistsCount;
return state.newArtistsCount ?? DefaultGlobalSettings.defaultNewArtistsCount;
}
int getNewTracksCount() {
return state.newTracksCount ?? DefaultSettings.defaultNewTracksCount;
}
void setValues({
String? username,
String? securityToken,
int? discoveriesDaysCount,
int? distributionDaysCount,
int? statisticsRecentDaysCount,
int? timelineDaysCount,
int? topArtistsDaysCount,
int? newArtistsCount,
int? newTracksCount,
}) {
emit(SettingsState(
username: username ?? state.username,
securityToken: securityToken ?? state.securityToken,
discoveriesDaysCount: discoveriesDaysCount ?? state.discoveriesDaysCount,
distributionDaysCount: distributionDaysCount ?? state.distributionDaysCount,
statisticsRecentDaysCount: statisticsRecentDaysCount ?? state.statisticsRecentDaysCount,
timelineDaysCount: timelineDaysCount ?? state.timelineDaysCount,
topArtistsDaysCount: topArtistsDaysCount ?? state.topArtistsDaysCount,
newArtistsCount: newArtistsCount ?? state.newArtistsCount,
newTracksCount: newTracksCount ?? state.newTracksCount,
));
return state.newTracksCount ?? DefaultGlobalSettings.defaultNewTracksCount;
}
@override
SettingsState? fromJson(Map<String, dynamic> json) {
GlobalSettingsState? fromJson(Map<String, dynamic> json) {
String username = json['username'] as String;
String securityToken = json['securityToken'] as String;
int discoveriesDaysCount = json['discoveriesDaysCount'] as int;
......@@ -81,7 +82,7 @@ class SettingsCubit extends HydratedCubit<SettingsState> {
int newArtistsCount = json['newArtistsCount'] as int;
int newTracksCount = json['newTracksCount'] as int;
return SettingsState(
return GlobalSettingsState(
username: username,
securityToken: securityToken,
discoveriesDaysCount: discoveriesDaysCount,
......@@ -95,21 +96,22 @@ class SettingsCubit extends HydratedCubit<SettingsState> {
}
@override
Map<String, dynamic>? toJson(SettingsState state) {
Map<String, dynamic>? toJson(GlobalSettingsState state) {
return <String, dynamic>{
'username': state.username ?? '',
'securityToken': state.securityToken ?? '',
'discoveriesDaysCount':
state.discoveriesDaysCount ?? DefaultSettings.defaultDiscoveriesDaysCount,
state.discoveriesDaysCount ?? DefaultGlobalSettings.defaultDiscoveriesDaysCount,
'distributionDaysCount':
state.distributionDaysCount ?? DefaultSettings.defaultDistributionDaysCount,
'statisticsRecentDaysCount':
state.statisticsRecentDaysCount ?? DefaultSettings.defaultStatisticsRecentDaysCount,
'timelineDaysCount': state.timelineDaysCount ?? DefaultSettings.defaultTimelineDaysCount,
state.distributionDaysCount ?? DefaultGlobalSettings.defaultDistributionDaysCount,
'statisticsRecentDaysCount': state.statisticsRecentDaysCount ??
DefaultGlobalSettings.defaultStatisticsRecentDaysCount,
'timelineDaysCount':
state.timelineDaysCount ?? DefaultGlobalSettings.defaultTimelineDaysCount,
'topArtistsDaysCount':
state.topArtistsDaysCount ?? DefaultSettings.defaultTopArtistsDaysCount,
'newArtistsCount': state.newArtistsCount ?? DefaultSettings.defaultNewArtistsCount,
'newTracksCount': state.newTracksCount ?? DefaultSettings.defaultNewTracksCount,
state.topArtistsDaysCount ?? DefaultGlobalSettings.defaultTopArtistsDaysCount,
'newArtistsCount': state.newArtistsCount ?? DefaultGlobalSettings.defaultNewArtistsCount,
'newTracksCount': state.newTracksCount ?? DefaultGlobalSettings.defaultNewTracksCount,
};
}
}
part of 'settings_cubit.dart';
part of 'settings_global_cubit.dart';
@immutable
class SettingsState extends Equatable {
const SettingsState({
class GlobalSettingsState extends Equatable {
const GlobalSettingsState({
this.username,
this.securityToken,
this.discoveriesDaysCount,
......
......@@ -2,13 +2,16 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hive/hive.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart';
import 'package:scrobbles/config/theme.dart';
import 'package:scrobbles/cubit/bottom_nav_cubit.dart';
import 'package:scrobbles/cubit/activity_cubit.dart';
import 'package:scrobbles/cubit/nav_cubit_pages.dart';
import 'package:scrobbles/cubit/nav_cubit_screens.dart';
import 'package:scrobbles/cubit/data_counts_by_day_cubit.dart';
import 'package:scrobbles/cubit/data_counts_by_hour_cubit.dart';
import 'package:scrobbles/cubit/data_discoveries_cubit.dart';
......@@ -19,12 +22,12 @@ import 'package:scrobbles/cubit/data_statistics_global_cubit.dart';
import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart';
import 'package:scrobbles/cubit/data_timeline_cubit.dart';
import 'package:scrobbles/cubit/data_top_artists_cubit.dart';
import 'package:scrobbles/cubit/settings_cubit.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart';
import 'package:scrobbles/cubit/theme_cubit.dart';
import 'package:scrobbles/ui/skeleton.dart';
void main() async {
/// Initialize packages
// Initialize packages
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
final Directory tmpDir = await getTemporaryDirectory();
......@@ -33,8 +36,8 @@ void main() async {
storageDirectory: tmpDir,
);
runApp(
EasyLocalization(
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((value) => runApp(EasyLocalization(
path: 'assets/translations',
supportedLocales: const <Locale>[
Locale('en'),
......@@ -43,8 +46,7 @@ void main() async {
fallbackLocale: const Locale('en'),
useFallbackTranslations: true,
child: const MyApp(),
),
);
)));
}
class MyApp extends StatelessWidget {
......@@ -54,8 +56,11 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<SettingsCubit>(create: (context) => SettingsCubit()),
BlocProvider<BottomNavCubit>(create: (context) => BottomNavCubit()),
BlocProvider<NavCubitPage>(create: (context) => NavCubitPage()),
BlocProvider<NavCubitScreen>(create: (context) => NavCubitScreen()),
BlocProvider<ThemeCubit>(create: (context) => ThemeCubit()),
BlocProvider<ActivityCubit>(create: (context) => ActivityCubit()),
BlocProvider<GlobalSettingsCubit>(create: (context) => GlobalSettingsCubit()),
BlocProvider<DataCountsByDayCubit>(create: (context) => DataCountsByDayCubit()),
BlocProvider<DataCountsByHourCubit>(create: (context) => DataCountsByHourCubit()),
BlocProvider<DataDiscoveriesCubit>(create: (context) => DataDiscoveriesCubit()),
......@@ -68,7 +73,6 @@ class MyApp extends StatelessWidget {
create: (context) => DataStatisticsRecentCubit()),
BlocProvider<DataTimelineCubit>(create: (context) => DataTimelineCubit()),
BlocProvider<DataTopArtistsCubit>(create: (context) => DataTopArtistsCubit()),
BlocProvider<ThemeCubit>(create: (context) => ThemeCubit()),
],
child: BlocBuilder<ThemeCubit, ThemeModeState>(
builder: (BuildContext context, ThemeModeState state) {
......@@ -87,7 +91,8 @@ class MyApp extends StatelessWidget {
locale: context.locale,
debugShowCheckedModeBanner: false,
);
}),
},
),
);
}
}
import 'package:scrobbles/utils/tools.dart';
class Activity {
const Activity();
factory Activity.createNull() {
return const Activity();
}
void dump() {
printlog('');
printlog('## Current activity dump:');
printlog('');
printlog('$Activity:');
printlog('');
}
@override
String toString() {
return '$Activity(${toJson()})';
}
Map<String, dynamic>? toJson() {
return <String, dynamic>{};
}
}
File moved
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment