diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f9b303465f19b5fbf5ec669cd083c9cc38ecda9a --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1 @@ +include: package:flutter_lints/flutter.yaml diff --git a/android/app/build.gradle b/android/app/build.gradle index 883ad5f3ba59dca043f79a828020cd52647e0146..200c1fe68c3da536efd66562631e4074d48e7d41 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -44,7 +44,7 @@ android { defaultConfig { applicationId "org.benoitharrault.minehunter" - minSdkVersion 16 + minSdkVersion flutter.minSdkVersion targetSdkVersion 30 versionCode appVersionCode.toInteger() versionName appVersionName diff --git a/android/gradle.properties b/android/gradle.properties index 05849ead61c8bdcb574c1cb517125337eb74aff4..b6a6bb0acf370ee61de0ddffdd6b58a55d1ee9f4 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.1.12 -app.versionCode=33 +app.versionName=0.1.13 +app.versionCode=34 diff --git a/fastlane/metadata/android/en-US/changelogs/34.txt b/fastlane/metadata/android/en-US/changelogs/34.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ab11150150fc75a46c9acc317890208e5a120b9 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/34.txt @@ -0,0 +1 @@ +Add automatic flutter linter. Apply code lints. Update dependencies. diff --git a/fastlane/metadata/android/fr-FR/changelogs/34.txt b/fastlane/metadata/android/fr-FR/changelogs/34.txt new file mode 100644 index 0000000000000000000000000000000000000000..609f5cf6e95a8df0799865df2e1ebde8fa981e5a --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/34.txt @@ -0,0 +1 @@ +Ajout d'un correcteur automatique de code. Application des corrections. Mise à jour des dépendances. diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart index 5f50e799ca406b7193306a75691d78ebdc36f8ec..3185ed5910a6d3b94398c0577e653a6dcd737ad2 100644 --- a/lib/entities/cell.dart +++ b/lib/entities/cell.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; + import 'package:minehunter/provider/data.dart'; import 'package:minehunter/utils/board_animate.dart'; import 'package:minehunter/utils/board_utils.dart'; @@ -20,18 +21,18 @@ class Cell { * Build widget for board cell, with interactions */ Container widget(Data myProvider, int row, int col) { - String imageAsset = this.getImageAssetName(myProvider); + String imageAsset = getImageAssetName(myProvider); return Container( decoration: BoxDecoration( - color: this.getBackgroundColor(myProvider), - border: this.getCellBorders(myProvider, row, col), + color: getBackgroundColor(myProvider), + border: getCellBorders(myProvider, row, col), ), child: GestureDetector( child: AnimatedSwitcher( duration: const Duration(milliseconds: 100), transitionBuilder: (Widget child, Animation<double> animation) { - return ScaleTransition(child: child, scale: animation); + return ScaleTransition(scale: animation, child: child); }, child: Image( image: AssetImage(imageAsset), @@ -66,46 +67,38 @@ class Cell { * Compute image asset name, from skin and cell value/state */ String getImageAssetName(Data myProvider) { - String imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_unknown.png'; + String imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_unknown.png'; bool showSolution = myProvider.gameWin || myProvider.gameFail; if (!showSolution) { // Running game - if (this.isExplored) { - if (this.isMined) { + if (isExplored) { + if (isMined) { // Boom - imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine.png'; + imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_mine.png'; } else { // Show mines count around - imageAsset = 'assets/skins/' + - myProvider.parameterSkin + - '_tile_' + - this.minesCountAround.toString() + - '.png'; + imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_$minesCountAround.png'; } } else { - if (this.isMarked) { + if (isMarked) { // Danger! - imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_flag.png'; + imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_flag.png'; } } } else { // Finished game - if (this.isMined) { - if (this.isExploded) { + if (isMined) { + if (isExploded) { // Mine exploded - imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine.png'; + imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_mine.png'; } else { // Mine not found - imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine_not_found.png'; + imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_mine_not_found.png'; } } else { // Show all mines counts - imageAsset = 'assets/skins/' + - myProvider.parameterSkin + - '_tile_' + - this.minesCountAround.toString() + - '.png'; + imageAsset = 'assets/skins/${myProvider.parameterSkin}_tile_$minesCountAround.png'; } } @@ -115,13 +108,13 @@ class Cell { // Compute cell background color, from cell state Color getBackgroundColor(Data myProvider) { if (myProvider.gameWin) { - return this.isAnimated ? Colors.green.shade400 : Colors.green.shade500; + return isAnimated ? Colors.green.shade400 : Colors.green.shade500; } if (myProvider.gameFail) { - return this.isAnimated ? Colors.pink.shade200 : Colors.pink.shade400; + return isAnimated ? Colors.pink.shade200 : Colors.pink.shade400; } - return this.isAnimated ? Colors.white : Colors.grey.shade200; + return isAnimated ? Colors.white : Colors.grey.shade200; } // Compute cell borders, from board size and cell state diff --git a/lib/layout/board.dart b/lib/layout/board.dart index 4137449af589de500ec6fa8d7e45d2099a16fbaa..857a84f9e8b107d12df5f3bfb6b3501bc6ac2e1b 100644 --- a/lib/layout/board.dart +++ b/lib/layout/board.dart @@ -1,11 +1,13 @@ import 'package:flutter/material.dart'; + +import 'package:minehunter/entities/cell.dart'; import 'package:minehunter/provider/data.dart'; class Board { static Container buildGameBoard(Data myProvider) { return Container( - margin: EdgeInsets.all(2), - padding: EdgeInsets.all(2), + margin: const EdgeInsets.all(2), + padding: const EdgeInsets.all(2), child: Column( children: [ buildGameTileset(myProvider), @@ -15,7 +17,7 @@ class Board { } static Widget buildGameTileset(Data myProvider) { - List cells = myProvider.cells; + List<List<Cell>> cells = myProvider.cells; Color borderColor = myProvider.reportMode ? Colors.blue : Colors.black; return Container( @@ -28,12 +30,12 @@ class Board { ), ), child: Table( - defaultColumnWidth: IntrinsicColumnWidth(), + defaultColumnWidth: const IntrinsicColumnWidth(), children: [ - for (var row = 0; row < myProvider.sizeVertical; row++) + for (int row = 0; row < myProvider.sizeVertical; row++) TableRow( children: [ - for (var col = 0; col < myProvider.sizeHorizontal; col++) + for (int col = 0; col < myProvider.sizeHorizontal; col++) Column( children: [ cells[row][col].widget(myProvider, row, col), @@ -50,15 +52,10 @@ class Board { String reportModeSuffix = myProvider.reportMode ? 'off' : 'on'; return TextButton( - child: Container( - child: Image( - image: AssetImage('assets/skins/' + - myProvider.parameterSkin + - '_indicator_walk_' + - reportModeSuffix + - '.png'), - fit: BoxFit.fill, - ), + child: Image( + image: AssetImage( + 'assets/skins/${myProvider.parameterSkin}_indicator_walk_$reportModeSuffix.png'), + fit: BoxFit.fill, ), onPressed: () => myProvider.updateReportMode(false), ); @@ -68,15 +65,10 @@ class Board { String reportModeSuffix = myProvider.reportMode ? 'on' : 'off'; return TextButton( - child: Container( - child: Image( - image: AssetImage('assets/skins/' + - myProvider.parameterSkin + - '_indicator_report_' + - reportModeSuffix + - '.png'), - fit: BoxFit.fill, - ), + child: Image( + image: AssetImage( + 'assets/skins/${myProvider.parameterSkin}_indicator_report_$reportModeSuffix.png'), + fit: BoxFit.fill, ), onPressed: () => myProvider.updateReportMode(true), ); @@ -86,15 +78,10 @@ class Board { String reportModeSuffix = myProvider.reportMode ? 'on' : 'off'; return TextButton( - child: Container( - child: Image( - image: AssetImage('assets/skins/' + - myProvider.parameterSkin + - '_button_mark_mine_' + - reportModeSuffix + - '.png'), - fit: BoxFit.fill, - ), + child: Image( + image: AssetImage( + 'assets/skins/${myProvider.parameterSkin}_button_mark_mine_$reportModeSuffix.png'), + fit: BoxFit.fill, ), onPressed: () => myProvider.updateReportMode(!myProvider.reportMode), ); @@ -102,12 +89,12 @@ class Board { static Widget buildToggleFlagModeLayout(Data myProvider) { Image paddingBlock = Image( - image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_empty.png'), + image: AssetImage('assets/skins/${myProvider.parameterSkin}_empty.png'), fit: BoxFit.fill, ); return Table( - defaultColumnWidth: IntrinsicColumnWidth(), + defaultColumnWidth: const IntrinsicColumnWidth(), children: [ TableRow( children: [ diff --git a/lib/layout/game.dart b/lib/layout/game.dart index 7ed0df0601b1df5e2d2313127b11a43d58ef510d..28cc6992a22131e8cac0906b9ae485cf78ffe640 100644 --- a/lib/layout/game.dart +++ b/lib/layout/game.dart @@ -1,33 +1,32 @@ import 'package:flutter/material.dart'; + import 'package:minehunter/layout/board.dart'; import 'package:minehunter/provider/data.dart'; import 'package:minehunter/utils/board_utils.dart'; import 'package:minehunter/utils/game_utils.dart'; class Game { - static Container buildGameWidget(Data myProvider) { + static Widget buildGameWidget(Data myProvider) { bool gameIsFinished = myProvider.gameWin || myProvider.gameFail; - return Container( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox(height: 8), - Game.buildTopIndicatorWidget(myProvider), - SizedBox(height: 2), - Expanded( - child: Board.buildGameBoard(myProvider), - ), - SizedBox(height: 2), - Container( - child: gameIsFinished - ? Game.buildEndGameMessage(myProvider) - : Board.buildToggleFlagModeLayout(myProvider), - ), - SizedBox(height: 8), - ], - ), + return Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 8), + Game.buildTopIndicatorWidget(myProvider), + const SizedBox(height: 2), + Expanded( + child: Board.buildGameBoard(myProvider), + ), + const SizedBox(height: 2), + Container( + child: gameIsFinished + ? Game.buildEndGameMessage(myProvider) + : Board.buildToggleFlagModeLayout(myProvider), + ), + const SizedBox(height: 8), + ], ); } @@ -37,13 +36,13 @@ class Game { double blockSize = 40; Image flagIconBlock = Image( - image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_flag.png'), + image: AssetImage('assets/skins/${myProvider.parameterSkin}_tile_flag.png'), fit: BoxFit.fill, height: blockSize, width: blockSize, ); Image mineIconBlock = Image( - image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_tile_mine.png'), + image: AssetImage('assets/skins/${myProvider.parameterSkin}_tile_mine.png'), fit: BoxFit.fill, height: blockSize, width: blockSize, @@ -86,17 +85,15 @@ class Game { static TextButton buildRestartGameButton(Data myProvider) { return TextButton( - child: Container( - child: Image( - image: AssetImage('assets/icons/button_back.png'), - fit: BoxFit.fill, - ), + child: const Image( + image: AssetImage('assets/icons/button_back.png'), + fit: BoxFit.fill, ), onPressed: () => GameUtils.quitGame(myProvider), ); } - static Container buildEndGameMessage(Data myProvider) { + static Widget buildEndGameMessage(Data myProvider) { Image decorationImage = Image( image: AssetImage(myProvider.gameWin ? 'assets/icons/game_win.png' @@ -107,10 +104,10 @@ class Game { ); return Container( - margin: EdgeInsets.all(2), - padding: EdgeInsets.all(2), + margin: const EdgeInsets.all(2), + padding: const EdgeInsets.all(2), child: Table( - defaultColumnWidth: IntrinsicColumnWidth(), + defaultColumnWidth: const IntrinsicColumnWidth(), children: [ TableRow( children: [ diff --git a/lib/layout/parameters.dart b/lib/layout/parameters.dart index 2f329d4106ce5a40cd48ee8bf1a14263a0082d26..5eef4e86923733fcdb9a25d93862b65174c20335 100644 --- a/lib/layout/parameters.dart +++ b/lib/layout/parameters.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; + import 'package:minehunter/provider/data.dart'; import 'package:minehunter/utils/game_utils.dart'; @@ -14,11 +15,11 @@ class Parameters { static double buttonPadding = 0.0; static double buttonMargin = 0.0; - static Container buildParametersSelector(Data myProvider) { + static Widget buildParametersSelector(Data myProvider) { List<Widget> lines = []; - List parameters = myProvider.availableParameters; - for (var index = 0; index < parameters.length; index++) { + List<String> parameters = myProvider.availableParameters; + for (int index = 0; index < parameters.length; index++) { lines.add(buildParameterSelector(myProvider, parameters[index])); lines.add(SizedBox(height: separatorHeight)); } @@ -28,36 +29,34 @@ class Parameters { ? buildResumeGameButton(myProvider) : buildStartNewGameButton(myProvider); - return Container( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox(height: separatorHeight), - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: lines, - ), - ), - SizedBox(height: separatorHeight), - Container( - child: buttonsBlock, + return Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox(height: separatorHeight), + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: lines, ), - ], - ), + ), + SizedBox(height: separatorHeight), + Container( + child: buttonsBlock, + ), + ], ); } static Image buildImageWidget(String imageAssetCode) { return Image( - image: AssetImage('assets/icons/' + imageAssetCode + '.png'), + image: AssetImage('assets/icons/$imageAssetCode.png'), fit: BoxFit.fill, ); } - static Container buildImageContainerWidget(String imageAssetCode) { + static Widget buildImageContainerWidget(String imageAssetCode) { return Container( child: buildImageWidget(imageAssetCode), ); @@ -68,18 +67,18 @@ class Parameters { children: [ TextButton( child: buildImageContainerWidget('placeholder'), - onPressed: () => null, + onPressed: () {}, ), ], ); } - static Container buildStartNewGameButton(Data myProvider) { + static Widget buildStartNewGameButton(Data myProvider) { return Container( margin: EdgeInsets.all(blockMargin), padding: EdgeInsets.all(blockPadding), child: Table( - defaultColumnWidth: IntrinsicColumnWidth(), + defaultColumnWidth: const IntrinsicColumnWidth(), children: [ TableRow( children: [ @@ -100,12 +99,12 @@ class Parameters { ); } - static Container buildResumeGameButton(Data myProvider) { + static Widget buildResumeGameButton(Data myProvider) { return Container( margin: EdgeInsets.all(blockMargin), padding: EdgeInsets.all(blockPadding), child: Table( - defaultColumnWidth: IntrinsicColumnWidth(), + defaultColumnWidth: const IntrinsicColumnWidth(), children: [ TableRow( children: [ @@ -134,18 +133,18 @@ class Parameters { } static Widget buildParameterSelector(Data myProvider, String parameterCode) { - List availableValues = myProvider.getParameterAvailableValues(parameterCode); + List<String> availableValues = myProvider.getParameterAvailableValues(parameterCode); if (availableValues.length == 1) { - return SizedBox(height: 0.0); + return const SizedBox(height: 0.0); } return Table( - defaultColumnWidth: IntrinsicColumnWidth(), + defaultColumnWidth: const IntrinsicColumnWidth(), children: [ TableRow( children: [ - for (var index = 0; index < availableValues.length; index++) + for (int index = 0; index < availableValues.length; index++) Column( children: [ _buildParameterButton(myProvider, parameterCode, availableValues[index]) @@ -162,7 +161,7 @@ class Parameters { String currentValue = myProvider.getParameterValue(parameterCode).toString(); bool isActive = (parameterValue == currentValue); - String imageAsset = parameterCode + '_' + parameterValue; + String imageAsset = '${parameterCode}_$parameterValue'; return TextButton( child: Container( diff --git a/lib/main.dart b/lib/main.dart index 867441b06fb9afb9c6e3494c356b64c9d2506457..b2ecccb6d0cc7b0c09c9b602e7dfebddff56d48b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,17 +1,20 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:minehunter/provider/data.dart'; -import 'package:minehunter/screens/home.dart'; import 'package:provider/provider.dart'; import 'package:overlay_support/overlay_support.dart'; +import 'package:minehunter/provider/data.dart'; +import 'package:minehunter/screens/home.dart'; + void main() { WidgetsFlutterBinding.ensureInitialized(); SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) - .then((value) => runApp(MyApp())); + .then((value) => runApp(const MyApp())); } class MyApp extends StatelessWidget { + const MyApp({super.key}); + @override Widget build(BuildContext context) { return ChangeNotifierProvider( @@ -24,9 +27,9 @@ class MyApp extends StatelessWidget { primaryColor: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), - home: Home(), + home: const Home(), routes: { - Home.id: (context) => Home(), + Home.id: (context) => const Home(), }, ), ); diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 2fd520e8c21a8fff47cabacbe0a1772e5cbf92e5..f1a385a5902ef22e832e63dc269aee25af344ad7 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -1,29 +1,30 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; +import 'package:minehunter/entities/cell.dart'; import 'package:shared_preferences/shared_preferences.dart'; class Data extends ChangeNotifier { // Configuration available parameters - List _availableParameters = ['level', 'size', 'skin']; - List get availableParameters => _availableParameters; + final List<String> _availableParameters = ['level', 'size', 'skin']; + List<String> get availableParameters => _availableParameters; // Configuration available values - List _availableLevelValues = ['easy', 'medium', 'hard', 'nightmare']; - List _availableSizeValues = ['10x10', '15x15', '20x20']; - List _availableSkinValues = ['default']; + final List<String> _availableLevelValues = ['easy', 'medium', 'hard', 'nightmare']; + final List<String> _availableSizeValues = ['10x10', '15x15', '20x20']; + final List<String> _availableSkinValues = ['default']; - List get availableLevelValues => _availableLevelValues; - List get availableSizeValues => _availableSizeValues; - List get availableSkinValues => _availableSkinValues; + List<String> get availableLevelValues => _availableLevelValues; + List<String> get availableSizeValues => _availableSizeValues; + List<String> get availableSkinValues => _availableSkinValues; // Application default configuration String _parameterLevel = ''; - String _parameterLevelDefault = 'medium'; + final String _parameterLevelDefault = 'medium'; String _parameterSize = ''; - String _parameterSizeDefault = '15x15'; + final String _parameterSizeDefault = '15x15'; String _parameterSkin = ''; - String _parameterSkinDefault = 'default'; + final String _parameterSkinDefault = 'default'; // Application current configuration String get parameterLevel => _parameterLevel; @@ -36,7 +37,7 @@ class Data extends ChangeNotifier { bool _animationInProgress = false; int _sizeVertical = 0; int _sizeHorizontal = 0; - List _cells = []; + List<List<Cell>> _cells = []; bool _isBoardMined = false; int _minesCount = 0; bool _reportMode = false; @@ -82,7 +83,7 @@ class Data extends ChangeNotifier { return ''; } - List getParameterAvailableValues(String parameterCode) { + List<String> getParameterAvailableValues(String parameterCode) { switch (parameterCode) { case 'level': { @@ -135,8 +136,8 @@ class Data extends ChangeNotifier { String computeCurrentGameState() { String cellsValues = ''; - for (var rowIndex = 0; rowIndex < _cells.length; rowIndex++) { - for (var colIndex = 0; colIndex < _cells[rowIndex].length; colIndex++) { + for (int rowIndex = 0; rowIndex < _cells.length; rowIndex++) { + for (int colIndex = 0; colIndex < _cells[rowIndex].length; colIndex++) { cellsValues += _cells[rowIndex][colIndex].isMined ? 'X' : ' '; cellsValues += _cells[rowIndex][colIndex].isExplored ? 'E' : ' '; cellsValues += _cells[rowIndex][colIndex].isMarked ? 'P' : ' '; @@ -215,8 +216,8 @@ class Data extends ChangeNotifier { notifyListeners(); } - List get cells => _cells; - void updateCells(List cells) { + List<List<Cell>> get cells => _cells; + void updateCells(List<List<Cell>> cells) { _cells = cells; notifyListeners(); } @@ -268,8 +269,8 @@ class Data extends ChangeNotifier { } void setAnimatedBackground(List animatedCellsPattern) { - for (var row = 0; row < _sizeVertical; row++) { - for (var col = 0; col < _sizeHorizontal; col++) { + for (int row = 0; row < _sizeVertical; row++) { + for (int col = 0; col < _sizeHorizontal; col++) { _cells[row][col].isAnimated = animatedCellsPattern[row][col]; } } @@ -277,8 +278,8 @@ class Data extends ChangeNotifier { } void resetAnimatedBackground() { - for (var row = 0; row < _sizeVertical; row++) { - for (var col = 0; col < _sizeHorizontal; col++) { + for (int row = 0; row < _sizeVertical; row++) { + for (int col = 0; col < _sizeHorizontal; col++) { _cells[row][col].isAnimated = false; } } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 1fd28a38919addb9bdc24cdcc07434f078d8280e..fa7236ac84c423b7ed4f47debfbc436ed7e6050a 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,19 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:overlay_support/overlay_support.dart'; + import 'package:minehunter/layout/game.dart'; import 'package:minehunter/layout/parameters.dart'; import 'package:minehunter/provider/data.dart'; import 'package:minehunter/utils/game_utils.dart'; -import 'package:provider/provider.dart'; -import 'package:overlay_support/overlay_support.dart'; class Home extends StatefulWidget { + const Home({super.key}); + static const String id = 'home'; @override - _HomeState createState() => _HomeState(); + HomeState createState() => HomeState(); } -class _HomeState extends State<Home> { +class HomeState extends State<Home> { @override void initState() { super.initState(); @@ -22,21 +25,27 @@ class _HomeState extends State<Home> { myProvider.initParametersValues(); } - List getImagesAssets(Data myProvider) { - List assets = []; + List<String> getImagesAssets(Data myProvider) { + final List<String> assets = []; - List gameImages = [ + final List<String> gameImages = [ 'button_back', 'button_start', 'game_fail', 'game_win', ]; - myProvider.availableLevelValues.forEach((level) => gameImages.add('level_' + level)); - myProvider.availableSizeValues.forEach((size) => gameImages.add('size_' + size)); + for (String level in myProvider.availableLevelValues) { + gameImages.add('level_$level'); + } + for (String size in myProvider.availableSizeValues) { + gameImages.add('size_$size'); + } - gameImages.forEach((image) => assets.add('assets/icons/' + image + '.png')); + for (String image in gameImages) { + assets.add('${'assets/icons/$image'}.png'); + } - List skinImages = [ + final List<String> skinImages = [ 'button_mark_mine_off', 'button_mark_mine_on', 'indicator_report_on', @@ -51,10 +60,12 @@ class _HomeState extends State<Home> { 'tile_unknown', ]; for (int value = 0; value < 9; value++) { - skinImages.add('tile_' + value.toString()); + skinImages.add('tile_$value'); } - skinImages.forEach((image) => assets.add('assets/skins/default_' + image + '.png')); + for (String image in skinImages) { + assets.add('${'assets/skins/default_$image'}.png'); + } assets.add('assets/skins/default_empty.png'); @@ -63,29 +74,27 @@ class _HomeState extends State<Home> { @override Widget build(BuildContext context) { - Data myProvider = Provider.of<Data>(context); + final Data myProvider = Provider.of<Data>(context); if (!myProvider.assetsPreloaded) { - List assets = getImagesAssets(myProvider); - assets.forEach((asset) => precacheImage(AssetImage(asset), context)); + final List<String> assets = getImagesAssets(myProvider); + for (String asset in assets) { + precacheImage(AssetImage(asset), context); + } myProvider.updateAssetsPreloaded(true); } - List<Widget> menuActions = []; + final List<Widget> menuActions = []; if (myProvider.gameIsRunning) { - menuActions = [ - TextButton( - child: Container( - child: Image( - image: AssetImage('assets/icons/button_back.png'), - fit: BoxFit.fill, - ), - ), - onPressed: () => toast('Long press to quit game...'), - onLongPress: () => GameUtils.quitGame(myProvider), + menuActions.add(TextButton( + child: const Image( + image: AssetImage('assets/icons/button_back.png'), + fit: BoxFit.fill, ), - ]; + onPressed: () => toast('Long press to quit game...'), + onLongPress: () => GameUtils.quitGame(myProvider), + )); } return Scaffold( diff --git a/lib/utils/board_animate.dart b/lib/utils/board_animate.dart index 5a83bfcda89ea5632a14e197970609052eb5a600..a85c2de5a9cdb5cb52e9196d5a8773620e7822f9 100644 --- a/lib/utils/board_animate.dart +++ b/lib/utils/board_animate.dart @@ -5,18 +5,18 @@ import 'package:minehunter/provider/data.dart'; class BoardAnimate { // Start game animation: blinking tiles - static List createStartGameAnimationPatterns(Data myProvider) { - List<List> patterns = []; - - int patternsCount = 4; - int sizeHorizontal = myProvider.sizeHorizontal; - int sizeVertical = myProvider.sizeVertical; - - for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) { - List<List> pattern = []; - for (var row = 0; row < sizeVertical; row++) { - List<bool> patternRow = []; - for (var col = 0; col < sizeHorizontal; col++) { + static List<List<List<bool>>> createStartGameAnimationPatterns(Data myProvider) { + final List<List<List<bool>>> patterns = []; + + const int patternsCount = 4; + final int sizeHorizontal = myProvider.sizeHorizontal; + final int sizeVertical = myProvider.sizeVertical; + + for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) { + final List<List<bool>> pattern = []; + for (int row = 0; row < sizeVertical; row++) { + final List<bool> patternRow = []; + for (int col = 0; col < sizeHorizontal; col++) { patternRow.add(((patternIndex + row + col) % 2 == 0)); } pattern.add(patternRow); @@ -28,33 +28,33 @@ class BoardAnimate { } // Failed game animation: explosions blowing from exploded mines - static List createExplosionAnimationPatterns(Data myProvider) { - List<List> patterns = []; + static List<List<List<bool>>> createExplosionAnimationPatterns(Data myProvider) { + final List<List<List<bool>>> patterns = []; - int sizeHorizontal = myProvider.sizeHorizontal; - int sizeVertical = myProvider.sizeVertical; + final int sizeHorizontal = myProvider.sizeHorizontal; + final int sizeVertical = myProvider.sizeVertical; - List explodedMines = []; - for (var row = 0; row < sizeVertical; row++) { - for (var col = 0; col < sizeHorizontal; col++) { + final List<List<int>> explodedMines = []; + for (int row = 0; row < sizeVertical; row++) { + for (int col = 0; col < sizeHorizontal; col++) { if (myProvider.cells[row][col].isExploded) { explodedMines.add([row, col]); } } } - if (explodedMines.length == 0) { + if (explodedMines.isEmpty) { explodedMines.add([(sizeVertical / 2).floor(), (sizeHorizontal / 2).floor()]); } - int patternsCount = max(sizeHorizontal, sizeVertical); + final int patternsCount = max(sizeHorizontal, sizeVertical); - for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) { - List<List> pattern = []; - for (var row = 0; row < sizeVertical; row++) { - List<bool> patternRow = []; - for (var col = 0; col < sizeHorizontal; col++) { + for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) { + final List<List<bool>> pattern = []; + for (int row = 0; row < sizeVertical; row++) { + final List<bool> patternRow = []; + for (int col = 0; col < sizeHorizontal; col++) { bool isHilighted = false; - for (var mineIndex = 0; mineIndex < explodedMines.length; mineIndex++) { + for (int mineIndex = 0; mineIndex < explodedMines.length; mineIndex++) { double distance = sqrt(pow((explodedMines[mineIndex][0] - row), 2) + pow((explodedMines[mineIndex][1] - col), 2)); isHilighted = isHilighted || ((patternIndex + distance) % 4 < 2); @@ -70,18 +70,18 @@ class BoardAnimate { } // Win game animation: rotating rays from center - static List createWinGameAnimationPatterns(Data myProvider) { - List<List> patterns = []; + static List<List<List<bool>>> createWinGameAnimationPatterns(Data myProvider) { + final List<List<List<bool>>> patterns = []; - int patternsCount = 20; - int sizeHorizontal = myProvider.sizeHorizontal; - int sizeVertical = myProvider.sizeVertical; + const int patternsCount = 20; + final int sizeHorizontal = myProvider.sizeHorizontal; + final int sizeVertical = myProvider.sizeVertical; - for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) { - List<List> pattern = []; - for (var row = 0; row < sizeVertical; row++) { + for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) { + List<List<bool>> pattern = []; + for (int row = 0; row < sizeVertical; row++) { List<bool> patternRow = []; - for (var col = 0; col < sizeHorizontal; col++) { + for (int col = 0; col < sizeHorizontal; col++) { double angle = 2 * atan2((sizeVertical / 2) - col, (sizeHorizontal / 2) - row); patternRow.add((angle + patternIndex / 3) % 2 < 1); } @@ -94,18 +94,18 @@ class BoardAnimate { } // Default multi-purpose animation: sliding stripes, from top left to right bottom - static List createDefaultAnimationPatterns(Data myProvider) { - List<List> patterns = []; - - int patternsCount = 16; - int sizeHorizontal = myProvider.sizeHorizontal; - int sizeVertical = myProvider.sizeVertical; - - for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) { - List<List> pattern = []; - for (var row = 0; row < sizeVertical; row++) { - List<bool> patternRow = []; - for (var col = 0; col < sizeHorizontal; col++) { + static List<List<List<bool>>> createDefaultAnimationPatterns(Data myProvider) { + final List<List<List<bool>>> patterns = []; + + const int patternsCount = 16; + final int sizeHorizontal = myProvider.sizeHorizontal; + final int sizeVertical = myProvider.sizeVertical; + + for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) { + final List<List<bool>> pattern = []; + for (int row = 0; row < sizeVertical; row++) { + final List<bool> patternRow = []; + for (int col = 0; col < sizeHorizontal; col++) { patternRow.add(((patternIndex + row + col) % 4 == 0)); } pattern.add(patternRow); @@ -117,7 +117,7 @@ class BoardAnimate { } static void startAnimation(Data myProvider, String animationType) { - List patterns = []; + List<List<List<bool>>> patterns = []; switch (animationType) { case 'start': @@ -133,21 +133,21 @@ class BoardAnimate { patterns = createDefaultAnimationPatterns(myProvider); } - int _patternIndex = patterns.length; + int patternIndex = patterns.length; myProvider.updateAnimationInProgress(true); - const interval = const Duration(milliseconds: 200); + const interval = Duration(milliseconds: 200); Timer.periodic( interval, (Timer timer) { - if (_patternIndex == 0) { + if (patternIndex == 0) { timer.cancel(); myProvider.resetAnimatedBackground(); myProvider.updateAnimationInProgress(false); } else { - _patternIndex--; - myProvider.setAnimatedBackground(patterns[_patternIndex]); + patternIndex--; + myProvider.setAnimatedBackground(patterns[patternIndex]); } }, ); diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart index 42437b1926df2411bef07abb3b4d3af95e0b64ac..c0300ad5cf96f0a1db4dc56a92c1493f3b1725e2 100644 --- a/lib/utils/board_utils.dart +++ b/lib/utils/board_utils.dart @@ -5,24 +5,24 @@ import 'package:minehunter/provider/data.dart'; class BoardUtils { static printGrid(List cells) { - final String isMined = 'X'; - final String isSafe = '.'; + const String isMined = 'X'; + const String isSafe = '.'; - final String mineFound = '#'; - final String wrongMarkedCell = '0'; - final String exploredSafeCell = '.'; - final String unkownState = ' '; + const String mineFound = '#'; + const String wrongMarkedCell = '0'; + const String exploredSafeCell = '.'; + const String unkownState = ' '; print(''); String line = '--'; - for (var i = 0; i < cells[0].length; i++) { + for (int i = 0; i < cells[0].length; i++) { line += '-'; } - print(line + ' ' + line); - for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) { + print('$line $line'); + for (int rowIndex = 0; rowIndex < cells.length; rowIndex++) { String currentLine = ''; String solvedLine = ''; - for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) { + for (int colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) { solvedLine += cells[rowIndex][colIndex].isMined ? isMined : isSafe; String cellString = unkownState; @@ -38,17 +38,17 @@ class BoardUtils { } currentLine += cellString; } - print('|' + currentLine + '| |' + solvedLine + '|'); + print('|$currentLine| |$solvedLine|'); } - print(line + ' ' + line); + print('$line $line'); print(''); } - static List createEmptyBoard(int sizeHorizontal, int sizeVertical) { - List cells = []; - for (var rowIndex = 0; rowIndex < sizeVertical; rowIndex++) { - List row = []; - for (var colIndex = 0; colIndex < sizeHorizontal; colIndex++) { + static List<List<Cell>> createEmptyBoard(int sizeHorizontal, int sizeVertical) { + final List<List<Cell>> cells = []; + for (int rowIndex = 0; rowIndex < sizeVertical; rowIndex++) { + final List<Cell> row = []; + for (int colIndex = 0; colIndex < sizeHorizontal; colIndex++) { row.add(Cell(false)); } cells.add(row); @@ -82,9 +82,9 @@ class BoardUtils { break; } - int minesCount = ((sizeHorizontal * sizeVertical) * minesCountRatio / 100).round(); + final int minesCount = ((sizeHorizontal * sizeVertical) * minesCountRatio / 100).round(); - print('Mines count: ' + minesCount.toString()); + print('Mines count: $minesCount'); return minesCount; } @@ -95,15 +95,15 @@ class BoardUtils { .updateCells(createEmptyBoard(myProvider.sizeHorizontal, myProvider.sizeVertical)); } - static List createBoard(Data myProvider, int forbiddenRow, int forbiddenCol) { - List cells = myProvider.cells; - int sizeHorizontal = myProvider.sizeHorizontal; - int sizeVertical = myProvider.sizeVertical; + static List<List<Cell>> createBoard(Data myProvider, int forbiddenRow, int forbiddenCol) { + final List<List<Cell>> cells = myProvider.cells; + final int sizeHorizontal = myProvider.sizeHorizontal; + final int sizeVertical = myProvider.sizeVertical; // Shuffle cells to put random mines, except on currently selected one - List allowedCells = []; - for (var row = 0; row < sizeVertical; row++) { - for (var col = 0; col < sizeHorizontal; col++) { + final List<List<int>> allowedCells = []; + for (int row = 0; row < sizeVertical; row++) { + for (int col = 0; col < sizeHorizontal; col++) { if (!((forbiddenRow == row) && (forbiddenCol == col))) { allowedCells.add([row, col]); } @@ -112,13 +112,13 @@ class BoardUtils { allowedCells.shuffle(); // Put random mines on board - for (var mineIndex = 0; mineIndex < myProvider.minesCount; mineIndex++) { + for (int mineIndex = 0; mineIndex < myProvider.minesCount; mineIndex++) { cells[allowedCells[mineIndex][0]][allowedCells[mineIndex][1]].isMined = true; } // Compute all mines counts on cells - for (var row = 0; row < sizeVertical; row++) { - for (var col = 0; col < sizeHorizontal; col++) { + for (int row = 0; row < sizeVertical; row++) { + for (int col = 0; col < sizeHorizontal; col++) { cells[row][col].minesCountAround = getMinesCountAround(cells, row, col); } } @@ -128,21 +128,21 @@ class BoardUtils { return cells; } - static List createBoardFromSavedState(Data myProvider, String savedBoard) { - List<List<Cell?>> board = []; - int boardSize = pow((savedBoard.length / 6), 1 / 2).round(); - String boardSizeAsString = boardSize.toString() + 'x' + boardSize.toString(); + static List<List<Cell>> createBoardFromSavedState(Data myProvider, String savedBoard) { + final List<List<Cell>> board = []; + final int boardSize = pow((savedBoard.length / 6), 1 / 2).round(); + final String boardSizeAsString = '${boardSize}x$boardSize'; myProvider.updateParameterSize(boardSizeAsString); int index = 0; - for (var rowIndex = 0; rowIndex < boardSize; rowIndex++) { - List<Cell?> row = []; - for (var colIndex = 0; colIndex < boardSize; colIndex++) { - bool isMined = (savedBoard[index++] == 'X'); - bool isExplored = (savedBoard[index++] == 'E'); - bool isMarked = (savedBoard[index++] == 'P'); - bool isExploded = (savedBoard[index++] == '*'); - int minesCountAround = int.parse(savedBoard[index++]); + for (int rowIndex = 0; rowIndex < boardSize; rowIndex++) { + final List<Cell> row = []; + for (int colIndex = 0; colIndex < boardSize; colIndex++) { + final bool isMined = (savedBoard[index++] == 'X'); + final bool isExplored = (savedBoard[index++] == 'E'); + final bool isMarked = (savedBoard[index++] == 'P'); + final bool isExploded = (savedBoard[index++] == '*'); + final int minesCountAround = int.parse(savedBoard[index++]); index++; // ";" Cell cell = Cell(isMined); @@ -171,10 +171,10 @@ class BoardUtils { myProvider.setCellAsExplored(row, col); if (myProvider.cells[row][col].minesCountAround == 0) { - List safeCells = getAllSafeCellsAround(myProvider.cells, row, col); - for (var safeCellIndex = 0; safeCellIndex < safeCells.length; safeCellIndex++) { - int safeCellRow = safeCells[safeCellIndex][0]; - int safeCellCol = safeCells[safeCellIndex][1]; + final List<List<int>> safeCells = getAllSafeCellsAround(myProvider.cells, row, col); + for (int safeCellIndex = 0; safeCellIndex < safeCells.length; safeCellIndex++) { + final int safeCellRow = safeCells[safeCellIndex][0]; + final int safeCellCol = safeCells[safeCellIndex][1]; if (!myProvider.cells[safeCellRow][safeCellCol].isExplored) { walkOnCell(myProvider, safeCellRow, safeCellCol); } @@ -182,17 +182,17 @@ class BoardUtils { } } - static List getAllSafeCellsAround(List cells, int row, int col) { - int sizeHorizontal = cells.length; - int sizeVertical = cells[0].length; + static List<List<int>> getAllSafeCellsAround(List cells, int row, int col) { + final int sizeHorizontal = cells.length; + final int sizeVertical = cells[0].length; - List safeCellsCoordinates = []; + final List<List<int>> safeCellsCoordinates = []; if (cells[row][col].minesCountAround == 0) { - for (var deltaRow = -1; deltaRow <= 1; deltaRow++) { - for (var deltaCol = -1; deltaCol <= 1; deltaCol++) { - int candidateRow = row + deltaRow; - int candidateCol = col + deltaCol; + for (int deltaRow = -1; deltaRow <= 1; deltaRow++) { + for (int deltaCol = -1; deltaCol <= 1; deltaCol++) { + final int candidateRow = row + deltaRow; + final int candidateCol = col + deltaCol; if ((candidateRow >= 0 && candidateRow < sizeVertical) && (candidateCol >= 0 && candidateCol < sizeHorizontal) && !cells[candidateRow][candidateCol].isExplored) { @@ -206,12 +206,12 @@ class BoardUtils { } static int getMinesCountAround(List cells, int row, int col) { - int sizeHorizontal = cells.length; - int sizeVertical = cells[0].length; + final int sizeHorizontal = cells.length; + final int sizeVertical = cells[0].length; int minesCountAround = 0; - for (var deltaRow = -1; deltaRow <= 1; deltaRow++) { - for (var deltaCol = -1; deltaCol <= 1; deltaCol++) { + for (int deltaRow = -1; deltaRow <= 1; deltaRow++) { + for (int deltaCol = -1; deltaCol <= 1; deltaCol++) { if ((row + deltaRow >= 0 && row + deltaRow < sizeVertical) && (col + deltaCol >= 0 && col + deltaCol < sizeHorizontal) && (cells[row + deltaRow][col + deltaCol].isMined)) { @@ -224,17 +224,17 @@ class BoardUtils { } static bool checkGameIsFinished(Data myProvider) { - List cells = myProvider.cells; - int sizeHorizontal = cells.length; - int sizeVertical = cells[0].length; + final List<List<Cell>> cells = myProvider.cells; + final int sizeHorizontal = cells.length; + final int sizeVertical = cells[0].length; printGrid(cells); myProvider.updateGameWin(false); myProvider.updateGameFail(false); - for (var row = 0; row < sizeVertical; row++) { - for (var col = 0; col < sizeHorizontal; col++) { + for (int row = 0; row < sizeVertical; row++) { + for (int col = 0; col < sizeHorizontal; col++) { // Walked on a mine if (cells[row][col].isExploded == true) { myProvider.updateGameFail(true); @@ -243,8 +243,8 @@ class BoardUtils { } } - for (var row = 0; row < sizeVertical; row++) { - for (var col = 0; col < sizeHorizontal; col++) { + for (int row = 0; row < sizeVertical; row++) { + for (int col = 0; col < sizeHorizontal; col++) { if ( // Mine not already found (cells[row][col].isMined == true && cells[row][col].isMarked == false) || @@ -264,10 +264,10 @@ class BoardUtils { static int countFlaggedCells(List cells) { int count = 0; - int sizeHorizontal = cells.length; - int sizeVertical = cells[0].length; - for (var row = 0; row < sizeVertical; row++) { - for (var col = 0; col < sizeHorizontal; col++) { + final int sizeHorizontal = cells.length; + final int sizeVertical = cells[0].length; + for (int row = 0; row < sizeVertical; row++) { + for (int col = 0; col < sizeHorizontal; col++) { if (cells[row][col].isMarked == true) { count++; } diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart index 107cff4fa714f2c8769db349954b52953860c307..03ea28ffece8c44e05adec66105725b3193f4451 100644 --- a/lib/utils/game_utils.dart +++ b/lib/utils/game_utils.dart @@ -11,7 +11,7 @@ class GameUtils { } static void startNewGame(Data myProvider) { - print('Starting game: ' + myProvider.parameterSize + ' - ' + myProvider.parameterLevel); + print('Starting game: ${myProvider.parameterSize} - ${myProvider.parameterLevel}'); myProvider.updateParameterSize(myProvider.parameterSize); myProvider.updateMinesCount(BoardUtils.getMinesCount( myProvider.sizeHorizontal, myProvider.sizeVertical, myProvider.parameterLevel)); diff --git a/pubspec.lock b/pubspec.lock index f78ae3bfbc5b91625f56452dcbc944e3e78db356..f2dad354fa91396500fef3d18d03b00e93cac1bf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,52 +21,68 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" ffi: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + url: "https://pub.dev" + source: hosted + version: "3.0.1" flutter_web_plugins: dependency: transitive description: flutter source: sdk version: "0.0.0" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.11.0" nested: dependency: transitive description: @@ -87,10 +103,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider_linux: dependency: transitive description: @@ -103,10 +119,10 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: @@ -119,34 +135,34 @@ packages: dependency: transitive description: name: platform - sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.1.8" provider: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.1" shared_preferences: dependency: "direct main" description: name: shared_preferences - sha256: b7f41bad7e521d205998772545de63ff4e6c97714775902c199353f8bf1511ac + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.2" shared_preferences_android: dependency: transitive description: @@ -159,42 +175,42 @@ packages: dependency: transitive description: name: shared_preferences_foundation - sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: c2eb5bf57a2fe9ad6988121609e47d3e07bb3bdca5b6f8444e4cf302428a128a + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: f763a101313bd3be87edffe0560037500967de9c394a714cd598d945517f694f + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" sky_engine: dependency: transitive description: flutter @@ -212,26 +228,26 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.4.2" win32: dependency: transitive description: name: win32 - sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" url: "https://pub.dev" source: hosted - version: "5.0.9" + version: "5.2.0" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" - flutter: ">=3.7.0" + dart: ">=3.3.0-279.1.beta <4.0.0" + flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 9d68e2151be9cd5898ea3e6bfb868a9cb1bc8fca..e7f74ce0de3c6e7efc8fbbe9f54081aacbec4bd7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: minehunter description: A minehunter game application. publish_to: 'none' -version: 1.0.0+1 +version: 0.1.13+34 environment: sdk: '^3.0.0' @@ -13,6 +13,9 @@ dependencies: shared_preferences: ^2.2.1 overlay_support: ^2.1.0 +dev_dependencies: + flutter_lints: ^3.0.1 + flutter: uses-material-design: true assets: