Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • android/org.benoitharrault.minehunter
1 result
Select Git revision
Show changes
<?xml version="1.0" encoding="UTF-8"?>
<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="100" height="100" ry="0" fill="#a4a4a4" stroke="#000" stroke-width="2"/><rect x="-15.387" y="-20.515" width="100" height="100" ry="2" fill="none"/></svg>
File moved
......@@ -67,7 +67,7 @@ class Cell {
* Compute image asset name, from skin and cell value/state
*/
String getImageAssetName(Data myProvider) {
String imageAsset = 'assets/skins/' + myProvider.skin + '_tile_unknown.png';
String imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_unknown.png';
bool showSolution = myProvider.gameWin || myProvider.gameFail;
if (!showSolution) {
......@@ -75,15 +75,15 @@ class Cell {
if (this.isExplored) {
if (this.isMined) {
// Boom
imageAsset = 'assets/skins/' + myProvider.skin + '_tile_mine.png';
imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine.png';
} else {
// Show mines count around
imageAsset = 'assets/skins/' + myProvider.skin + '_tile_' + this.minesCountAround.toString() + '.png';
imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_' + this.minesCountAround.toString() + '.png';
}
} else {
if (this.isMarked) {
// Danger!
imageAsset = 'assets/skins/' + myProvider.skin + '_tile_flag.png';
imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_flag.png';
}
}
} else {
......@@ -91,14 +91,14 @@ class Cell {
if (this.isMined) {
if (this.isExploded) {
// Mine exploded
imageAsset = 'assets/skins/' + myProvider.skin + '_tile_mine.png';
imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine.png';
} else {
// Mine not found
imageAsset = 'assets/skins/' + myProvider.skin + '_tile_mine_not_found.png';
imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_mine_not_found.png';
}
} else {
// Show all mines counts
imageAsset = 'assets/skins/' + myProvider.skin + '_tile_' + this.minesCountAround.toString() + '.png';
imageAsset = 'assets/skins/' + myProvider.parameterSkin + '_tile_' + this.minesCountAround.toString() + '.png';
}
}
......@@ -108,18 +108,18 @@ class Cell {
// Compute cell background color, from cell state
Color getBackgroundColor(Data myProvider) {
if (myProvider.gameWin) {
return this.isAnimated ? Colors.green[400] : Colors.green[500];
return this.isAnimated ? Colors.green.shade400 : Colors.green.shade500;
}
if (myProvider.gameFail) {
return this.isAnimated ? Colors.pink[200] : Colors.pink[400];
return this.isAnimated ? Colors.pink.shade200 : Colors.pink.shade400;
}
return this.isAnimated ? Colors.white : Colors.grey[200];
return this.isAnimated ? Colors.white : Colors.grey.shade200;
}
// Compute cell borders, from board size and cell state
Border getCellBorders(Data myProvider, int row, int col) {
Color cellBorderColor = Colors.grey[500];
Color cellBorderColor = Colors.grey.shade500;
double cellBorderWidth = 4;
// Reduce cell border width on big boards
......@@ -132,9 +132,9 @@ class Cell {
}
if (myProvider.gameWin) {
cellBorderColor = Colors.green[700];
cellBorderColor = Colors.green.shade700;
} else if (myProvider.gameFail) {
cellBorderColor = Colors.pink[300];
cellBorderColor = Colors.pink.shade300;
}
Border borders = Border.all(
......
......@@ -6,32 +6,31 @@ import '../utils/board_utils.dart';
class Board {
static Container buildGameBoard(Data myProvider) {
Color borderColor = myProvider.reportMode ? Colors.blue : Colors.black;
return Container(
margin: EdgeInsets.all(2),
padding: EdgeInsets.all(2),
decoration: BoxDecoration(
color: borderColor,
borderRadius: BorderRadius.circular(2),
border: Border.all(
color: borderColor,
width: 2,
),
),
child: Column(
children: [
buildGameTileset(myProvider),
buildMinesCounterWidget(myProvider),
buildGameTileset(myProvider)
],
),
);
}
static Table buildGameTileset(Data myProvider) {
static Widget buildGameTileset(Data myProvider) {
List cells = myProvider.cells;
Color borderColor = myProvider.reportMode ? Colors.blue : Colors.black;
return Table(
return Container(
decoration: BoxDecoration(
color: borderColor,
borderRadius: BorderRadius.circular(2),
border: Border.all(
color: borderColor,
width: 2,
),
),
child: Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: [
for (var row = 0; row < myProvider.sizeVertical; row++)
......@@ -44,8 +43,10 @@ class Board {
col
)
]),
]),
],
),
]
),
);
}
......@@ -55,7 +56,7 @@ class Board {
return FlatButton(
child: Container(
child: Image(
image: AssetImage('assets/skins/' + myProvider.skin + '_button_mark_mine_' + reportModeSuffix + '.png'),
image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_button_mark_mine_' + reportModeSuffix + '.png'),
fit: BoxFit.fill,
),
),
......@@ -63,9 +64,9 @@ class Board {
);
}
static Table buildToggleFlagModeLayout(Data myProvider) {
static Widget buildToggleFlagModeLayout(Data myProvider) {
Image paddingBlock = Image(
image: AssetImage('assets/skins/empty.png'),
image: AssetImage('assets/skins/' + myProvider.parameterSkin + '_empty.png'),
fit: BoxFit.fill,
);
......@@ -85,56 +86,4 @@ class Board {
);
}
static Widget buildMinesCounterWidget(Data myProvider) {
int flaggedCellsCount = BoardUtils.countFlaggedCells(myProvider.cells);
int minesCount = myProvider.minesCount;
double blockSize = 40;
Image flagIconBlock = Image(
image: AssetImage('assets/skins/' + myProvider.skin + '_tile_flag.png'),
fit: BoxFit.fill,
height: blockSize,
width: blockSize,
);
Image mineIconBlock = Image(
image: AssetImage('assets/skins/' + myProvider.skin + '_tile_mine.png'),
fit: BoxFit.fill,
height: blockSize,
width: blockSize,
);
Text markedMinesCountBlock = Text(
flaggedCellsCount.toString(),
style: TextStyle(
fontSize: blockSize,
fontWeight: FontWeight.bold,
color: Colors.white
),
);
Text placedMinesCountBlock = Text(
minesCount.toString(),
style: TextStyle(
fontSize: blockSize,
fontWeight: FontWeight.bold,
color: Colors.white
),
);
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
markedMinesCountBlock,
flagIconBlock,
SizedBox(width: blockSize * 2),
mineIconBlock,
placedMinesCountBlock,
],
)
]);
}
}
......@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import '../layout/board.dart';
import '../provider/data.dart';
import '../utils/board_utils.dart';
import '../utils/game_utils.dart';
class Game {
......@@ -14,16 +15,76 @@ class Game {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Board.buildGameBoard(myProvider),
SizedBox(height: 8),
Game.buildTopIndicatorWidget(myProvider),
SizedBox(height: 2),
gameIsFinished
Expanded(
child: Board.buildGameBoard(myProvider),
),
SizedBox(height: 2),
Container(
child: gameIsFinished
? Game.buildEndGameMessage(myProvider)
: Board.buildToggleFlagModeLayout(myProvider)
: Board.buildToggleFlagModeLayout(myProvider),
),
SizedBox(height: 8),
],
),
);
}
static Widget buildTopIndicatorWidget(Data myProvider) {
int flaggedCellsCount = BoardUtils.countFlaggedCells(myProvider.cells);
int minesCount = myProvider.minesCount;
double blockSize = 40;
Image flagIconBlock = Image(
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'),
fit: BoxFit.fill,
height: blockSize,
width: blockSize,
);
Text markedMinesCountBlock = Text(
flaggedCellsCount.toString(),
style: TextStyle(
fontSize: blockSize,
fontWeight: FontWeight.bold,
color: Colors.black
),
);
Text placedMinesCountBlock = Text(
minesCount.toString(),
style: TextStyle(
fontSize: blockSize,
fontWeight: FontWeight.bold,
color: Colors.black
),
);
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
markedMinesCountBlock,
flagIconBlock,
SizedBox(width: blockSize * 2),
mineIconBlock,
placedMinesCountBlock,
],
)
]);
}
static FlatButton buildRestartGameButton(Data myProvider) {
return FlatButton(
child: Container(
......
......@@ -7,18 +7,27 @@ class Parameters {
static Container buildParametersSelector(Data myProvider) {
return Container(
padding: EdgeInsets.all(2),
margin: EdgeInsets.all(2),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(height: 5),
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Parameters.buildParameterSelector(myProvider, 'difficulty'),
Parameters.buildParameterSelector(myProvider, 'level'),
SizedBox(height: 5),
Parameters.buildParameterSelector(myProvider, 'size'),
SizedBox(height: 5),
Parameters.buildStartGameButton(myProvider),
],
),
),
SizedBox(height: 5),
Container(
child: Parameters.buildStartGameButton(myProvider),
),
],
),
);
......@@ -65,9 +74,13 @@ class Parameters {
);
}
static Table buildParameterSelector(Data myProvider, String parameterCode) {
static Widget buildParameterSelector(Data myProvider, String parameterCode) {
List availableValues = myProvider.getParameterAvailableValues(parameterCode);
if (availableValues.length == 1) {
return SizedBox(height: 1);
}
return Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: [
......@@ -85,15 +98,15 @@ class Parameters {
);
}
static FlatButton _buildParameterButton(Data myProvider, String parameterCode, String parameterValue) {
static Widget _buildParameterButton(Data myProvider, String parameterCode, String parameterValue) {
String currentValue = myProvider.getParameterValue(parameterCode).toString();
bool isActive = (parameterValue == currentValue);
String imageAsset = 'assets/icons/' + parameterCode + '_' + parameterValue + '.png';
return FlatButton(
padding: EdgeInsets.all(2),
return TextButton(
child: Container(
padding: EdgeInsets.all(2),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10),
......
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:overlay_support/overlay_support.dart';
import 'provider/data.dart';
import 'screens/home.dart';
......@@ -17,7 +18,8 @@ class MyApp extends StatelessWidget {
return ChangeNotifierProvider(
create: (BuildContext context) => Data(),
child: Consumer<Data>(builder: (context, data, child) {
return MaterialApp(
return OverlaySupport(
child: MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Colors.blue,
......@@ -27,6 +29,7 @@ class MyApp extends StatelessWidget {
routes: {
Home.id: (context) => Home(),
},
),
);
}),
);
......
......@@ -4,28 +4,33 @@ import 'package:shared_preferences/shared_preferences.dart';
class Data extends ChangeNotifier {
// Configuration available values
List _availableDifficultyLevels = ['easy', 'medium', 'hard', 'nightmare'];
List _availableSizes = ['10x10', '15x15', '20x20'];
List _availableSkins = ['default'];
List _availableLevelValues = ['easy', 'medium', 'hard', 'nightmare'];
List _availableSizeValues = ['10x10', '15x15', '20x20'];
List _availableSkinValues = ['default'];
List get availableDifficultyLevels => _availableDifficultyLevels;
List get availableSizes => _availableSizes;
List get availableSkins => _availableSkins;
List get availableLevelValues => _availableLevelValues;
List get availableSizeValues => _availableSizeValues;
List get availableSkinValues => _availableSkinValues;
// Application default configuration
String _level = null;
String _levelDefault = 'medium';
String _size = null;
String _sizeDefault = '15x15';
String _skin = null;
String _skinDefault = 'default';
String _parameterLevel = '';
String _parameterLevelDefault = 'medium';
String _parameterSize = '';
String _parameterSizeDefault = '15x15';
String _parameterSkin = '';
String _parameterSkinDefault = 'default';
// Application current configuration
String get parameterLevel => _parameterLevel;
String get parameterSize => _parameterSize;
String get parameterSkin => _parameterSkin;
// Game data
bool _assetsPreloaded = false;
bool _gameIsRunning = false;
bool _animationInProgress = false;
int _sizeVertical = null;
int _sizeHorizontal = null;
int _sizeVertical = 0;
int _sizeHorizontal = 0;
List _cells = [];
bool _isBoardMined = false;
int _minesCount = 0;
......@@ -33,57 +38,56 @@ class Data extends ChangeNotifier {
bool _gameWin = false;
bool _gameFail = false;
String get level => _level;
void updateLevel(String level) {
_level = level;
void updateParameterLevel(String parameterLevel) {
_parameterLevel = parameterLevel;
notifyListeners();
}
String get size => _size;
int get sizeVertical => _sizeVertical;
int get sizeHorizontal => _sizeHorizontal;
void updateSize(String size) {
_size = size;
_sizeHorizontal = int.parse(_size.split('x')[0]);
_sizeVertical = int.parse(_size.split('x')[1]);
void updateParameterSize(String parameterSize) {
_parameterSize = parameterSize;
_sizeHorizontal = int.parse(_parameterSize.split('x')[0]);
_sizeVertical = int.parse(_parameterSize.split('x')[1]);
notifyListeners();
}
String get skin => _skin;
void updateSkin(String skin) {
_skin = skin;
void updateParameterSkin(String parameterSkin) {
_parameterSkin = parameterSkin;
notifyListeners();
}
getParameterValue(String parameterCode) {
String getParameterValue(String parameterCode) {
switch(parameterCode) {
case 'difficulty': { return _level; }
case 'level': { return _parameterLevel; }
break;
case 'size': { return _size; }
case 'size': { return _parameterSize; }
break;
case 'skin': { return _skin; }
case 'skin': { return _parameterSkin; }
break;
}
return '';
}
List getParameterAvailableValues(String parameterCode) {
switch(parameterCode) {
case 'difficulty': { return _availableDifficultyLevels; }
case 'level': { return _availableLevelValues; }
break;
case 'size': { return _availableSizes; }
case 'size': { return _availableSizeValues; }
break;
case 'skin': { return _availableSkins; }
case 'skin': { return _availableSkinValues; }
break;
}
return [];
}
setParameterValue(String parameterCode, String parameterValue) async {
switch(parameterCode) {
case 'difficulty': { updateLevel(parameterValue); }
case 'level': { updateParameterLevel(parameterValue); }
break;
case 'size': { updateSize(parameterValue); }
case 'size': { updateParameterSize(parameterValue); }
break;
case 'skin': { updateSkin(parameterValue); }
case 'skin': { updateParameterSkin(parameterValue); }
break;
}
final prefs = await SharedPreferences.getInstance();
......@@ -92,9 +96,9 @@ class Data extends ChangeNotifier {
void initParametersValues() async {
final prefs = await SharedPreferences.getInstance();
setParameterValue('difficulty', prefs.getString('difficulty') ?? _levelDefault);
setParameterValue('size', prefs.getString('size') ?? _sizeDefault);
setParameterValue('skin', prefs.getString('skin') ?? _skinDefault);
setParameterValue('level', prefs.getString('level') ?? _parameterLevelDefault);
setParameterValue('size', prefs.getString('size') ?? _parameterSizeDefault);
setParameterValue('skin', prefs.getString('skin') ?? _parameterSkinDefault);
}
bool get gameIsRunning => _gameIsRunning;
......
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:overlay_support/overlay_support.dart';
import '../layout/game.dart';
import '../layout/parameters.dart';
......@@ -31,10 +32,10 @@ class _HomeState extends State<Home> {
'game_fail',
'game_win',
];
myProvider.availableDifficultyLevels.forEach(
(difficulty) => gameImages.add('difficulty_' + difficulty)
myProvider.availableLevelValues.forEach(
(level) => gameImages.add('level_' + level)
);
myProvider.availableSizes.forEach(
myProvider.availableSizeValues.forEach(
(size) => gameImages.add('size_' + size)
);
......@@ -60,7 +61,7 @@ class _HomeState extends State<Home> {
(image) => assets.add('assets/skins/default_' + image + '.png')
);
assets.add('assets/skins/empty.png');
assets.add('assets/skins/default_empty.png');
return assets;
}
......@@ -96,7 +97,8 @@ class _HomeState extends State<Home> {
fit: BoxFit.fill
),
),
onPressed: () => GameUtils.resetGame(myProvider),
onPressed: () => toast('Long press to quit game...'),
onLongPress: () => GameUtils.resetGame(myProvider),
),
];
}
......
......@@ -85,7 +85,7 @@ class BoardUtils {
return minesCount;
}
static List createInitialEmptyBoard(Data myProvider) {
static void createInitialEmptyBoard(Data myProvider) {
myProvider.updateIsBoardMined(false);
myProvider.updateCells(createEmptyBoard(myProvider.sizeHorizontal, myProvider.sizeVertical));
}
......@@ -94,7 +94,7 @@ class BoardUtils {
List cells = myProvider.cells;
int sizeHorizontal = myProvider.sizeHorizontal;
int sizeVertical = myProvider.sizeVertical;
String level = myProvider.level;
String level = myProvider.parameterLevel;
// Shuffle cells to put random mines, expect on currently selected one
List allowedCells = [];
......
......@@ -9,9 +9,9 @@ class GameUtils {
}
static void startGame(Data myProvider) {
print('Starting game: ' + myProvider.size + ' - ' + myProvider.level);
myProvider.updateSize(myProvider.size);
myProvider.updateMinesCount(BoardUtils.getMinesCount(myProvider.sizeHorizontal, myProvider.sizeVertical, myProvider.level));
print('Starting game: ' + myProvider.parameterSize + ' - ' + myProvider.parameterLevel);
myProvider.updateParameterSize(myProvider.parameterSize);
myProvider.updateMinesCount(BoardUtils.getMinesCount(myProvider.sizeHorizontal, myProvider.sizeVertical, myProvider.parameterLevel));
myProvider.updateGameIsRunning(true);
BoardUtils.createInitialEmptyBoard(myProvider);
BoardAnimate.startAnimation(myProvider, 'start');
......
......@@ -42,21 +42,21 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
version: "1.16.0"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
version: "2.0.0"
file:
dependency: transitive
description:
......@@ -85,7 +85,7 @@ packages:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.3"
version: "0.6.4"
matcher:
dependency: transitive
description:
......@@ -99,7 +99,7 @@ packages:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
version: "0.1.4"
meta:
dependency: transitive
description:
......@@ -114,34 +114,41 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
overlay_support:
dependency: "direct main"
description:
name: overlay_support
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.1"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
version: "1.8.1"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
version: "2.1.7"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
version: "2.0.4"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
version: "2.1.0"
platform:
dependency: transitive
description:
......@@ -169,42 +176,42 @@ packages:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.2"
version: "6.0.3"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.13"
version: "2.0.15"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
version: "2.0.12"
shared_preferences_ios:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.10"
version: "2.1.1"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
version: "2.1.1"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
version: "2.0.4"
shared_preferences_platform_interface:
dependency: transitive
description:
......@@ -218,14 +225,14 @@ packages:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
version: "2.0.4"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
version: "2.1.1"
sky_engine:
dependency: transitive
description: flutter
......@@ -237,7 +244,7 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
version: "1.8.2"
stack_trace:
dependency: transitive
description:
......@@ -272,28 +279,21 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.8"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "0.4.9"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
version: "2.1.2"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
version: "2.7.0"
xdg_directories:
dependency: transitive
description:
......@@ -302,5 +302,5 @@ packages:
source: hosted
version: "0.2.0+1"
sdks:
dart: ">=2.15.0 <3.0.0"
flutter: ">=2.8.0"
dart: ">=2.17.0 <3.0.0"
flutter: ">=3.0.0"
......@@ -4,13 +4,14 @@ publish_to: 'none'
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
sdk: ">=2.16.1 <3.0.0"
dependencies:
flutter:
sdk: flutter
provider: ^6.0.2
shared_preferences: ^2.0.6
overlay_support: ^1.0.0
dev_dependencies:
flutter_test:
......