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

Normalize Activity application architecture

parent 0ce47c59
No related branches found
No related tags found
1 merge request!15Resolve "Normalize Activity application architecture"
Pipeline #6688 passed
......@@ -4,10 +4,13 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:spotifyplaylistgenerator/cubit/activity_cubit.dart';
import 'package:spotifyplaylistgenerator/cubit/nav_cubit_pages.dart';
import 'package:spotifyplaylistgenerator/cubit/nav_cubit_screens.dart';
import 'package:spotifyplaylistgenerator/cubit/settings_global_cubit.dart';
import 'package:spotifyplaylistgenerator/common/cubit/nav/nav_cubit_pages.dart';
import 'package:spotifyplaylistgenerator/common/cubit/nav/nav_cubit_screens.dart';
import 'package:spotifyplaylistgenerator/config/application_config.dart';
import 'package:spotifyplaylistgenerator/cubit/activity/activity_cubit.dart';
import 'package:spotifyplaylistgenerator/cubit/settings/settings_activity_cubit.dart';
import 'package:spotifyplaylistgenerator/cubit/settings/settings_global_cubit.dart';
import 'package:spotifyplaylistgenerator/ui/skeleton.dart';
void main() async {
......@@ -40,17 +43,30 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<NavCubitPage>(create: (context) => NavCubitPage()),
BlocProvider<NavCubitScreen>(create: (context) => NavCubitScreen()),
// default providers
BlocProvider<NavCubitPage>(
create: (context) => NavCubitPage(),
),
BlocProvider<NavCubitScreen>(
create: (context) => NavCubitScreen(),
),
BlocProvider<ApplicationThemeModeCubit>(
create: (context) => ApplicationThemeModeCubit()),
BlocProvider<ActivityCubit>(create: (context) => ActivityCubit()),
BlocProvider<GlobalSettingsCubit>(create: (context) => GlobalSettingsCubit()),
create: (context) => ApplicationThemeModeCubit(),
),
BlocProvider<ActivityCubit>(
create: (context) => ActivityCubit(),
),
BlocProvider<GlobalSettingsCubit>(
create: (context) => GlobalSettingsCubit(),
),
BlocProvider<ActivitySettingsCubit>(
create: (context) => ActivitySettingsCubit(),
),
],
child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>(
builder: (BuildContext context, ApplicationThemeModeState state) {
return MaterialApp(
title: 'Spotify playlist generator',
title: ApplicationConfig.appTitle,
home: const SkeletonScreen(),
// Theme stuff
......
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:spotifyplaylistgenerator/config/default_activity_settings.dart';
class ActivitySettings {
final String layout;
ActivitySettings({
required this.layout,
});
static String getLayoutValueFromUnsafe(String layout) {
if (DefaultActivitySettings.allowedLayoutValues.contains(layout)) {
return layout;
}
return DefaultActivitySettings.defaultLayoutValue;
}
factory ActivitySettings.createDefault() {
return ActivitySettings(
layout: DefaultActivitySettings.defaultLayoutValue,
);
}
void dump() {
printlog('$ActivitySettings:');
printlog(' ${DefaultActivitySettings.parameterCodeLayout}: $layout');
printlog('');
}
@override
String toString() {
return '$ActivitySettings(${toJson()})';
}
Map<String, dynamic>? toJson() {
return <String, dynamic>{
DefaultActivitySettings.parameterCodeLayout: layout,
};
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:spotifyplaylistgenerator/config/screen.dart';
import 'package:spotifyplaylistgenerator/cubit/activity_cubit.dart';
import 'package:spotifyplaylistgenerator/cubit/nav_cubit_screens.dart';
class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
const GlobalAppBar({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<ActivityCubit, ActivityState>(
builder: (BuildContext context, ActivityState activityState) {
return BlocBuilder<NavCubitScreen, int>(
builder: (BuildContext context, int screenIndex) {
final List<Widget> menuActions = [];
if (screenIndex == Screen.indexActivity) {
// go to Settings page
menuActions.add(ElevatedButton(
onPressed: () {
BlocProvider.of<NavCubitScreen>(context).goToSettingsPage();
},
style: ElevatedButton.styleFrom(
shape: const CircleBorder(),
),
child: Screen.screenSettings.icon,
));
// go to About page
menuActions.add(ElevatedButton(
onPressed: () {
BlocProvider.of<NavCubitScreen>(context).goToAboutPage();
},
style: ElevatedButton.styleFrom(
shape: const CircleBorder(),
),
child: Screen.screenAbout.icon,
));
} else {
// back to Home page
menuActions.add(ElevatedButton(
onPressed: () {
BlocProvider.of<NavCubitScreen>(context).goToActivityPage();
},
style: ElevatedButton.styleFrom(
shape: const CircleBorder(),
),
child: Screen.screenActivity.icon,
));
}
return AppBar(
title: const AppHeader(text: 'app_name'),
actions: menuActions,
);
},
);
},
);
}
@override
Size get preferredSize => const Size.fromHeight(50);
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:spotifyplaylistgenerator/config/screen.dart';
import 'package:spotifyplaylistgenerator/cubit/nav_cubit_screens.dart';
import 'package:spotifyplaylistgenerator/ui/nav/bottom_nav_bar.dart';
import 'package:spotifyplaylistgenerator/ui/nav/global_app_bar.dart';
import 'package:spotifyplaylistgenerator/common/config/activity_page.dart';
import 'package:spotifyplaylistgenerator/common/config/screen.dart';
import 'package:spotifyplaylistgenerator/common/cubit/nav/nav_cubit_screens.dart';
import 'package:spotifyplaylistgenerator/common/ui/nav/global_app_bar.dart';
import 'package:spotifyplaylistgenerator/common/ui/nav/bottom_nav_bar.dart';
class SkeletonScreen extends StatelessWidget {
const SkeletonScreen({super.key});
......@@ -28,8 +29,7 @@ class SkeletonScreen extends StatelessWidget {
),
),
backgroundColor: Theme.of(context).colorScheme.surface,
bottomNavigationBar:
Screen.displayBottomNavBar(screenIndex) ? const BottomNavBar() : null,
bottomNavigationBar: ActivityPage.displayBottomNavBar ? const BottomNavBar() : null,
);
},
);
......
......@@ -245,10 +245,10 @@ packages:
dependency: transitive
description:
name: path_provider
sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.1.5"
path_provider_android:
dependency: transitive
description:
......@@ -442,10 +442,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
sha256: "10169d3934549017f0ae278ccb07f828f9d6ea21573bab0fb77b0e1ef0fce454"
url: "https://pub.dev"
source: hosted
version: "5.7.0"
version: "5.7.2"
xdg_directories:
dependency: transitive
description:
......
......@@ -3,7 +3,7 @@ description: Create and manage Spotify playlists
publish_to: "none"
version: 0.2.1+12
version: 0.3.0+13
environment:
sdk: "^3.0.0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment