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

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

Resolve "Normalize Activity application architecture"

Closes #27

See merge request !26
parents 9a00a297 fea53d84
No related branches found
No related tags found
1 merge request!26Resolve "Normalize Activity application architecture"
Pipeline #6787 passed
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:reversi/models/game/game_board.dart';
import 'package:reversi/models/activity/game_board.dart';
/// A model representing the state of a game of reversi. It's a board and the
/// player who's next to go, essentially.
......
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/config/default_game_settings.dart';
import 'package:reversi/config/default_activity_settings.dart';
class GameSettings {
class ActivitySettings {
final String itemsCount;
final String timerValue;
GameSettings({
ActivitySettings({
required this.itemsCount,
required this.timerValue,
});
......@@ -16,44 +16,44 @@ class GameSettings {
int get timerCountValue => int.parse(timerValue);
static String getItemsCountValueFromUnsafe(String itemsCount) {
if (DefaultGameSettings.allowedGameModeValues.contains(itemsCount)) {
if (DefaultActivitySettings.allowedGameModeValues.contains(itemsCount)) {
return itemsCount;
}
return DefaultGameSettings.defaultGameModeValue;
return DefaultActivitySettings.defaultGameModeValue;
}
static String getTimerValueFromUnsafe(String timerValue) {
if (DefaultGameSettings.allowedDifficultyLevelValues.contains(timerValue)) {
if (DefaultActivitySettings.allowedDifficultyLevelValues.contains(timerValue)) {
return timerValue;
}
return DefaultGameSettings.difficultyLevelValue;
return DefaultActivitySettings.difficultyLevelValue;
}
factory GameSettings.createDefault() {
return GameSettings(
itemsCount: DefaultGameSettings.defaultGameModeValue,
timerValue: DefaultGameSettings.difficultyLevelValue,
factory ActivitySettings.createDefault() {
return ActivitySettings(
itemsCount: DefaultActivitySettings.defaultGameModeValue,
timerValue: DefaultActivitySettings.difficultyLevelValue,
);
}
void dump() {
printlog('$GameSettings:');
printlog(' ${DefaultGameSettings.parameterCodeGameMode}: $itemsCount');
printlog(' ${DefaultGameSettings.parameterCodeDifficultyLevel}: $timerValue');
printlog('$ActivitySettings:');
printlog(' ${DefaultActivitySettings.parameterCodeGameMode}: $itemsCount');
printlog(' ${DefaultActivitySettings.parameterCodeDifficultyLevel}: $timerValue');
printlog('');
}
@override
String toString() {
return '$GameSettings(${toJson()})';
return '$ActivitySettings(${toJson()})';
}
Map<String, dynamic>? toJson() {
return <String, dynamic>{
DefaultGameSettings.parameterCodeGameMode: itemsCount,
DefaultGameSettings.parameterCodeDifficultyLevel: timerValue,
DefaultActivitySettings.parameterCodeGameMode: itemsCount,
DefaultActivitySettings.parameterCodeDifficultyLevel: timerValue,
};
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/cubit/game_cubit.dart';
import 'package:reversi/models/game/game.dart';
import 'package:reversi/ui/layouts/parameters_layout.dart';
import 'package:reversi/ui/layouts/game_layout.dart';
class PageGame extends StatelessWidget {
const PageGame({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
return currentGame.isRunning
? const GameLayout()
: ParametersLayout(canResume: currentGame.canBeResumed);
},
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/config/menu.dart';
import 'package:reversi/cubit/nav_cubit.dart';
import 'package:reversi/ui/widgets/global_app_bar.dart';
import 'package:reversi/common/config/activity_page.dart';
import 'package:reversi/common/config/screen.dart';
import 'package:reversi/common/cubit/nav/nav_cubit_screens.dart';
import 'package:reversi/common/ui/nav/global_app_bar.dart';
import 'package:reversi/common/ui/nav/bottom_nav_bar.dart';
class SkeletonScreen extends StatelessWidget {
const SkeletonScreen({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<NavCubitScreen, int>(
builder: (BuildContext context, int screenIndex) {
return Scaffold(
appBar: const GlobalAppBar(),
extendBodyBehindAppBar: false,
body: Material(
color: Theme.of(context).colorScheme.surface,
child: BlocBuilder<NavCubit, int>(
builder: (BuildContext context, int pageIndex) {
return Padding(
child: Padding(
padding: const EdgeInsets.only(
top: 8,
left: 2,
right: 2,
),
child: Menu.getPageWidget(pageIndex),
);
},
child: Screen.getWidget(screenIndex),
),
),
backgroundColor: Theme.of(context).colorScheme.surface,
bottomNavigationBar: ActivityPage.displayBottomNavBar ? const BottomNavBar() : null,
);
},
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/cubit/game_cubit.dart';
import 'package:reversi/cubit/activity/activity_cubit.dart';
class DeleteSavedGameButton extends StatelessWidget {
const DeleteSavedGameButton({super.key});
......@@ -11,7 +11,7 @@ class DeleteSavedGameButton extends StatelessWidget {
return StyledButton(
color: Colors.grey,
onPressed: () {
BlocProvider.of<GameCubit>(context).deleteSavedGame();
BlocProvider.of<ActivityCubit>(context).deleteSavedActivity();
},
child: const Image(
image: AssetImage('assets/ui/button_delete_saved_game.png'),
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/cubit/game_cubit.dart';
import 'package:reversi/common/cubit/nav/nav_cubit_pages.dart';
import 'package:reversi/cubit/activity/activity_cubit.dart';
class QuitGameButton extends StatelessWidget {
const QuitGameButton({super.key});
......@@ -11,7 +13,8 @@ class QuitGameButton extends StatelessWidget {
return StyledButton(
color: Colors.red,
onPressed: () {
BlocProvider.of<GameCubit>(context).quitGame();
BlocProvider.of<ActivityCubit>(context).quitActivity();
BlocProvider.of<NavCubitPage>(context).goToPageHome();
},
child: const Image(
image: AssetImage('assets/ui/button_back.png'),
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/cubit/game_cubit.dart';
import 'package:reversi/cubit/settings_game_cubit.dart';
import 'package:reversi/cubit/settings_global_cubit.dart';
import 'package:reversi/common/cubit/nav/nav_cubit_pages.dart';
import 'package:reversi/cubit/activity/activity_cubit.dart';
import 'package:reversi/cubit/settings/settings_activity_cubit.dart';
import 'package:reversi/cubit/settings/settings_global_cubit.dart';
class StartNewGameButton extends StatelessWidget {
const StartNewGameButton({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<GameSettingsCubit, GameSettingsState>(
builder: (BuildContext context, GameSettingsState gameSettingsState) {
return BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>(
builder: (BuildContext context, ActivitySettingsState activitySettingsState) {
return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>(
builder: (BuildContext context, GlobalSettingsState globalSettingsState) {
return StyledButton(
color: Colors.blue,
onPressed: () {
BlocProvider.of<GameCubit>(context).startNewGame(
gameSettings: gameSettingsState.settings,
BlocProvider.of<ActivityCubit>(context).startNewActivity(
activitySettings: activitySettingsState.settings,
globalSettings: globalSettingsState.settings,
);
BlocProvider.of<NavCubitPage>(context).goToPageGame();
},
child: const Image(
image: AssetImage('assets/ui/button_start.png'),
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/cubit/game_cubit.dart';
import 'package:reversi/common/cubit/nav/nav_cubit_pages.dart';
import 'package:reversi/cubit/activity/activity_cubit.dart';
class ResumeSavedGameButton extends StatelessWidget {
const ResumeSavedGameButton({super.key});
......@@ -11,7 +13,8 @@ class ResumeSavedGameButton extends StatelessWidget {
return StyledButton(
color: Colors.blue,
onPressed: () {
BlocProvider.of<GameCubit>(context).resumeSavedGame();
BlocProvider.of<ActivityCubit>(context).resumeSavedActivity();
BlocProvider.of<NavCubitPage>(context).goToPageGame();
},
child: const Image(
image: AssetImage('assets/ui/button_resume_game.png'),
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/cubit/game_cubit.dart';
import 'package:reversi/game/game_engine.dart';
import 'package:reversi/models/game/game.dart';
class GameBoardWidget extends StatelessWidget {
const GameBoardWidget({super.key});
......@@ -11,14 +8,7 @@ class GameBoardWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
printlog(currentGame.toString());
return const GameEngine();
},
),
child: const GameEngine(),
);
}
}
import 'package:flutter/material.dart';
import 'package:reversi/models/game/game_board.dart';
import 'package:reversi/models/game/game_model.dart';
import 'package:reversi/models/activity/game_board.dart';
import 'package:reversi/models/activity/game_model.dart';
import 'package:reversi/config/styling.dart';
class GameBoardDisplay extends StatelessWidget {
......
import 'package:flutter/material.dart';
import 'package:reversi/models/game/game_board.dart';
import 'package:reversi/models/game/game_model.dart';
import 'package:reversi/models/activity/game_board.dart';
import 'package:reversi/models/activity/game_model.dart';
import 'package:reversi/config/styling.dart';
class ScoreBox extends StatelessWidget {
......
......@@ -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: A reversi game application.
publish_to: "none"
version: 0.2.1+22
version: 0.3.0+23
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