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

Use activity buttons widgets from flutter_custom_toolbox

parent 95f1e0ba
No related branches found
No related tags found
1 merge request!88Resolve "Use activity buttons widgets from flutter_custom_toolbox"
Pipeline #6926 passed
Showing
with 113 additions and 201 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,
),
)); ));
menuActions.add(const Spacer(flex: 6)); menuActions.add(const Spacer(flex: 6));
} else { } else {
......
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:sudoku/common/cubit/nav/nav_cubit_pages.dart';
import 'package:sudoku/common/ui/parameters/parameter_widget.dart'; import 'package:sudoku/common/ui/parameters/parameter_widget.dart';
import 'package:sudoku/config/default_activity_settings.dart'; import 'package:sudoku/config/default_activity_settings.dart';
...@@ -9,9 +10,6 @@ import 'package:sudoku/cubit/activity/activity_cubit.dart'; ...@@ -9,9 +10,6 @@ import 'package:sudoku/cubit/activity/activity_cubit.dart';
import 'package:sudoku/cubit/settings/settings_activity_cubit.dart'; import 'package:sudoku/cubit/settings/settings_activity_cubit.dart';
import 'package:sudoku/cubit/settings/settings_global_cubit.dart'; import 'package:sudoku/cubit/settings/settings_global_cubit.dart';
import 'package:sudoku/models/activity/activity.dart'; import 'package:sudoku/models/activity/activity.dart';
import 'package:sudoku/ui/widgets/actions/button_delete_saved_game.dart';
import 'package:sudoku/ui/widgets/actions/button_game_start_new.dart';
import 'package:sudoku/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,
);
},
);
},
); );
}, },
); );
......
...@@ -94,13 +94,9 @@ class MyApp extends StatelessWidget { ...@@ -94,13 +94,9 @@ class MyApp extends StatelessWidget {
List<String> getImagesAssets() { List<String> getImagesAssets() {
final List<String> assets = []; final List<String> assets = [];
final List<String> gameImages = [ const List<String> gameImages = [
'button_back',
'button_delete_saved_game',
'button_help', 'button_help',
'button_resume_game',
'button_show_conflicts', 'button_show_conflicts',
'button_start',
'cell_empty', 'cell_empty',
'game_win', 'game_win',
'placeholder', 'placeholder',
......
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:sudoku/common/cubit/nav/nav_cubit_pages.dart';
import 'package:sudoku/cubit/activity/activity_cubit.dart'; import 'package:sudoku/cubit/activity/activity_cubit.dart';
import 'package:sudoku/models/activity/activity.dart'; import 'package:sudoku/models/activity/activity.dart';
import 'package:sudoku/ui/widgets/actions/button_game_quit.dart';
class GameEndWidget extends StatelessWidget { class GameEndWidget extends StatelessWidget {
const GameEndWidget({super.key}); const GameEndWidget({super.key});
...@@ -20,26 +21,39 @@ class GameEndWidget extends StatelessWidget { ...@@ -20,26 +21,39 @@ class GameEndWidget extends StatelessWidget {
fit: BoxFit.fill, fit: BoxFit.fill,
); );
final double width = MediaQuery.of(context).size.width;
return Container( return Container(
margin: const EdgeInsets.all(2), margin: const EdgeInsets.all(2),
padding: const EdgeInsets.all(2), padding: const EdgeInsets.all(2),
child: Table( child: Table(
defaultColumnWidth: const IntrinsicColumnWidth(), defaultColumnWidth: FixedColumnWidth(width / 3.1),
defaultVerticalAlignment: TableCellVerticalAlignment.bottom, defaultVerticalAlignment: TableCellVerticalAlignment.bottom,
children: [ children: [
TableRow( TableRow(
children: [ children: [
Column( Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [decorationImage], children: [decorationImage],
), ),
Column( Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
currentActivity.animationInProgress == true currentActivity.animationInProgress == true
? decorationImage ? decorationImage
: const QuitGameButton() : ActivityButtonQuit(
onPressed: () {
BlocProvider.of<ActivityCubit>(context).quitActivity();
BlocProvider.of<NavCubitPage>(context).goToPageHome();
},
),
], ],
), ),
Column( Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [decorationImage], children: [decorationImage],
), ),
], ],
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:sudoku/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:sudoku/common/cubit/nav/nav_cubit_pages.dart';
import 'package:sudoku/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:sudoku/common/cubit/nav/nav_cubit_pages.dart';
import 'package:sudoku/cubit/activity/activity_cubit.dart';
import 'package:sudoku/cubit/settings/settings_activity_cubit.dart';
import 'package:sudoku/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:sudoku/common/cubit/nav/nav_cubit_pages.dart';
import 'package:sudoku/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,
),
);
}
}
...@@ -130,11 +130,11 @@ packages: ...@@ -130,11 +130,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 sudoku game application. ...@@ -3,7 +3,7 @@ description: A sudoku game application.
publish_to: "none" publish_to: "none"
version: 0.5.1+79 version: 0.5.2+80
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
badges: ^3.1.2 badges: ^3.1.2
......
<?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