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

Normalize Activity application architecture

parent 2455b986
No related branches found
No related tags found
1 merge request!15Resolve "Normalize Activity application architecture"
Pipeline #6689 passed
...@@ -4,11 +4,13 @@ import 'package:flutter/material.dart'; ...@@ -4,11 +4,13 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:stopmotion/cubit/activity_cubit.dart'; import 'package:stopmotion/common/cubit/nav/nav_cubit_pages.dart';
import 'package:stopmotion/cubit/nav_cubit_pages.dart'; import 'package:stopmotion/common/cubit/nav/nav_cubit_screens.dart';
import 'package:stopmotion/cubit/nav_cubit_screens.dart';
import 'package:stopmotion/cubit/settings_global_cubit.dart'; import 'package:stopmotion/config/application_config.dart';
import 'package:stopmotion/cubit/settings_activity_cubit.dart'; import 'package:stopmotion/cubit/activity/activity_cubit.dart';
import 'package:stopmotion/cubit/settings/settings_activity_cubit.dart';
import 'package:stopmotion/cubit/settings/settings_global_cubit.dart';
import 'package:stopmotion/ui/skeleton.dart'; import 'package:stopmotion/ui/skeleton.dart';
void main() async { void main() async {
...@@ -41,18 +43,30 @@ class MyApp extends StatelessWidget { ...@@ -41,18 +43,30 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MultiBlocProvider( return MultiBlocProvider(
providers: [ providers: [
BlocProvider<NavCubitPage>(create: (context) => NavCubitPage()), // default providers
BlocProvider<NavCubitScreen>(create: (context) => NavCubitScreen()), BlocProvider<NavCubitPage>(
create: (context) => NavCubitPage(),
),
BlocProvider<NavCubitScreen>(
create: (context) => NavCubitScreen(),
),
BlocProvider<ApplicationThemeModeCubit>( BlocProvider<ApplicationThemeModeCubit>(
create: (context) => ApplicationThemeModeCubit()), create: (context) => ApplicationThemeModeCubit(),
BlocProvider<ActivityCubit>(create: (context) => ActivityCubit()), ),
BlocProvider<GlobalSettingsCubit>(create: (context) => GlobalSettingsCubit()), BlocProvider<ActivityCubit>(
BlocProvider<ActivitySettingsCubit>(create: (context) => ActivitySettingsCubit()), create: (context) => ActivityCubit(),
),
BlocProvider<GlobalSettingsCubit>(
create: (context) => GlobalSettingsCubit(),
),
BlocProvider<ActivitySettingsCubit>(
create: (context) => ActivitySettingsCubit(),
),
], ],
child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>( child: BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>(
builder: (BuildContext context, ApplicationThemeModeState state) { builder: (BuildContext context, ApplicationThemeModeState state) {
return MaterialApp( return MaterialApp(
title: 'Stop Motion', title: ApplicationConfig.appTitle,
home: const SkeletonScreen(), home: const SkeletonScreen(),
// Theme stuff // Theme stuff
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:stopmotion/config/screen.dart';
import 'package:stopmotion/cubit/activity_cubit.dart';
import 'package:stopmotion/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/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:stopmotion/config/screen.dart'; import 'package:stopmotion/common/config/activity_page.dart';
import 'package:stopmotion/cubit/nav_cubit_screens.dart'; import 'package:stopmotion/common/config/screen.dart';
import 'package:stopmotion/ui/nav/global_app_bar.dart'; import 'package:stopmotion/common/cubit/nav/nav_cubit_screens.dart';
import 'package:stopmotion/ui/nav/bottom_nav_bar.dart'; import 'package:stopmotion/common/ui/nav/global_app_bar.dart';
import 'package:stopmotion/common/ui/nav/bottom_nav_bar.dart';
class SkeletonScreen extends StatelessWidget { class SkeletonScreen extends StatelessWidget {
const SkeletonScreen({super.key}); const SkeletonScreen({super.key});
...@@ -28,8 +29,7 @@ class SkeletonScreen extends StatelessWidget { ...@@ -28,8 +29,7 @@ class SkeletonScreen extends StatelessWidget {
), ),
), ),
backgroundColor: Theme.of(context).colorScheme.surface, backgroundColor: Theme.of(context).colorScheme.surface,
bottomNavigationBar: bottomNavigationBar: ActivityPage.displayBottomNavBar ? const BottomNavBar() : null,
Screen.displayBottomNavBar(screenIndex) ? const BottomNavBar() : null,
); );
}, },
); );
......
...@@ -301,10 +301,10 @@ packages: ...@@ -301,10 +301,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider name: path_provider
sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.5"
path_provider_android: path_provider_android:
dependency: transitive dependency: transitive
description: description:
...@@ -506,10 +506,10 @@ packages: ...@@ -506,10 +506,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a" sha256: "10169d3934549017f0ae278ccb07f828f9d6ea21573bab0fb77b0e1ef0fce454"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.7.0" version: "5.7.2"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
......
...@@ -3,7 +3,7 @@ description: stop motion assistant ...@@ -3,7 +3,7 @@ description: stop motion assistant
publish_to: "none" publish_to: "none"
version: 0.2.1+13 version: 0.3.0+14
environment: environment:
sdk: "^3.0.0" 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