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

Use flutter linter, apply lints, update dependencies

parent 8b6ffde2
No related branches found
No related tags found
1 merge request!14Resolve "Use flutter linter and apply lints"
Pipeline #5049 passed
This commit is part of merge request !14. Comments created here will be created in the context of that merge request.
include: package:flutter_lints/flutter.yaml
...@@ -44,7 +44,7 @@ android { ...@@ -44,7 +44,7 @@ android {
defaultConfig { defaultConfig {
applicationId "org.benoitharrault.solitaire" applicationId "org.benoitharrault.solitaire"
minSdkVersion 16 minSdkVersion flutter.minSdkVersion
targetSdkVersion 30 targetSdkVersion 30
versionCode appVersionCode.toInteger() versionCode appVersionCode.toInteger()
versionName appVersionName versionName appVersionName
......
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.12 app.versionName=0.0.13
app.versionCode=12 app.versionCode=13
Add automatic flutter linter. Apply code lints. Update dependencies.
Ajout d'un correcteur automatique de code. Application des corrections. Mise à jour des dépendances.
...@@ -15,11 +15,11 @@ class Tile { ...@@ -15,11 +15,11 @@ class Tile {
Widget render(Data myProvider) { Widget render(Data myProvider) {
List<Widget> stack = [ List<Widget> stack = [
this.hole(myProvider), hole(myProvider),
]; ];
if (this.hasPeg) { if (hasPeg) {
stack.add(this.draggable(myProvider)); stack.add(draggable(myProvider));
} }
return Stack( return Stack(
...@@ -29,7 +29,7 @@ class Tile { ...@@ -29,7 +29,7 @@ class Tile {
} }
Widget hole(Data myProvider) { Widget hole(Data myProvider) {
String image = 'assets/skins/' + myProvider.parameterSkin + '_hole.png'; String image = 'assets/skins/${myProvider.parameterSkin}_hole.png';
return DragTarget<List<int>>( return DragTarget<List<int>>(
builder: ( builder: (
...@@ -37,20 +37,18 @@ class Tile { ...@@ -37,20 +37,18 @@ class Tile {
List<dynamic> accepted, List<dynamic> accepted,
List<dynamic> rejected, List<dynamic> rejected,
) { ) {
return Container( return Image(
child: Image(
image: AssetImage(image), image: AssetImage(image),
width: myProvider.tileSize, width: myProvider.tileSize,
height: myProvider.tileSize, height: myProvider.tileSize,
fit: BoxFit.fill, fit: BoxFit.fill,
),
); );
}, },
onAccept: (List<int> source) { onAcceptWithDetails: (DragTargetDetails<List<int>> source) {
List<int> target = [this.currentCol, this.currentRow]; List<int> target = [currentCol, currentRow];
// print('(drag) Pick from ' + source.toString() + ' and drop on ' + target.toString()); // print('(drag) Pick from ' + source.toString() + ' and drop on ' + target.toString());
if (GameUtils.isMoveAllowed(myProvider, source, target)) { if (GameUtils.isMoveAllowed(myProvider, source.data, target)) {
GameUtils.move(myProvider, source, target); GameUtils.move(myProvider, source.data, target);
} }
}, },
); );
...@@ -58,21 +56,21 @@ class Tile { ...@@ -58,21 +56,21 @@ class Tile {
Widget draggable(Data myProvider) { Widget draggable(Data myProvider) {
return Draggable<List<int>>( return Draggable<List<int>>(
data: [this.currentCol, this.currentRow], data: [currentCol, currentRow],
// Widget when draggable is stationary
child: this.peg(myProvider),
// Widget when draggable is being dragged // Widget when draggable is being dragged
feedback: this.peg(myProvider), feedback: peg(myProvider),
// Widget to display on original place when being dragged // Widget to display on original place when being dragged
childWhenDragging: Container(), childWhenDragging: Container(),
// Widget when draggable is stationary
child: peg(myProvider),
); );
} }
Widget peg(Data myProvider) { Widget peg(Data myProvider) {
String image = 'assets/skins/' + myProvider.parameterSkin + '_peg.png'; String image = 'assets/skins/${myProvider.parameterSkin}_peg.png';
return Image( return Image(
image: AssetImage(image), image: AssetImage(image),
......
...@@ -3,13 +3,11 @@ import 'package:solitaire_game/entities/tile.dart'; ...@@ -3,13 +3,11 @@ import 'package:solitaire_game/entities/tile.dart';
import 'package:solitaire_game/provider/data.dart'; import 'package:solitaire_game/provider/data.dart';
class Board { class Board {
static Container buildGameBoard(Data myProvider) { static Widget buildGameBoard(Data myProvider) {
return Container( return Column(
child: Column(
children: [ children: [
buildGameTileset(myProvider), buildGameTileset(myProvider),
], ],
),
); );
} }
...@@ -17,19 +15,19 @@ class Board { ...@@ -17,19 +15,19 @@ class Board {
List<List<Tile?>> board = myProvider.board; List<List<Tile?>> board = myProvider.board;
Widget boardTileWithoutHole = Image( Widget boardTileWithoutHole = Image(
image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_board.png'), image: AssetImage('assets/skins/${myProvider.parameterSkin}_board.png'),
width: myProvider.tileSize, width: myProvider.tileSize,
height: myProvider.tileSize, height: myProvider.tileSize,
fit: BoxFit.fill, fit: BoxFit.fill,
); );
return Table( return Table(
defaultColumnWidth: IntrinsicColumnWidth(), defaultColumnWidth: const IntrinsicColumnWidth(),
children: [ children: [
for (var row = 0; row < board.length; row++) for (int row = 0; row < board.length; row++)
TableRow( TableRow(
children: [ children: [
for (var col = 0; col < board[row].length; col++) for (int col = 0; col < board[row].length; col++)
TableCell( TableCell(
child: board[row][col] != null child: board[row][col] != null
? (board[row][col]?.render(myProvider) ?? Container()) ? (board[row][col]?.render(myProvider) ?? Container())
......
...@@ -4,31 +4,31 @@ import 'package:solitaire_game/provider/data.dart'; ...@@ -4,31 +4,31 @@ import 'package:solitaire_game/provider/data.dart';
import 'package:solitaire_game/utils/game_utils.dart'; import 'package:solitaire_game/utils/game_utils.dart';
class Game { class Game {
static Container buildGameWidget(Data myProvider) { static Widget buildGameWidget(Data myProvider) {
bool gameIsFinished = myProvider.gameIsFinished; final bool gameIsFinished = myProvider.gameIsFinished;
return Container( return Column(
child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SizedBox(height: 8), const SizedBox(height: 8),
Game.buildTopIndicatorWidget(myProvider), Game.buildTopIndicatorWidget(myProvider),
SizedBox(height: 2), const SizedBox(height: 2),
Expanded( Expanded(
child: Board.buildGameBoard(myProvider), child: Board.buildGameBoard(myProvider),
), ),
SizedBox(height: 2), const SizedBox(height: 2),
Container( Container(
child: gameIsFinished ? Game.buildEndGameMessage(myProvider) : SizedBox(height: 2), child: gameIsFinished
? Game.buildEndGameMessage(myProvider)
: const SizedBox(height: 2),
), ),
], ],
),
); );
} }
static Widget buildTopIndicatorWidget(Data myProvider) { static Widget buildTopIndicatorWidget(Data myProvider) {
int allowedMovesCount = myProvider.allowedMovesCount; final int allowedMovesCount = myProvider.allowedMovesCount;
return Table( return Table(
children: [ children: [
...@@ -37,8 +37,8 @@ class Game { ...@@ -37,8 +37,8 @@ class Game {
Column( Column(
children: [ children: [
Text( Text(
'♟️ ' + myProvider.remainingPegsCount.toString(), '♟️ ${myProvider.remainingPegsCount}',
style: TextStyle( style: const TextStyle(
fontSize: 40, fontSize: 40,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Colors.black, color: Colors.black,
...@@ -50,7 +50,7 @@ class Game { ...@@ -50,7 +50,7 @@ class Game {
children: [ children: [
Text( Text(
allowedMovesCount.toString(), allowedMovesCount.toString(),
style: TextStyle( style: const TextStyle(
fontSize: 20, fontSize: 20,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Colors.green, color: Colors.green,
...@@ -66,12 +66,10 @@ class Game { ...@@ -66,12 +66,10 @@ class Game {
static TextButton buildQuitGameButton(Data myProvider) { static TextButton buildQuitGameButton(Data myProvider) {
return TextButton( return TextButton(
child: Container( child: const Image(
child: Image(
image: AssetImage('assets/icons/button_back.png'), image: AssetImage('assets/icons/button_back.png'),
fit: BoxFit.fill, fit: BoxFit.fill,
), ),
),
onPressed: () => GameUtils.quitAndDeleteCurrentGame(myProvider), onPressed: () => GameUtils.quitAndDeleteCurrentGame(myProvider),
); );
} }
...@@ -84,16 +82,16 @@ class Game { ...@@ -84,16 +82,16 @@ class Game {
decorationImageAssetName = 'assets/icons/placeholder.png'; decorationImageAssetName = 'assets/icons/placeholder.png';
} }
Image decorationImage = Image( final Image decorationImage = Image(
image: AssetImage(decorationImageAssetName), image: AssetImage(decorationImageAssetName),
fit: BoxFit.fill, fit: BoxFit.fill,
); );
return Container( return Container(
margin: EdgeInsets.all(2), margin: const EdgeInsets.all(2),
padding: EdgeInsets.all(2), padding: const EdgeInsets.all(2),
child: Table( child: Table(
defaultColumnWidth: IntrinsicColumnWidth(), defaultColumnWidth: const IntrinsicColumnWidth(),
children: [ children: [
TableRow( TableRow(
children: [ children: [
......
...@@ -14,11 +14,11 @@ class Parameters { ...@@ -14,11 +14,11 @@ class Parameters {
static double buttonPadding = 0.0; static double buttonPadding = 0.0;
static double buttonMargin = 0.0; static double buttonMargin = 0.0;
static Container buildParametersSelector(Data myProvider) { static Widget buildParametersSelector(Data myProvider) {
List<Widget> lines = []; List<Widget> lines = [];
List parameters = myProvider.availableParameters; List parameters = myProvider.availableParameters;
for (var index = 0; index < parameters.length; index++) { for (int index = 0; index < parameters.length; index++) {
lines.add(buildParameterSelector(myProvider, parameters[index])); lines.add(buildParameterSelector(myProvider, parameters[index]));
lines.add(SizedBox(height: separatorHeight)); lines.add(SizedBox(height: separatorHeight));
} }
...@@ -28,8 +28,7 @@ class Parameters { ...@@ -28,8 +28,7 @@ class Parameters {
? buildResumeGameButton(myProvider) ? buildResumeGameButton(myProvider)
: buildStartNewGameButton(myProvider); : buildStartNewGameButton(myProvider);
return Container( return Column(
child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
...@@ -46,13 +45,12 @@ class Parameters { ...@@ -46,13 +45,12 @@ class Parameters {
child: buttonsBlock, child: buttonsBlock,
), ),
], ],
),
); );
} }
static Image buildImageWidget(String imageAssetCode) { static Image buildImageWidget(String imageAssetCode) {
return Image( return Image(
image: AssetImage('assets/icons/' + imageAssetCode + '.png'), image: AssetImage('assets/icons/$imageAssetCode.png'),
fit: BoxFit.fill, fit: BoxFit.fill,
); );
} }
...@@ -68,7 +66,7 @@ class Parameters { ...@@ -68,7 +66,7 @@ class Parameters {
children: [ children: [
TextButton( TextButton(
child: buildImageContainerWidget('placeholder'), child: buildImageContainerWidget('placeholder'),
onPressed: () => null, onPressed: () {},
), ),
], ],
); );
...@@ -79,7 +77,7 @@ class Parameters { ...@@ -79,7 +77,7 @@ class Parameters {
margin: EdgeInsets.all(blockMargin), margin: EdgeInsets.all(blockMargin),
padding: EdgeInsets.all(blockPadding), padding: EdgeInsets.all(blockPadding),
child: Table( child: Table(
defaultColumnWidth: IntrinsicColumnWidth(), defaultColumnWidth: const IntrinsicColumnWidth(),
children: [ children: [
TableRow( TableRow(
children: [ children: [
...@@ -105,7 +103,7 @@ class Parameters { ...@@ -105,7 +103,7 @@ class Parameters {
margin: EdgeInsets.all(blockMargin), margin: EdgeInsets.all(blockMargin),
padding: EdgeInsets.all(blockPadding), padding: EdgeInsets.all(blockPadding),
child: Table( child: Table(
defaultColumnWidth: IntrinsicColumnWidth(), defaultColumnWidth: const IntrinsicColumnWidth(),
children: [ children: [
TableRow( TableRow(
children: [ children: [
...@@ -137,15 +135,15 @@ class Parameters { ...@@ -137,15 +135,15 @@ class Parameters {
List availableValues = myProvider.getParameterAvailableValues(parameterCode); List availableValues = myProvider.getParameterAvailableValues(parameterCode);
if (availableValues.length == 1) { if (availableValues.length == 1) {
return SizedBox(height: 0.0); return const SizedBox(height: 0.0);
} }
return Table( return Table(
defaultColumnWidth: IntrinsicColumnWidth(), defaultColumnWidth: const IntrinsicColumnWidth(),
children: [ children: [
TableRow( TableRow(
children: [ children: [
for (var index = 0; index < availableValues.length; index++) for (int index = 0; index < availableValues.length; index++)
Column( Column(
children: [ children: [
_buildParameterButton(myProvider, parameterCode, availableValues[index]) _buildParameterButton(myProvider, parameterCode, availableValues[index])
...@@ -162,7 +160,7 @@ class Parameters { ...@@ -162,7 +160,7 @@ class Parameters {
String currentValue = myProvider.getParameterValue(parameterCode).toString(); String currentValue = myProvider.getParameterValue(parameterCode).toString();
bool isActive = (parameterValue == currentValue); bool isActive = (parameterValue == currentValue);
String imageAsset = parameterCode + '_' + parameterValue; String imageAsset = '${parameterCode}_$parameterValue';
return TextButton( return TextButton(
child: Container( child: Container(
......
...@@ -8,10 +8,12 @@ import 'package:solitaire_game/screens/home.dart'; ...@@ -8,10 +8,12 @@ import 'package:solitaire_game/screens/home.dart';
void main() { void main() {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
.then((value) => runApp(MyApp())); .then((value) => runApp(const MyApp()));
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
const MyApp({super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ChangeNotifierProvider( return ChangeNotifierProvider(
...@@ -24,9 +26,9 @@ class MyApp extends StatelessWidget { ...@@ -24,9 +26,9 @@ class MyApp extends StatelessWidget {
primaryColor: Colors.blue, primaryColor: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity, visualDensity: VisualDensity.adaptivePlatformDensity,
), ),
home: Home(), home: const Home(),
routes: { routes: {
Home.id: (context) => Home(), Home.id: (context) => const Home(),
}, },
), ),
); );
......
...@@ -7,20 +7,20 @@ import 'package:solitaire_game/utils/game_utils.dart'; ...@@ -7,20 +7,20 @@ import 'package:solitaire_game/utils/game_utils.dart';
class Data extends ChangeNotifier { class Data extends ChangeNotifier {
// Configuration available values // Configuration available values
List _availableParameters = ['layout', 'skin']; final List<String> _availableParameters = ['layout', 'skin'];
List _availableLayoutValues = ['french', 'german', 'english', 'diamond']; final List<String> _availableLayoutValues = ['french', 'german', 'english', 'diamond'];
List _availableSkinValues = ['default']; final List<String> _availableSkinValues = ['default'];
List get availableParameters => _availableParameters; List<String> get availableParameters => _availableParameters;
List get availableLayoutValues => _availableLayoutValues; List<String> get availableLayoutValues => _availableLayoutValues;
List get availableSkinValues => _availableSkinValues; List<String> get availableSkinValues => _availableSkinValues;
// Application default configuration // Application default configuration
String _parameterLayout = ''; String _parameterLayout = '';
String _parameterSkin = ''; String _parameterSkin = '';
String _parameterLayoutDefault = 'english'; final String _parameterLayoutDefault = 'english';
String _parameterSkinDefault = 'default'; final String _parameterSkinDefault = 'default';
// Application current configuration // Application current configuration
String get parameterLayout => _parameterLayout; String get parameterLayout => _parameterLayout;
...@@ -95,8 +95,8 @@ class Data extends ChangeNotifier { ...@@ -95,8 +95,8 @@ class Data extends ChangeNotifier {
String textBoard = ' '; String textBoard = ' ';
String textHole = '·'; String textHole = '·';
String textPeg = 'o'; String textPeg = 'o';
for (var rowIndex = 0; rowIndex < _board.length; rowIndex++) { for (int rowIndex = 0; rowIndex < _board.length; rowIndex++) {
for (var colIndex = 0; colIndex < _board[rowIndex].length; colIndex++) { for (int colIndex = 0; colIndex < _board[rowIndex].length; colIndex++) {
String cellValue = textBoard; String cellValue = textBoard;
if (_board[rowIndex][colIndex] != null) { if (_board[rowIndex][colIndex] != null) {
cellValue = (_board[rowIndex][colIndex]?.hasPeg ?? false) ? textPeg : textHole; cellValue = (_board[rowIndex][colIndex]?.hasPeg ?? false) ? textPeg : textHole;
......
...@@ -7,13 +7,15 @@ import 'package:solitaire_game/provider/data.dart'; ...@@ -7,13 +7,15 @@ import 'package:solitaire_game/provider/data.dart';
import 'package:solitaire_game/utils/game_utils.dart'; import 'package:solitaire_game/utils/game_utils.dart';
class Home extends StatefulWidget { class Home extends StatefulWidget {
const Home({super.key});
static const String id = 'home'; static const String id = 'home';
@override @override
_HomeState createState() => _HomeState(); HomeState createState() => HomeState();
} }
class _HomeState extends State<Home> { class HomeState extends State<Home> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
...@@ -23,10 +25,10 @@ class _HomeState extends State<Home> { ...@@ -23,10 +25,10 @@ class _HomeState extends State<Home> {
myProvider.loadCurrentSavedState(); myProvider.loadCurrentSavedState();
} }
List getImagesAssets(Data myProvider) { List<String> getImagesAssets(Data myProvider) {
List assets = []; final List<String> assets = [];
List gameImages = [ final List<String> gameImages = [
'button_back', 'button_back',
'button_delete_saved_game', 'button_delete_saved_game',
'button_resume_game', 'button_resume_game',
...@@ -35,19 +37,28 @@ class _HomeState extends State<Home> { ...@@ -35,19 +37,28 @@ class _HomeState extends State<Home> {
'game_win', 'game_win',
'placeholder', 'placeholder',
]; ];
myProvider.availableLayoutValues.forEach((layout) => gameImages.add('layout_' + layout)); for (String layout in myProvider.availableLayoutValues) {
myProvider.availableSkinValues.forEach((skin) => gameImages.add('skin_' + skin)); gameImages.add('layout_$layout');
}
for (String skin in myProvider.availableSkinValues) {
gameImages.add('skin_$skin');
}
gameImages.forEach((image) => assets.add('assets/icons/' + image + '.png')); for (String image in gameImages) {
assets.add('${'assets/icons/$image'}.png');
}
List skinImages = [ const List<String> skinImages = [
'board', 'board',
'hole', 'hole',
'peg', 'peg',
]; ];
myProvider.availableSkinValues.forEach((skin) => skinImages for (String skin in myProvider.availableSkinValues) {
.forEach((image) => assets.add('assets/skins/' + skin + '_' + image + '.png'))); for (String image in skinImages) {
assets.add('${'${'assets/skins/$skin'}_$image'}.png');
}
}
return assets; return assets;
} }
...@@ -57,8 +68,10 @@ class _HomeState extends State<Home> { ...@@ -57,8 +68,10 @@ class _HomeState extends State<Home> {
Data myProvider = Provider.of<Data>(context); Data myProvider = Provider.of<Data>(context);
if (!myProvider.assetsPreloaded) { if (!myProvider.assetsPreloaded) {
List assets = getImagesAssets(myProvider); List<String> assets = getImagesAssets(myProvider);
assets.forEach((asset) => precacheImage(AssetImage(asset), context)); for (String asset in assets) {
precacheImage(AssetImage(asset), context);
}
myProvider.updateAssetsPreloaded(true); myProvider.updateAssetsPreloaded(true);
} }
...@@ -77,7 +90,7 @@ class _HomeState extends State<Home> { ...@@ -77,7 +90,7 @@ class _HomeState extends State<Home> {
width: 4, width: 4,
), ),
), ),
child: Image( child: const Image(
image: AssetImage('assets/icons/button_back.png'), image: AssetImage('assets/icons/button_back.png'),
fit: BoxFit.fill, fit: BoxFit.fill,
), ),
......
...@@ -11,9 +11,9 @@ class BoardUtils { ...@@ -11,9 +11,9 @@ class BoardUtils {
print(''); print('');
print('-------'); print('-------');
for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) { for (int rowIndex = 0; rowIndex < cells.length; rowIndex++) {
String row = ''; String row = '';
for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) { for (int colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) {
String textCell = textBoard; String textCell = textBoard;
Tile? tile = cells[rowIndex][colIndex]; Tile? tile = cells[rowIndex][colIndex];
if (tile != null) { if (tile != null) {
...@@ -36,9 +36,9 @@ class BoardUtils { ...@@ -36,9 +36,9 @@ class BoardUtils {
String textPeg = 'o'; String textPeg = 'o';
int index = 0; int index = 0;
for (var rowIndex = 0; rowIndex < boardSize; rowIndex++) { for (int rowIndex = 0; rowIndex < boardSize; rowIndex++) {
List<Tile?> row = []; List<Tile?> row = [];
for (var colIndex = 0; colIndex < boardSize; colIndex++) { for (int colIndex = 0; colIndex < boardSize; colIndex++) {
String stringValue = savedBoard[index++]; String stringValue = savedBoard[index++];
if (stringValue == textBoard) { if (stringValue == textBoard) {
row.add(null); row.add(null);
...@@ -104,7 +104,7 @@ class BoardUtils { ...@@ -104,7 +104,7 @@ class BoardUtils {
List<Tile?> gridLine = []; List<Tile?> gridLine = [];
int col = 0; int col = 0;
line.split("").forEach((String tileCode) { line.split("").forEach((String tileCode) {
gridLine.add(tileCode == ' ' ? null : new Tile(row, col, (tileCode == 'o'))); gridLine.add(tileCode == ' ' ? null : Tile(row, col, (tileCode == 'o')));
col++; col++;
}); });
row++; row++;
......
...@@ -110,7 +110,7 @@ class GameUtils { ...@@ -110,7 +110,7 @@ class GameUtils {
} }
static void move(Data myProvider, List<int> source, List<int> target) { static void move(Data myProvider, List<int> source, List<int> target) {
print('Move from ' + source.toString() + ' to ' + target.toString()); print('Move from $source to $target');
int sourceCol = source[0]; int sourceCol = source[0];
int sourceRow = source[1]; int sourceRow = source[1];
int targetCol = target[0]; int targetCol = target[0];
...@@ -138,8 +138,8 @@ class GameUtils { ...@@ -138,8 +138,8 @@ class GameUtils {
List<Tile> pegs = []; List<Tile> pegs = [];
List<List<Tile?>> board = myProvider.board; List<List<Tile?>> board = myProvider.board;
for (var rowIndex = 0; rowIndex < board.length; rowIndex++) { for (int rowIndex = 0; rowIndex < board.length; rowIndex++) {
for (var colIndex = 0; colIndex < board[rowIndex].length; colIndex++) { for (int colIndex = 0; colIndex < board[rowIndex].length; colIndex++) {
Tile? tile = board[rowIndex][colIndex]; Tile? tile = board[rowIndex][colIndex];
if (tile != null && tile.hasPeg == true) { if (tile != null && tile.hasPeg == true) {
pegs.add(tile); pegs.add(tile);
...@@ -157,7 +157,7 @@ class GameUtils { ...@@ -157,7 +157,7 @@ class GameUtils {
static int countAllowedMoves(Data myProvider) { static int countAllowedMoves(Data myProvider) {
int allowedMovesCount = 0; int allowedMovesCount = 0;
List<Tile> pegs = GameUtils.listRemainingPegs(myProvider); List<Tile> pegs = GameUtils.listRemainingPegs(myProvider);
pegs.forEach((tile) { for (Tile tile in pegs) {
int row = tile.currentRow; int row = tile.currentRow;
int col = tile.currentCol; int col = tile.currentCol;
List<int> source = [col, row]; List<int> source = [col, row];
...@@ -167,12 +167,12 @@ class GameUtils { ...@@ -167,12 +167,12 @@ class GameUtils {
[col, row - 2], [col, row - 2],
[col, row + 2], [col, row + 2],
]; ];
targets.forEach((target) { for (List<int> target in targets) {
if (GameUtils.isMoveAllowed(myProvider, source, target)) { if (GameUtils.isMoveAllowed(myProvider, source, target)) {
allowedMovesCount++; allowedMovesCount++;
} }
}); }
}); }
return allowedMovesCount; return allowedMovesCount;
} }
......
...@@ -21,52 +21,68 @@ packages: ...@@ -21,52 +21,68 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.2" version: "1.18.0"
ffi: ffi:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.2"
file: file:
dependency: transitive dependency: transitive
description: description:
name: file name: file
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.4" version: "7.0.0"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" 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: flutter_web_plugins:
dependency: transitive dependency: transitive
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" 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: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.0" version: "0.8.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.11.0"
nested: nested:
dependency: transitive dependency: transitive
description: description:
...@@ -87,10 +103,10 @@ packages: ...@@ -87,10 +103,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.3" version: "1.9.0"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
...@@ -103,10 +119,10 @@ packages: ...@@ -103,10 +119,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
...@@ -119,34 +135,34 @@ packages: ...@@ -119,34 +135,34 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: platform name: platform
sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.1.2" version: "3.1.4"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: plugin_platform_interface name: plugin_platform_interface
sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.6" version: "2.1.8"
provider: provider:
dependency: "direct main" dependency: "direct main"
description: description:
name: provider name: provider
sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.0.5" version: "6.1.1"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:
name: shared_preferences name: shared_preferences
sha256: b7f41bad7e521d205998772545de63ff4e6c97714775902c199353f8bf1511ac sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.1" version: "2.2.2"
shared_preferences_android: shared_preferences_android:
dependency: transitive dependency: transitive
description: description:
...@@ -159,42 +175,42 @@ packages: ...@@ -159,42 +175,42 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_foundation name: shared_preferences_foundation
sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.4" version: "2.3.5"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
sha256: c2eb5bf57a2fe9ad6988121609e47d3e07bb3bdca5b6f8444e4cf302428a128a sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.2"
shared_preferences_platform_interface: shared_preferences_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.2"
shared_preferences_web: shared_preferences_web:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.2.1" version: "2.2.2"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_windows name: shared_preferences_windows
sha256: f763a101313bd3be87edffe0560037500967de9c394a714cd598d945517f694f sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.1" version: "2.3.2"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
...@@ -212,26 +228,26 @@ packages: ...@@ -212,26 +228,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: web name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.4-beta" version: "0.4.2"
win32: win32:
dependency: transitive dependency: transitive
description: description:
name: win32 name: win32
sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.0.9" version: "5.2.0"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
name: xdg_directories name: xdg_directories
sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.3" version: "1.0.4"
sdks: sdks:
dart: ">=3.1.0-185.0.dev <4.0.0" dart: ">=3.3.0-279.1.beta <4.0.0"
flutter: ">=3.7.0" flutter: ">=3.16.0"
name: solitaire_game name: solitaire_game
description: Solitaire Game description: Solitaire Game
publish_to: 'none' publish_to: 'none'
version: 1.0.0+1 version: 0.0.13+13
environment: environment:
sdk: '^3.0.0' sdk: '^3.0.0'
...@@ -13,6 +13,9 @@ dependencies: ...@@ -13,6 +13,9 @@ dependencies:
shared_preferences: ^2.2.1 shared_preferences: ^2.2.1
overlay_support: ^2.1.0 overlay_support: ^2.1.0
dev_dependencies:
flutter_lints: ^3.0.1
flutter: flutter:
uses-material-design: true uses-material-design: true
assets: assets:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment