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/gradle.properties b/android/gradle.properties index b1ac45ad76b5028a746e117b82b3cb45e7147ce0..084a0c045b1c6d975aa8526aa9dfb21671ceda75 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.34 -app.versionCode=58 +app.versionName=0.1.35 +app.versionCode=59 diff --git a/fastlane/metadata/android/en-US/changelogs/59.txt b/fastlane/metadata/android/en-US/changelogs/59.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ab11150150fc75a46c9acc317890208e5a120b9 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/59.txt @@ -0,0 +1 @@ +Add automatic flutter linter. Apply code lints. Update dependencies. diff --git a/fastlane/metadata/android/fr-FR/changelogs/59.txt b/fastlane/metadata/android/fr-FR/changelogs/59.txt new file mode 100644 index 0000000000000000000000000000000000000000..609f5cf6e95a8df0799865df2e1ebde8fa981e5a --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/59.txt @@ -0,0 +1 @@ +Ajout d'un correcteur automatique de code. Application des corrections. Mise Γ jour des dΓ©pendances. diff --git a/lib/main.dart b/lib/main.dart index a8b8d269c836d8cff0c01d1e5d3c46576adfbf3f..0223044f153427fa22c445e25b2a09f0c9d6770a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,10 +10,12 @@ import 'package:wordguessing/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,15 +26,15 @@ class MyApp extends StatelessWidget { theme: ThemeData( primarySwatch: Colors.blue, ), - home: Home(), + home: const Home(), onGenerateRoute: (settings) { switch (settings.name) { case '/game-pick-word': - return MaterialPageRoute(builder: (context) => GamePickWordPage()); + return MaterialPageRoute(builder: (context) => const GamePickWordPage()); case '/game-pick-image': return MaterialPageRoute( - builder: (context) => GamePickImagePage(), + builder: (context) => const GamePickImagePage(), ); default: diff --git a/lib/models/word.dart b/lib/models/word.dart index d0cb851541e794c85a9dd6ff698b2752c9f33e20..bd5dfc3c448102e563fb358f5e94ad8700adf45a 100644 --- a/lib/models/word.dart +++ b/lib/models/word.dart @@ -11,13 +11,14 @@ class Word { Map<String, dynamic> toJson() { return { - 'key': this.key, - 'text': this.text, - 'images': this.images.toString(), + 'key': key, + 'text': text, + 'images': images.toString(), }; } + @override String toString() { - return this.toJson().toString(); + return toJson().toString(); } } diff --git a/lib/screens/game.dart b/lib/screens/game.dart index a887af7178b8191fcd38fc8c07999daac8f32856..00ede253129c7f06cc7a81bc1f796c9f24536b9f 100644 --- a/lib/screens/game.dart +++ b/lib/screens/game.dart @@ -4,6 +4,8 @@ import 'package:provider/provider.dart'; import 'package:wordguessing/provider/data.dart'; class Game extends StatelessWidget { + const Game({super.key}); + final int countWords = 4; Future<void> startGame(Data myProvider, String lang) async { @@ -48,7 +50,7 @@ class Game extends StatelessWidget { ), child: Text( text, - style: TextStyle( + style: const TextStyle( fontSize: 25, fontWeight: FontWeight.w600, color: Colors.black, @@ -59,12 +61,12 @@ class Game extends StatelessWidget { String getGoodAnswersString(Data myProvider) { final int count = myProvider.questionsCount - 1; - return 'π ' + myProvider.goodAnswers.toString() + '/' + count.toString(); + return 'π ${myProvider.goodAnswers}/$count'; } String getWrongAnswersString(Data myProvider) { final int count = myProvider.questionsCount - 1; - return 'π© ' + myProvider.wrongAnswers.toString() + '/' + count.toString(); + return 'π© ${myProvider.wrongAnswers}/$count'; } Widget buildScoreContainer(Data myProvider) { @@ -93,41 +95,37 @@ class Game extends StatelessWidget { mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ - Container( - child: ElevatedButton( - style: ElevatedButton.styleFrom( - foregroundColor: Colors.teal, - backgroundColor: Colors.teal, - padding: const EdgeInsets.all(35), - ), - child: const Text( - "π«π·", - style: TextStyle( - fontSize: 60, - color: Colors.black, - ), + ElevatedButton( + style: ElevatedButton.styleFrom( + foregroundColor: Colors.teal, + backgroundColor: Colors.teal, + padding: const EdgeInsets.all(35), + ), + child: const Text( + "π«π·", + style: TextStyle( + fontSize: 60, + color: Colors.black, ), - onPressed: () => startGame(myProvider, 'fr'), ), + onPressed: () => startGame(myProvider, 'fr'), ), const SizedBox(height: 15), - Container( - child: ElevatedButton( - style: ElevatedButton.styleFrom( - foregroundColor: Colors.teal, - backgroundColor: Colors.teal, - padding: const EdgeInsets.all(35), - ), - child: const Text( - "π¬π§", - style: TextStyle( - fontSize: 60, - color: Colors.black, - ), + ElevatedButton( + style: ElevatedButton.styleFrom( + foregroundColor: Colors.teal, + backgroundColor: Colors.teal, + padding: const EdgeInsets.all(35), + ), + child: const Text( + "π¬π§", + style: TextStyle( + fontSize: 60, + color: Colors.black, ), - onPressed: () => startGame(myProvider, 'en'), ), - ) + onPressed: () => startGame(myProvider, 'en'), + ), ], ); } @@ -161,15 +159,13 @@ class Game extends StatelessWidget { ); return SizedBox.expand( - child: Container( - child: FittedBox( - fit: BoxFit.contain, - alignment: Alignment.center, - child: SizedBox( - height: (MediaQuery.of(context).size.height), - width: (MediaQuery.of(context).size.width), - child: pageContent, - ), + child: FittedBox( + fit: BoxFit.contain, + alignment: Alignment.center, + child: SizedBox( + height: (MediaQuery.of(context).size.height), + width: (MediaQuery.of(context).size.width), + child: pageContent, ), ), ); diff --git a/lib/screens/game_pick_image.dart b/lib/screens/game_pick_image.dart index 7f5929e51bf09de1ee118676268986140aac0a72..e0facc8cc34f1456f30de8656ad0ff37efbdd2dd 100644 --- a/lib/screens/game_pick_image.dart +++ b/lib/screens/game_pick_image.dart @@ -6,6 +6,9 @@ import 'package:wordguessing/screens/game.dart'; import 'package:wordguessing/utils/random_pick_words.dart'; class GamePickImagePage extends Game { + const GamePickImagePage({super.key}); + + @override Future<void> pickData(Data myProvider) async { final RandomPickWords randomPickWords = RandomPickWords(); Word word; @@ -22,9 +25,9 @@ class GamePickImagePage extends Game { myProvider.updateWord(word); final List<Word> images = []; - words.forEach((element) { + for (var element in words) { images.add(element); - }); + } myProvider.updateImages(images); } @@ -37,32 +40,30 @@ class GamePickImagePage extends Game { const double imageSize = 130; String imageAsset = 'assets/placeholder.png'; - if ((word.images.length != 0)) { - imageAsset = 'assets/images/' + word.images[0]; + if ((word.images.isNotEmpty)) { + imageAsset = 'assets/images/${word.images[0]}'; } - return Container( - child: TextButton( - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: Colors.blue.shade200, - width: 8, - ), - ), - margin: const EdgeInsets.all(2), - child: Image( - image: AssetImage(imageAsset), - width: imageSize, - height: imageSize, - fit: BoxFit.fill, + return TextButton( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + border: Border.all( + color: Colors.blue.shade200, + width: 8, ), ), - onPressed: () { - checkWord(myProvider, word); - }, + margin: const EdgeInsets.all(2), + child: Image( + image: AssetImage(imageAsset), + width: imageSize, + height: imageSize, + fit: BoxFit.fill, + ), ), + onPressed: () { + checkWord(myProvider, word); + }, ); } @@ -119,7 +120,7 @@ class GamePickImagePage extends Game { padding: const EdgeInsets.all(12), child: Text( word.text, - style: TextStyle( + style: const TextStyle( fontSize: 30, fontWeight: FontWeight.w600, color: Colors.white, @@ -129,6 +130,7 @@ class GamePickImagePage extends Game { ); } + @override List<Widget> buildPageContent(Data myProvider) { return <Widget>[ buildTextItemBlock(myProvider), diff --git a/lib/screens/game_pick_word.dart b/lib/screens/game_pick_word.dart index 66403f1e524de53f4e9fdb97202451046a332836..86b842d69c214d7dcdbdcb8588f50f2f7b5d0fd1 100644 --- a/lib/screens/game_pick_word.dart +++ b/lib/screens/game_pick_word.dart @@ -6,6 +6,9 @@ import 'package:wordguessing/screens/game.dart'; import 'package:wordguessing/utils/random_pick_words.dart'; class GamePickWordPage extends Game { + const GamePickWordPage({super.key}); + + @override Future<void> pickData(Data myProvider) async { final RandomPickWords randomPickWords = RandomPickWords(); Word word; @@ -33,7 +36,7 @@ class GamePickWordPage extends Game { String imageAsset = 'assets/placeholder.png'; if (image != '') { - imageAsset = 'assets/images/' + image; + imageAsset = 'assets/images/$image'; } return Container( @@ -96,7 +99,7 @@ class GamePickWordPage extends Game { ), child: Text( word.text, - style: TextStyle( + style: const TextStyle( fontSize: 20, fontWeight: FontWeight.w600, color: Colors.white, @@ -114,7 +117,7 @@ class GamePickWordPage extends Game { List<Word> otherWords = myProvider.otherWords; if ((word == null) || (otherWords.length != (countWords - 1))) { - return Column(); + return const Column(); } List<Word> words = [ @@ -153,9 +156,10 @@ class GamePickWordPage extends Game { ); } + @override List<Widget> buildPageContent(Data myProvider) { return <Widget>[ - (myProvider.images.length != 0) + (myProvider.images.isNotEmpty) ? buildImageItemsBlock(myProvider.images[0]) : const SizedBox.shrink(), const SizedBox(height: 2), diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 8b664e9e48fe9e78f4c264c718d646325e267f0a..e83989992c5d71837bebd95d617b4052e1a3558a 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -4,6 +4,8 @@ import 'package:provider/provider.dart'; import 'package:wordguessing/provider/data.dart'; class Home extends StatelessWidget { + const Home({super.key}); + static const String id = 'home'; @override @@ -13,7 +15,7 @@ class Home extends StatelessWidget { Container buildMenuItemContainer(String code, Color color) { const double imageSize = 150; - final String imageAsset = 'assets/menu/' + code + '.png'; + final String imageAsset = 'assets/menu/$code.png'; return Container( margin: const EdgeInsets.all(2), @@ -35,7 +37,7 @@ class Home extends StatelessWidget { myProvider.resetGame(); Navigator.pushNamed( context, - '/' + code, + '/$code', ); }, ), diff --git a/lib/utils/random_pick_words.dart b/lib/utils/random_pick_words.dart index e0fe729f70e6166d5bd04abdb1cd82d4f3330ac1..a65f418ceef97bdb27344a77d522a91907b85a50 100644 --- a/lib/utils/random_pick_words.dart +++ b/lib/utils/random_pick_words.dart @@ -24,13 +24,13 @@ class RandomPickWords { wordsMap.forEach((key, data) { final List<String> images = []; - (data['images'] as List<dynamic>).forEach((image) { + for (var image in (data['images'] as List<dynamic>)) { images.add(image as String); - }); + } images.shuffle(); - if (images.length != 0) { + if (images.isNotEmpty) { wordList.add(Word( key: key, text: data[lang] ?? '', diff --git a/pubspec.lock b/pubspec.lock index aa6ea1ddaf3377e73068c1bf11a79fb671586772..4abc6fe4745a68c7a413405f1ddfd8cad617a2bb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -22,22 +22,38 @@ packages: 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" + 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: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" nested: dependency: transitive description: @@ -67,14 +83,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - web: - dependency: transitive - description: - name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 - url: "https://pub.dev" - source: hosted - version: "0.3.0" sdks: - dart: ">=3.2.0-194.0.dev <4.0.0" + dart: ">=3.2.0-0 <4.0.0" flutter: ">=1.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index a33fb28eb74a5cb444ecf5a3195aa72c5decb198..9086709d206c5248a0e8b6514e12f24619507642 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: wordguessing description: A wordguessing game application. publish_to: 'none' -version: 0.1.34+58 +version: 0.1.35+59 environment: sdk: '^3.0.0' @@ -11,6 +11,9 @@ dependencies: sdk: flutter provider: ^6.0.5 +dev_dependencies: + flutter_lints: ^3.0.1 + flutter: uses-material-design: true assets: