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

Use activity buttons widgets from flutter_custom_toolbox

parent 7ebc982c
No related branches found
No related tags found
1 merge request!28Resolve "Use activity buttons widgets from flutter_custom_toolbox"
Pipeline #6922 passed
This commit is part of merge request !28. Comments created here will be created in the context of that merge request.
Showing
with 144 additions and 223 deletions
assets/ui/button_back.png

2.37 KiB

assets/ui/button_delete_saved_game.png

7.65 KiB

assets/ui/button_resume_game.png

3.35 KiB

assets/ui/button_start.png

2.99 KiB

Use activity buttons widgets from flutter_custom_toolbox.
Utilisation des boutons d'activité à partir du package flutter_custom_toolbox.
...@@ -22,17 +22,12 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { ...@@ -22,17 +22,12 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget {
final List<Widget> menuActions = []; final List<Widget> menuActions = [];
if (currentActivity.isRunning && !currentActivity.isFinished) { if (currentActivity.isRunning && !currentActivity.isFinished) {
menuActions.add(StyledButton( menuActions.add(ActivityButtonQuit(
color: Colors.red,
onPressed: () {}, onPressed: () {},
onLongPress: () { onLongPress: () {
BlocProvider.of<ActivityCubit>(context).quitActivity(); BlocProvider.of<ActivityCubit>(context).quitActivity();
BlocProvider.of<NavCubitPage>(context).goToPageHome(); BlocProvider.of<NavCubitPage>(context).goToPageHome();
}, },
child: const Image(
image: AssetImage('assets/ui/button_back.png'),
fit: BoxFit.fill,
),
)); ));
} else { } else {
if (pageIndex == Screen.indexActivity) { if (pageIndex == Screen.indexActivity) {
......
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:reversi/common/cubit/nav/nav_cubit_pages.dart';
import 'package:reversi/common/ui/parameters/parameter_widget.dart'; import 'package:reversi/common/ui/parameters/parameter_widget.dart';
import 'package:reversi/config/default_activity_settings.dart'; import 'package:reversi/config/default_activity_settings.dart';
...@@ -9,9 +10,6 @@ import 'package:reversi/cubit/activity/activity_cubit.dart'; ...@@ -9,9 +10,6 @@ import 'package:reversi/cubit/activity/activity_cubit.dart';
import 'package:reversi/cubit/settings/settings_activity_cubit.dart'; import 'package:reversi/cubit/settings/settings_activity_cubit.dart';
import 'package:reversi/cubit/settings/settings_global_cubit.dart'; import 'package:reversi/cubit/settings/settings_global_cubit.dart';
import 'package:reversi/models/activity/activity.dart'; import 'package:reversi/models/activity/activity.dart';
import 'package:reversi/ui/widgets/actions/button_delete_saved_game.dart';
import 'package:reversi/ui/widgets/actions/button_game_start_new.dart';
import 'package:reversi/ui/widgets/actions/button_resume_saved_game.dart';
class PageParameters extends StatelessWidget { class PageParameters extends StatelessWidget {
const PageParameters({super.key}); const PageParameters({super.key});
...@@ -20,67 +18,92 @@ class PageParameters extends StatelessWidget { ...@@ -20,67 +18,92 @@ class PageParameters extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocBuilder<ActivityCubit, ActivityState>( return BlocBuilder<ActivitySettingsCubit, ActivitySettingsState>(
builder: (BuildContext context, ActivityState activityState) { builder: (BuildContext context, ActivitySettingsState activitySettingsState) {
final Activity currentActivity = activityState.currentActivity; return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>(
builder: (BuildContext context, GlobalSettingsState globalSettingsState) {
final List<Widget> lines = []; return BlocBuilder<ActivityCubit, ActivityState>(
builder: (BuildContext context, ActivityState activityState) {
// Game settings final Activity currentActivity = activityState.currentActivity;
for (String code in DefaultActivitySettings.availableParameters) {
lines.add(Row( final List<Widget> lines = [];
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: buildParametersLine( // Activity settings
code: code, for (String code in DefaultActivitySettings.availableParameters) {
isGlobal: false, lines.add(Row(
), mainAxisAlignment: MainAxisAlignment.spaceBetween,
)); children: buildParametersLine(
code: code,
lines.add(SizedBox(height: separatorHeight)); isGlobal: false,
} ),
));
lines.add(Expanded(
child: SizedBox(height: separatorHeight), lines.add(SizedBox(height: separatorHeight));
)); }
if (currentActivity.canBeResumed == false) { lines.add(Expanded(
// Start new game child: SizedBox(height: separatorHeight),
lines.add( ));
const AspectRatio(
aspectRatio: 3, if (currentActivity.canBeResumed == false) {
child: StartNewGameButton(), // Start new activity
), lines.add(
); AspectRatio(
} else { aspectRatio: 3,
// Resume game child: ActivityButtonStartNew(
lines.add(const AspectRatio( onPressed: () {
aspectRatio: 3, BlocProvider.of<ActivityCubit>(context).startNewActivity(
child: ResumeSavedGameButton(), activitySettings: activitySettingsState.settings,
)); globalSettings: globalSettingsState.settings,
// Delete saved game );
lines.add(SizedBox.square( BlocProvider.of<NavCubitPage>(context).goToPageGame();
dimension: MediaQuery.of(context).size.width / 5, },
child: const DeleteSavedGameButton(), ),
)); ),
} );
} else {
lines.add(SizedBox(height: separatorHeight)); // Resume activity
lines.add(AspectRatio(
// Global settings aspectRatio: 3,
for (String code in DefaultGlobalSettings.availableParameters) { child: ActivityButtonResumeSaved(
lines.add(Row( onPressed: () {
mainAxisAlignment: MainAxisAlignment.spaceBetween, BlocProvider.of<ActivityCubit>(context).resumeSavedActivity();
children: buildParametersLine( BlocProvider.of<NavCubitPage>(context).goToPageGame();
code: code, },
isGlobal: true, ),
), ));
)); // Delete saved activity
lines.add(SizedBox.square(
lines.add(SizedBox(height: separatorHeight)); dimension: MediaQuery.of(context).size.width / 5,
} child: ActivityButtonDeleteSaved(
onPressed: () {
return Column( BlocProvider.of<ActivityCubit>(context).deleteSavedActivity();
children: lines, },
),
));
}
lines.add(SizedBox(height: separatorHeight));
// Global settings
for (String code in DefaultGlobalSettings.availableParameters) {
lines.add(Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: buildParametersLine(
code: code,
isGlobal: true,
),
));
lines.add(SizedBox(height: separatorHeight));
}
return Column(
children: lines,
);
},
);
},
); );
}, },
); );
......
...@@ -7,11 +7,14 @@ import 'dart:async'; ...@@ -7,11 +7,14 @@ import 'dart:async';
import 'package:async/async.dart'; import 'package:async/async.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/ai/move_finder.dart'; import 'package:reversi/ai/move_finder.dart';
import 'package:reversi/common/cubit/nav/nav_cubit_pages.dart';
import 'package:reversi/config/styling.dart'; import 'package:reversi/config/styling.dart';
import 'package:reversi/cubit/activity/activity_cubit.dart';
import 'package:reversi/models/activity/game_board.dart'; import 'package:reversi/models/activity/game_board.dart';
import 'package:reversi/models/activity/game_model.dart'; import 'package:reversi/models/activity/game_model.dart';
import 'package:reversi/ui/widgets/actions/button_game_quit.dart';
import 'package:reversi/ui/widgets/game/game_board_display.dart'; import 'package:reversi/ui/widgets/game/game_board_display.dart';
import 'package:reversi/ui/widgets/game/score_box.dart'; import 'package:reversi/ui/widgets/game/score_box.dart';
import 'package:reversi/ui/widgets/game/thinking_indicator.dart'; import 'package:reversi/ui/widgets/game/thinking_indicator.dart';
...@@ -142,35 +145,55 @@ class _GameEngineState extends State<GameEngine> { ...@@ -142,35 +145,55 @@ class _GameEngineState extends State<GameEngine> {
} }
Widget _buildGameEnd(GameModel model) { Widget _buildGameEnd(GameModel model) {
Image decorationImage = Image( if (1 == 1) {
image: AssetImage(model.gameResultString == 'black' if (1 == 1) {
? 'assets/ui/game_win.png' Image decorationImage = Image(
: 'assets/ui/placeholder.png'), image: AssetImage(model.gameResultString == 'black'
fit: BoxFit.fill, ? 'assets/ui/game_win.png'
); : 'assets/ui/placeholder.png'),
fit: BoxFit.fill,
);
return Container( final double width = MediaQuery.of(context).size.width;
margin: const EdgeInsets.all(2),
padding: const EdgeInsets.all(2), return Container(
child: Table( margin: const EdgeInsets.all(2),
defaultColumnWidth: const IntrinsicColumnWidth(), padding: const EdgeInsets.all(2),
defaultVerticalAlignment: TableCellVerticalAlignment.bottom, child: Table(
children: [ defaultColumnWidth: FixedColumnWidth(width / 3.1),
TableRow( defaultVerticalAlignment: TableCellVerticalAlignment.bottom,
children: [ children: [
Column( TableRow(
children: [decorationImage], children: [
), Column(
Column( mainAxisAlignment: MainAxisAlignment.center,
children: [QuitGameButton()], crossAxisAlignment: CrossAxisAlignment.center,
), children: [decorationImage],
Column( ),
children: [decorationImage], Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ActivityButtonQuit(
onPressed: () {
BlocProvider.of<ActivityCubit>(context).quitActivity();
BlocProvider.of<NavCubitPage>(context).goToPageHome();
},
)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [decorationImage],
),
],
), ),
], ],
), ),
], );
), }
); }
return SizedBox.shrink();
} }
} }
...@@ -95,10 +95,6 @@ class MyApp extends StatelessWidget { ...@@ -95,10 +95,6 @@ class MyApp extends StatelessWidget {
final List<String> assets = []; final List<String> assets = [];
const List<String> gameImages = [ const List<String> gameImages = [
'button_back',
'button_delete_saved_game',
'button_resume_game',
'button_start',
'game_fail', 'game_fail',
'game_win', 'game_win',
'placeholder', 'placeholder',
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:reversi/cubit/activity/activity_cubit.dart';
class DeleteSavedGameButton extends StatelessWidget {
const DeleteSavedGameButton({super.key});
@override
Widget build(BuildContext context) {
return StyledButton(
color: Colors.grey,
onPressed: () {
BlocProvider.of<ActivityCubit>(context).deleteSavedActivity();
},
child: const Image(
image: AssetImage('assets/ui/button_delete_saved_game.png'),
fit: BoxFit.fill,
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.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});
@override
Widget build(BuildContext context) {
return StyledButton(
color: Colors.red,
onPressed: () {
BlocProvider.of<ActivityCubit>(context).quitActivity();
BlocProvider.of<NavCubitPage>(context).goToPageHome();
},
child: const Image(
image: AssetImage('assets/ui/button_back.png'),
fit: BoxFit.fill,
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.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<ActivitySettingsCubit, ActivitySettingsState>(
builder: (BuildContext context, ActivitySettingsState activitySettingsState) {
return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>(
builder: (BuildContext context, GlobalSettingsState globalSettingsState) {
return StyledButton(
color: Colors.blue,
onPressed: () {
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'),
fit: BoxFit.fill,
),
);
},
);
},
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.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});
@override
Widget build(BuildContext context) {
return StyledButton(
color: Colors.blue,
onPressed: () {
BlocProvider.of<ActivityCubit>(context).resumeSavedActivity();
BlocProvider.of<NavCubitPage>(context).goToPageGame();
},
child: const Image(
image: AssetImage('assets/ui/button_resume_game.png'),
fit: BoxFit.fill,
),
);
}
}
...@@ -122,11 +122,11 @@ packages: ...@@ -122,11 +122,11 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
path: "." path: "."
ref: "0.3.0" ref: "0.4.0"
resolved-ref: b24e16ca0cf72bde23640c72020d5c9da2e00e62 resolved-ref: eb9c090bd00d73324eab8737f74b3339cc24c9e8
url: "https://git.harrault.fr/android/flutter-toolbox.git" url: "https://git.harrault.fr/android/flutter-toolbox.git"
source: git source: git
version: "0.3.0" version: "0.4.0"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:
......
...@@ -3,7 +3,7 @@ description: A reversi game application. ...@@ -3,7 +3,7 @@ description: A reversi game application.
publish_to: "none" publish_to: "none"
version: 0.3.1+24 version: 0.3.2+25
environment: environment:
sdk: "^3.0.0" sdk: "^3.0.0"
...@@ -16,7 +16,7 @@ dependencies: ...@@ -16,7 +16,7 @@ dependencies:
flutter_custom_toolbox: flutter_custom_toolbox:
git: git:
url: https://git.harrault.fr/android/flutter-toolbox.git url: https://git.harrault.fr/android/flutter-toolbox.git
ref: 0.3.0 ref: 0.4.0
# specific # specific
async: ^2.11.0 async: ^2.11.0
......
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path transform="matrix(1.3783 .61747 -.61747 1.3783 45.198 93.762)" d="m11.645-14.603-44.77-4.6003 26.369-36.472z" fill="#fff" stroke="#950e4f" stroke-linecap="round" stroke-linejoin="round" stroke-width="7.2832"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="m76.652 23.303-3.6441 58.302c-0.28153 4.5103-4.0223 8.0241-8.5413 8.0241h-35.27c-4.5189 0-8.2598-3.5138-8.5413-8.0241l-3.6441-58.302h-5.4824c-1.7723 0-3.2093-1.437-3.2093-3.2093 0-1.773 1.437-3.2093 3.2093-3.2093h70.605c1.7723 0 3.2093 1.4363 3.2093 3.2093 0 1.7723-1.437 3.2093-3.2093 3.2093zm-6.8314 0h-45.979l3.0819 55.867c0.12535 2.268 2.0008 4.0433 4.2732 4.0433h31.268c2.2724 0 4.1478-1.7752 4.2732-4.0433zm-22.99 6.4188c1.6541 0 2.9952 1.3411 2.9952 2.9952v41.08c0 1.6541-1.3411 2.9952-2.9952 2.9952-1.6542 0-2.9952-1.3411-2.9952-2.9952v-41.08c0-1.6541 1.3411-2.9952 2.9952-2.9952zm-12.837 0c1.6756 0 3.0553 1.3181 3.1312 2.9921l1.8776 41.3c0.06665 1.4664-1.0681 2.7087-2.5345 2.7762-0.04011 0.0015-0.08024 0.0021-0.12108 0.0021-1.5595 0-2.8476-1.2193-2.9328-2.7774l-2.253-41.3c-0.08524-1.5646 1.114-2.9012 2.6779-2.9864 0.05157-0.0029 0.10317-0.0042 0.15474-0.0042zm25.675 0c1.5667 0 2.8361 1.2694 2.8361 2.8361 0 0.05156-6.87e-4 0.10317-0.0036 0.15474l-2.2416 41.088c-0.09171 1.6778-1.4786 2.991-3.1586 2.991-1.5667 0-2.8361-1.2694-2.8361-2.8361 0-0.05156 7.31e-4 -0.10315 0.0036-0.15474l2.2417-41.088c0.09172-1.6778 1.4786-2.991 3.1586-2.991zm-21.397-25.675h17.117c4.7265 0 8.5578 3.8313 8.5578 8.5578v4.2795h-34.231v-4.2795c0-4.7265 3.8313-8.5578 8.5578-8.5578zm0.42837 6.4188c-1.4184 0-2.5675 1.1491-2.5675 2.5675v3.8512h21.394v-3.8512c0-1.4184-1.1491-2.5675-2.5675-2.5675z" fill="#fff" fill-rule="evenodd" stroke="#050200"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-5.618)" fill="#fff" stroke="#105ea2" stroke-linecap="round" stroke-linejoin="round"><path transform="matrix(-1.3783 -.61747 .61747 -1.3783 55.567 -.086035)" d="m11.645-14.603-44.77-4.6003 26.369-36.472z" stroke-width="7.2832"/><path d="m15.535 12.852 2e-3 67.973z" stroke-width="11"/></g></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path transform="matrix(-1.3783 -.61747 .61747 -1.3783 46.954 -.086035)" d="m11.645-14.603-44.77-4.6003 26.369-36.472z" fill="#fff" stroke="#105ea2" stroke-linecap="round" stroke-linejoin="round" stroke-width="7.2832"/></svg>
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