From c2a9d4ab177b628c47cefde26f16fabe3d06b3d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Wed, 8 Sep 2021 15:29:42 +0200 Subject: [PATCH] Add restart game button in title bar --- android/gradle.properties | 4 +- assets/icons/button_restart.png | Bin 8633 -> 8471 bytes .../metadata/android/en-US/changelogs/3.txt | 1 + .../metadata/android/fr-FR/changelogs/3.txt | 1 + icons/button_restart.svg | 2 +- lib/main.dart | 83 +++++++++++------- lib/thinking_indicator.dart | 4 +- 7 files changed, 59 insertions(+), 36 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/3.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/3.txt diff --git a/android/gradle.properties b/android/gradle.properties index 818e87b..db7a1ee 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.2 -app.versionCode=2 +app.versionName=0.0.3 +app.versionCode=3 diff --git a/assets/icons/button_restart.png b/assets/icons/button_restart.png index 389eabc630dcb6d973aae1b616e1783dbc414ca6..7c52b13b4e4d34bc58fea4b71ed7e0872c759bf1 100644 GIT binary patch delta 8450 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 delta 8614 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 diff --git a/fastlane/metadata/android/en-US/changelogs/3.txt b/fastlane/metadata/android/en-US/changelogs/3.txt new file mode 100644 index 0000000..3c8a935 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/3.txt @@ -0,0 +1 @@ +Add a restart game button in title bar, improve layout diff --git a/fastlane/metadata/android/fr-FR/changelogs/3.txt b/fastlane/metadata/android/fr-FR/changelogs/3.txt new file mode 100644 index 0000000..96f04d6 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/3.txt @@ -0,0 +1 @@ +Ajout d'un bouton pour recommencer la partie dans la barre de titre, amélioration de l'agencement diff --git a/icons/button_restart.svg b/icons/button_restart.svg index 1d18f3b..0b857a6 100644 --- a/icons/button_restart.svg +++ b/icons/button_restart.svg @@ -1,2 +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"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#49a1ee" stroke="#fff" stroke-width=".238"/><switch transform="matrix(.69484 0 0 .69484 12.09 12.096)" fill="#fefeff" stroke="#105ca1" stroke-width="5.7567"><foreignObject width="1" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/"/><g fill="#fefeff" stroke="#105ca1" stroke-width="5.7567"><g fill="#fefeff" stroke="#105ca1" stroke-width="5.7567"><path d="m43.3 91.8-18.3 5.5c-2.5 0.7-5.1-0.7-5.9-3.1-0.7-2.5 0.7-5.1 3.1-5.9l6.8-2c-12.4-7.3-20.8-20.8-20.8-36.3 0-17.3 10.6-32.2 25.6-38.6 3.1-1.3 6.6 1 6.6 4.3 0 1.9-1.1 3.6-2.8 4.3-11.8 5-20 16.5-20 30 0 12.2 6.8 22.9 16.8 28.4l-2.4-8.1c-0.7-2.5 0.7-5.1 3.1-5.9 2.5-0.7 5.1 0.7 5.9 3.1l5.5 18.3c0.7 2.6-0.7 5.2-3.2 6z"/><path d="m77.7 11.7-6.8 2c12.5 7.3 20.9 20.8 20.9 36.3 0 17.3-10.6 32.2-25.6 38.6-3.1 1.3-6.6-1-6.6-4.3 0-1.9 1.1-3.6 2.8-4.3 11.8-5 20-16.5 20-30 0-12.2-6.8-22.9-16.8-28.4l2.4 8.1c0.7 2.5-0.7 5.1-3.1 5.9-2.5 0.7-5.1-0.7-5.9-3.1l-5.5-18.3c-0.7-2.5 0.7-5.1 3.2-5.9l18.3-5.6c2.5-0.7 5.1 0.7 5.9 3.1 0.7 2.5-0.7 5.2-3.2 5.9z"/></g></g></switch></svg> +<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"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#ee494c" stroke="#fff" stroke-width=".238"/><switch transform="matrix(.69484 0 0 .69484 12.09 12.096)" fill="#fffefe" stroke="#a11010" stroke-width="5.7567"><foreignObject width="1" height="1" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/"/><g fill="#fffefe" stroke="#a11010" stroke-width="5.7567"><g fill="#fffefe" stroke="#a11010" stroke-width="5.7567"><path d="m43.3 91.8-18.3 5.5c-2.5 0.7-5.1-0.7-5.9-3.1-0.7-2.5 0.7-5.1 3.1-5.9l6.8-2c-12.4-7.3-20.8-20.8-20.8-36.3 0-17.3 10.6-32.2 25.6-38.6 3.1-1.3 6.6 1 6.6 4.3 0 1.9-1.1 3.6-2.8 4.3-11.8 5-20 16.5-20 30 0 12.2 6.8 22.9 16.8 28.4l-2.4-8.1c-0.7-2.5 0.7-5.1 3.1-5.9 2.5-0.7 5.1 0.7 5.9 3.1l5.5 18.3c0.7 2.6-0.7 5.2-3.2 6z"/><path d="m77.7 11.7-6.8 2c12.5 7.3 20.9 20.8 20.9 36.3 0 17.3-10.6 32.2-25.6 38.6-3.1 1.3-6.6-1-6.6-4.3 0-1.9 1.1-3.6 2.8-4.3 11.8-5 20-16.5 20-30 0-12.2-6.8-22.9-16.8-28.4l2.4 8.1c0.7 2.5-0.7 5.1-3.1 5.9-2.5 0.7-5.1-0.7-5.9-3.1l-5.5-18.3c-0.7-2.5 0.7-5.1 3.2-5.9l18.3-5.6c2.5-0.7 5.1 0.7 5.9 3.1 0.7 2.5-0.7 5.2-3.2 5.9z"/></g></g></switch></svg> diff --git a/lib/main.dart b/lib/main.dart index 75b66de..e94e129 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'package:async/async.dart'; +import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show SystemChrome, DeviceOrientation; import 'package:flutter/widgets.dart'; @@ -19,11 +20,7 @@ import 'thinking_indicator.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); - SystemChrome.setEnabledSystemUIOverlays([]); - SystemChrome.setPreferredOrientations([ - DeviceOrientation.portraitUp, - DeviceOrientation.portraitDown, - ]); + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); runApp(FlutterFlipApp()); } @@ -33,14 +30,14 @@ void main() { class FlutterFlipApp extends StatelessWidget { @override Widget build(BuildContext context) { - return WidgetsApp( - color: Color(0xffffffff), // Mandatory background color. - onGenerateRoute: (settings) { - return PageRouteBuilder<dynamic>( - settings: settings, - pageBuilder: (context, animation, secondaryAnimation) => GameScreen(), - ); - }, + + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + primaryColor: Colors.blue, + visualDensity: VisualDensity.adaptivePlatformDensity, + ), + home: GameScreen(), ); } } @@ -149,7 +146,7 @@ class _GameScreenState extends State<GameScreen> { return Container( padding: const EdgeInsets.symmetric( vertical: 3.0, - horizontal: 30.0, + horizontal: 25.0, ), decoration: (model.player == player) ? Styling.activePlayerIndicator @@ -157,8 +154,8 @@ class _GameScreenState extends State<GameScreen> { child: Row( children: <Widget>[ SizedBox( - width: 30.0, - height: 30.0, + width: 25.0, + height: 25.0, child: Image( image: AssetImage(assetImageName), fit: BoxFit.fill, @@ -171,7 +168,7 @@ class _GameScreenState extends State<GameScreen> { scoreText, textAlign: TextAlign.center, style: TextStyle( - fontSize: 50.0, + fontSize: 35.0, color: Color(0xff000000), ), ), @@ -282,6 +279,7 @@ class _GameScreenState extends State<GameScreen> { children: [ TableRow( children: [ + Column(children: [ decorationImage ]), Column(children: [ decorationImage ]), Column(children: [ GestureDetector( @@ -294,6 +292,7 @@ class _GameScreenState extends State<GameScreen> { ) ]), Column(children: [ decorationImage ]), + Column(children: [ decorationImage ]), ], ), ] @@ -303,20 +302,42 @@ class _GameScreenState extends State<GameScreen> { // Builds out the Widget tree using the most recent GameModel from the stream. Widget _buildWidgets(BuildContext context, GameModel model) { - return Container( - padding: EdgeInsets.only(top: 30.0, left: 15.0, right: 15.0), - decoration: Styling.mainWidgetDecoration, - child: SafeArea( - child: Column( - children: [ - _buildScoreBoxes(model), - SizedBox(height: 10), - _buildGameBoardDisplay(context, model), - SizedBox(height: 10), - _buildThinkingIndicator(model), - SizedBox(height: 30), - if (model.gameIsOver) _buildEndGameWidget(model), - ], + return Scaffold( + appBar: AppBar( + actions: [ + FlatButton( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + border: Border.all( + color: Colors.blue, + width: 4, + ), + ), + margin: EdgeInsets.all(8), + child: Image( + image: AssetImage('assets/icons/button_restart.png'), + fit: BoxFit.fill + ), + ), + onPressed: () => _restartController.add(GameModel(board: GameBoard())), + ) + ], + ), + body: Container( + padding: EdgeInsets.only(top: 5.0, left: 5.0, right: 5.0), + decoration: Styling.mainWidgetDecoration, + child: SafeArea( + child: Column( + children: [ + _buildScoreBoxes(model), + SizedBox(height: 5), + _buildGameBoardDisplay(context, model), + SizedBox(height: 5), + _buildThinkingIndicator(model), + if (model.gameIsOver) _buildEndGameWidget(model), + ], + ), ), ), ); diff --git a/lib/thinking_indicator.dart b/lib/thinking_indicator.dart index ad34780..ed62cc3 100644 --- a/lib/thinking_indicator.dart +++ b/lib/thinking_indicator.dart @@ -41,8 +41,8 @@ class _ThinkingIndicatorState child: SizedBox( height: widget.height, child: Opacity( - opacity: _opacityTween!.evaluate(animation!), - child: _opacityTween!.evaluate(animation!) != 0 + opacity: _opacityTween!.evaluate(animation), + child: _opacityTween!.evaluate(animation) != 0 ? _AnimatedCircles( color: widget.color, height: widget.height, -- GitLab