From 062293558e0c698a2f5a0b28eba8f285bdd2bdc9 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Wed, 13 Aug 2025 10:16:22 -0300 Subject: [PATCH 1/5] chore: updating dependencies --- .../flame_mini_sprite/example/pubspec.lock | 86 ++-- packages/flame_mini_sprite/pubspec.lock | 106 ++-- packages/mini_hub_client/pubspec.yaml | 2 +- .../lib/l10n/arb/app_localizations.dart | 463 ++++++++++++++++++ .../lib/l10n/arb/app_localizations_en.dart | 178 +++++++ packages/mini_sprite_editor/pubspec.lock | 130 ++--- packages/mini_sprite_editor/pubspec.yaml | 2 +- packages/mini_treasure_quest/pubspec.lock | 86 ++-- 8 files changed, 855 insertions(+), 198 deletions(-) create mode 100644 packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart create mode 100644 packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart diff --git a/packages/flame_mini_sprite/example/pubspec.lock b/packages/flame_mini_sprite/example/pubspec.lock index e5c5050..4df92d5 100644 --- a/packages/flame_mini_sprite/example/pubspec.lock +++ b/packages/flame_mini_sprite/example/pubspec.lock @@ -5,42 +5,42 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.13.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" characters: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" cupertino_icons: dependency: "direct main" description: @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.3" flame: dependency: "direct main" description: @@ -102,26 +102,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" lints: dependency: transitive description: @@ -134,26 +134,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.16.0" mini_sprite: dependency: "direct main" description: @@ -173,63 +173,63 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" sky_engine: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_span: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" stack_trace: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.4" vector_math: dependency: transitive description: @@ -242,10 +242,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "15.0.0" sdks: - dart: ">=3.2.0-0 <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.7.0-0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/flame_mini_sprite/pubspec.lock b/packages/flame_mini_sprite/pubspec.lock index 40c11dd..a5294f6 100644 --- a/packages/flame_mini_sprite/pubspec.lock +++ b/packages/flame_mini_sprite/pubspec.lock @@ -29,42 +29,42 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.13.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" characters: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" convert: dependency: transitive description: @@ -77,10 +77,10 @@ packages: dependency: transitive description: name: coverage - sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76" + sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 url: "https://pub.dev" source: hosted - version: "1.7.2" + version: "1.11.1" crypto: dependency: transitive description: @@ -101,18 +101,18 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.3" file: dependency: transitive description: name: file - sha256: b69516f2c26a5bcac4eee2e32512e1a5205ab312b3536c1c1227b2b942b5f9ad + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "7.0.1" flame: dependency: "direct main" description: @@ -151,10 +151,10 @@ packages: dependency: transitive description: name: glob - sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729 + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" http_multi_server: dependency: transitive description: @@ -191,26 +191,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" logging: dependency: transitive description: @@ -223,26 +223,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.16.0" mime: dependency: transitive description: @@ -286,10 +286,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" pool: dependency: transitive description: @@ -342,7 +342,7 @@ packages: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_map_stack_trace: dependency: transitive description: @@ -363,66 +363,66 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" stack_trace: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.15" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.4" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.8" typed_data: dependency: transitive description: @@ -451,10 +451,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "15.0.0" watcher: dependency: transitive description: @@ -488,5 +488,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=3.2.0-0 <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.7.0-0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/mini_hub_client/pubspec.yaml b/packages/mini_hub_client/pubspec.yaml index b2675c9..5ef636f 100644 --- a/packages/mini_hub_client/pubspec.yaml +++ b/packages/mini_hub_client/pubspec.yaml @@ -7,7 +7,7 @@ environment: sdk: ">=2.17.0 <3.0.0" dependencies: - dio: ^4.0.6 + dio: ^5.9.0 equatable: ^2.0.3 json_annotation: ^4.6.0 diff --git a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart new file mode 100644 index 0000000..bbd1ecf --- /dev/null +++ b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart @@ -0,0 +1,463 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; + +import 'app_localizations_en.dart'; + +// ignore_for_file: type=lint + +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'arb/app_localizations.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations of(BuildContext context) { + return Localizations.of(context, AppLocalizations)!; + } + + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = + >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [Locale('en')]; + + /// Zoom In tooltip + /// + /// In en, this message translates to: + /// **'Zoom In'** + String get zoomIn; + + /// Zoom Out tooltip + /// + /// In en, this message translates to: + /// **'Zoom Out'** + String get zoomOut; + + /// Copy to clipboard label + /// + /// In en, this message translates to: + /// **'Copy to clipboard'** + String get copyToClipboard; + + /// Message of data copied to clipboard + /// + /// In en, this message translates to: + /// **'Data copied to clipboard'** + String get copiedWithSuccess; + + /// Import from clipboard label + /// + /// In en, this message translates to: + /// **'Import from clipboard'** + String get importFromClipBoard; + + /// Message of data imported to clipboard + /// + /// In en, this message translates to: + /// **'Data imported from clipboard'** + String get importSuccess; + + /// Cursor label + /// + /// In en, this message translates to: + /// **'Cursor'** + String get cursor; + + /// Brush label + /// + /// In en, this message translates to: + /// **'Brush'** + String get brush; + + /// Eraser label + /// + /// In en, this message translates to: + /// **'Eraser'** + String get eraser; + + /// Fill label + /// + /// In en, this message translates to: + /// **'Fill'** + String get bucket; + + /// Unfill label + /// + /// In en, this message translates to: + /// **'Unfill'** + String get bucketEraser; + + /// Label for width + /// + /// In en, this message translates to: + /// **'Width'** + String get width; + + /// Label for height + /// + /// In en, this message translates to: + /// **'Height'** + String get height; + + /// Error message for values that must be greated than zero. + /// + /// In en, this message translates to: + /// **'Must be greater than zero'** + String get greaterThanZero; + + /// Confirm label + /// + /// In en, this message translates to: + /// **'Confirm'** + String get confirm; + + /// Close label + /// + /// In en, this message translates to: + /// **'Close'** + String get close; + + /// Cancel label + /// + /// In en, this message translates to: + /// **'Cancel'** + String get cancel; + + /// Title for the sprite size dialog + /// + /// In en, this message translates to: + /// **'Edit sprite size'** + String get spriteSizeTitle; + + /// Title used on confirmation dialogs + /// + /// In en, this message translates to: + /// **'Confirmation'** + String get confirmation; + + /// Message used on confirmation dialogs + /// + /// In en, this message translates to: + /// **'Are you sure?'** + String get confirmationMessage; + + /// Label for clearing the sprite + /// + /// In en, this message translates to: + /// **'Clear sprite'** + String get clearSprite; + + /// Label for the grid toogling + /// + /// In en, this message translates to: + /// **'Toogle grid'** + String get toogleGrid; + + /// Label for configurations + /// + /// In en, this message translates to: + /// **'Configurations'** + String get configurations; + + /// Label for system + /// + /// In en, this message translates to: + /// **'System'** + String get system; + + /// Label for light + /// + /// In en, this message translates to: + /// **'Light'** + String get light; + + /// Label for dark + /// + /// In en, this message translates to: + /// **'Dark'** + String get dark; + + /// Label for the filled pixel color + /// + /// In en, this message translates to: + /// **'Filled pixel color'** + String get filledPixelColor; + + /// Label for the unfilled pixel color + /// + /// In en, this message translates to: + /// **'Unfilled pixel color'** + String get unfilledPixelColor; + + /// Label for the background color + /// + /// In en, this message translates to: + /// **'Background color'** + String get backgroundColor; + + /// Label for the choose color label + /// + /// In en, this message translates to: + /// **'Choose color'** + String get chooseColor; + + /// Label for the image export button + /// + /// In en, this message translates to: + /// **'Export current sprite to image'** + String get exportToImage; + + /// Label for the image export button + /// + /// In en, this message translates to: + /// **'Sprite successfully exported'** + String get spriteExported; + + /// Label for the start collection button + /// + /// In en, this message translates to: + /// **'Start a collection'** + String get startCollection; + + /// Label for the add sprite button + /// + /// In en, this message translates to: + /// **'Add a sprite'** + String get addSprite; + + /// Title for the rename sprite + /// + /// In en, this message translates to: + /// **'Rename sprite'** + String get renameSprite; + + /// Label for the rename sprite + /// + /// In en, this message translates to: + /// **'Choose the new name'** + String get renameSpriteMessage; + + /// Label for the remove sprite button + /// + /// In en, this message translates to: + /// **'Remove selected sprite'** + String get removeSprite; + + /// Label for the sprite editor + /// + /// In en, this message translates to: + /// **'Open sprite editor'** + String get openSpriteEditor; + + /// Label for the sprite editor + /// + /// In en, this message translates to: + /// **'Open map editor'** + String get openMapEditor; + + /// Label for the map size + /// + /// In en, this message translates to: + /// **'Edit map size'** + String get mapSizeTitle; + + /// Label for the clear map + /// + /// In en, this message translates to: + /// **'Clear map'** + String get clearMap; + + /// Label for the map grid size + /// + /// In en, this message translates to: + /// **'Map grid size'** + String get mapGridSize; + + /// Label for the properties + /// + /// In en, this message translates to: + /// **'Properties'** + String get properties; + + /// Label for the remove property + /// + /// In en, this message translates to: + /// **'Remove property'** + String get removeProperty; + + /// Label for the new property + /// + /// In en, this message translates to: + /// **'New property'** + String get newPropery; + + /// Label for the name + /// + /// In en, this message translates to: + /// **'Name'** + String get name; + + /// Label for the theme settings + /// + /// In en, this message translates to: + /// **'Value'** + String get value; + + /// No description provided for @themeSettings. + /// + /// In en, this message translates to: + /// **'Theme settings'** + String get themeSettings; + + /// Label for the color settings + /// + /// In en, this message translates to: + /// **'Color settings'** + String get colorSettings; + + /// Label for the map settings + /// + /// In en, this message translates to: + /// **'Map settings'** + String get mapSettings; + + /// Label Palette + /// + /// In en, this message translates to: + /// **'Palette'** + String get palette; + + /// Label for add color + /// + /// In en, this message translates to: + /// **'Add color'** + String get addColor; + + /// Label for flipping the sprite vertically + /// + /// In en, this message translates to: + /// **'Flip vertically'** + String get flipVertically; + + /// Label for flipping the sprite horizontally + /// + /// In en, this message translates to: + /// **'Flip horizontally'** + String get flipHorizontally; + + /// Label for rotating the sprite clockwise + /// + /// In en, this message translates to: + /// **'Rotate clockwise'** + String get rotateClockwise; + + /// Label for rotating the sprite counter clockwise + /// + /// In en, this message translates to: + /// **'Rotate counter clockwise'** + String get rotateCounterClockwise; +} + +class _AppLocalizationsDelegate + extends LocalizationsDelegate { + const _AppLocalizationsDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } + + @override + bool isSupported(Locale locale) => + ['en'].contains(locale.languageCode); + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'en': + return AppLocalizationsEn(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.'); +} diff --git a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart new file mode 100644 index 0000000..c162f05 --- /dev/null +++ b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations_en.dart @@ -0,0 +1,178 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String get zoomIn => 'Zoom In'; + + @override + String get zoomOut => 'Zoom Out'; + + @override + String get copyToClipboard => 'Copy to clipboard'; + + @override + String get copiedWithSuccess => 'Data copied to clipboard'; + + @override + String get importFromClipBoard => 'Import from clipboard'; + + @override + String get importSuccess => 'Data imported from clipboard'; + + @override + String get cursor => 'Cursor'; + + @override + String get brush => 'Brush'; + + @override + String get eraser => 'Eraser'; + + @override + String get bucket => 'Fill'; + + @override + String get bucketEraser => 'Unfill'; + + @override + String get width => 'Width'; + + @override + String get height => 'Height'; + + @override + String get greaterThanZero => 'Must be greater than zero'; + + @override + String get confirm => 'Confirm'; + + @override + String get close => 'Close'; + + @override + String get cancel => 'Cancel'; + + @override + String get spriteSizeTitle => 'Edit sprite size'; + + @override + String get confirmation => 'Confirmation'; + + @override + String get confirmationMessage => 'Are you sure?'; + + @override + String get clearSprite => 'Clear sprite'; + + @override + String get toogleGrid => 'Toogle grid'; + + @override + String get configurations => 'Configurations'; + + @override + String get system => 'System'; + + @override + String get light => 'Light'; + + @override + String get dark => 'Dark'; + + @override + String get filledPixelColor => 'Filled pixel color'; + + @override + String get unfilledPixelColor => 'Unfilled pixel color'; + + @override + String get backgroundColor => 'Background color'; + + @override + String get chooseColor => 'Choose color'; + + @override + String get exportToImage => 'Export current sprite to image'; + + @override + String get spriteExported => 'Sprite successfully exported'; + + @override + String get startCollection => 'Start a collection'; + + @override + String get addSprite => 'Add a sprite'; + + @override + String get renameSprite => 'Rename sprite'; + + @override + String get renameSpriteMessage => 'Choose the new name'; + + @override + String get removeSprite => 'Remove selected sprite'; + + @override + String get openSpriteEditor => 'Open sprite editor'; + + @override + String get openMapEditor => 'Open map editor'; + + @override + String get mapSizeTitle => 'Edit map size'; + + @override + String get clearMap => 'Clear map'; + + @override + String get mapGridSize => 'Map grid size'; + + @override + String get properties => 'Properties'; + + @override + String get removeProperty => 'Remove property'; + + @override + String get newPropery => 'New property'; + + @override + String get name => 'Name'; + + @override + String get value => 'Value'; + + @override + String get themeSettings => 'Theme settings'; + + @override + String get colorSettings => 'Color settings'; + + @override + String get mapSettings => 'Map settings'; + + @override + String get palette => 'Palette'; + + @override + String get addColor => 'Add color'; + + @override + String get flipVertically => 'Flip vertically'; + + @override + String get flipHorizontally => 'Flip horizontally'; + + @override + String get rotateClockwise => 'Rotate clockwise'; + + @override + String get rotateCounterClockwise => 'Rotate counter clockwise'; +} diff --git a/packages/mini_sprite_editor/pubspec.lock b/packages/mini_sprite_editor/pubspec.lock index 2d16583..2931005 100644 --- a/packages/mini_sprite_editor/pubspec.lock +++ b/packages/mini_sprite_editor/pubspec.lock @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.13.0" bloc: dependency: "direct main" description: @@ -53,34 +53,34 @@ packages: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" characters: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: "direct main" description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" convert: dependency: transitive description: @@ -93,10 +93,10 @@ packages: dependency: transitive description: name: coverage - sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76" + sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 url: "https://pub.dev" source: hosted - version: "1.7.2" + version: "1.11.1" cross_file: dependency: transitive description: @@ -125,10 +125,18 @@ packages: dependency: transitive description: name: dio - sha256: "7d328c4d898a61efc3cd93655a0955858e29a0aa647f0f9e02d59b3bb275e2e8" + sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9 + url: "https://pub.dev" + source: hosted + version: "5.9.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78" url: "https://pub.dev" source: hosted - version: "4.0.6" + version: "2.1.1" equatable: dependency: "direct main" description: @@ -141,10 +149,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.3" ffi: dependency: transitive description: @@ -157,10 +165,10 @@ packages: dependency: transitive description: name: file - sha256: b69516f2c26a5bcac4eee2e32512e1a5205ab312b3536c1c1227b2b942b5f9ad + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.4" file_selector: dependency: "direct main" description: @@ -272,10 +280,10 @@ packages: dependency: transitive description: name: glob - sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729 + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" hive: dependency: transitive description: @@ -320,10 +328,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.20.2" io: dependency: transitive description: @@ -352,26 +360,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" logging: dependency: transitive description: @@ -384,26 +392,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.16.0" mime: dependency: transitive description: @@ -470,10 +478,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_provider: dependency: "direct main" description: @@ -622,7 +630,7 @@ packages: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_map_stack_trace: dependency: transitive description: @@ -643,34 +651,34 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" stack_trace: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" synchronized: dependency: transitive description: @@ -683,34 +691,34 @@ packages: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test: dependency: transitive description: name: test - sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" url: "https://pub.dev" source: hosted - version: "1.24.9" + version: "1.25.15" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.4" test_core: dependency: transitive description: name: test_core - sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.6.8" typed_data: dependency: transitive description: @@ -739,10 +747,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "15.0.0" watcher: dependency: transitive description: @@ -751,6 +759,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" web_socket_channel: dependency: transitive description: @@ -792,5 +808,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=3.2.0-0 <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.7.0-0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/mini_sprite_editor/pubspec.yaml b/packages/mini_sprite_editor/pubspec.yaml index 584d759..1581818 100644 --- a/packages/mini_sprite_editor/pubspec.yaml +++ b/packages/mini_sprite_editor/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: flutter_localizations: sdk: flutter hydrated_bloc: ^9.0.0-dev.3 - intl: ^0.18.0 + intl: ^0.20.2 mini_hub_client: 0.0.1 mini_sprite: 0.1.0 path_provider: ^2.0.11 diff --git a/packages/mini_treasure_quest/pubspec.lock b/packages/mini_treasure_quest/pubspec.lock index 559ab2e..86b2d49 100644 --- a/packages/mini_treasure_quest/pubspec.lock +++ b/packages/mini_treasure_quest/pubspec.lock @@ -5,42 +5,42 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.13.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" characters: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" crypto: dependency: transitive description: @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.3" ffi: dependency: transitive description: @@ -166,26 +166,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" lints: dependency: transitive description: @@ -198,26 +198,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.16.0" mini_sprite: dependency: "direct main" description: @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_provider: dependency: transitive description: @@ -325,55 +325,55 @@ packages: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_span: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" stack_trace: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.4" typed_data: dependency: transitive description: @@ -402,10 +402,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "15.0.0" web: dependency: transitive description: @@ -431,5 +431,5 @@ packages: source: hosted version: "0.2.0+1" sdks: - dart: ">=3.2.0 <4.0.0" - flutter: ">=3.13.0" + dart: ">=3.7.0-0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" From 2cf5e0e8a0b0e8cfe82c62030e8fb3b5f1071072 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Fri, 3 Oct 2025 10:33:40 -0300 Subject: [PATCH 2/5] the big overhaul --- .../flame_mini_sprite/example/pubspec.lock | 32 +- .../src/components/mini_sprite_component.dart | 2 +- packages/flame_mini_sprite/pubspec.lock | 40 +- packages/flame_mini_sprite/pubspec.yaml | 2 +- .../flutter_mini_sprite/analysis_options.yaml | 2 +- .../lib/flutter_mini_sprite.dart | 2 - .../lib/src/flutter_mini_sprite.dart | 2 +- packages/flutter_mini_sprite/pubspec.yaml | 2 +- .../test/src/flutter_mini_sprite_test.dart | 3 +- packages/mini_hub_client/.gitignore | 7 - packages/mini_hub_client/README.md | 11 - .../mini_hub_client/analysis_options.yaml | 1 - .../mini_hub_client/lib/mini_hub_client.dart | 5 - .../mini_hub_client/lib/src/hub_entry.dart | 55 - .../mini_hub_client/lib/src/hub_entry.g.dart | 25 - .../lib/src/hub_entry_result.dart | 40 - .../lib/src/hub_entry_result.g.dart | 21 - .../lib/src/mini_hub_client.dart | 40 - .../mini_hub_client/melos_mini_hub_client.iml | 16 - packages/mini_hub_client/pubspec.yaml | 19 - packages/mini_sprite/analysis_options.yaml | 2 +- packages/mini_sprite/lib/src/mini_map.dart | 2 +- packages/mini_sprite/pubspec.yaml | 2 +- .../test/src/mini_sprite_test.dart | 8 +- .../mini_sprite_editor/analysis_options.yaml | 2 +- .../mini_sprite_editor/lib/app/view/app.dart | 84 +- .../mini_sprite_editor/lib/bootstrap.dart | 15 +- .../lib/config/cubit/config_cubit.dart | 8 +- .../lib/config/cubit/config_state.dart | 19 +- .../lib/config/view/config_dialog.dart | 149 +-- .../lib/hub/cubit/hub_cubit.dart | 29 - .../lib/hub/cubit/hub_state.dart | 37 - packages/mini_sprite_editor/lib/hub/hub.dart | 2 - .../lib/hub/view/hub_entry_card.dart | 158 --- .../lib/hub/view/hub_page.dart | 41 - .../mini_sprite_editor/lib/hub/view/view.dart | 2 - .../lib/l10n/arb/app_localizations.dart | 21 +- .../mini_sprite_editor/lib/l10n/l10n.dart | 4 +- .../lib/library/cubit/library_cubit.dart | 40 +- .../lib/library/cubit/library_state.dart | 16 +- .../lib/library/view/library_panel.dart | 12 +- packages/mini_sprite_editor/lib/main.dart | 7 +- .../lib/map/cubit/map_cubit.dart | 67 +- .../lib/map/cubit/map_state.dart | 10 +- .../lib/map/cubit/map_tool_cubit.dart | 24 +- .../lib/map/cubit/map_tool_state.dart | 18 +- .../lib/map/map_board/map_board_game.dart | 23 +- .../lib/map/map_board/tile_component.dart | 36 +- .../lib/map/view/map_page.dart | 78 +- .../lib/map/view/map_size_dialog.dart | 18 +- .../lib/map/view/new_property_dialog.dart | 22 +- .../lib/map/view/object_panel.dart | 17 +- .../lib/sprite/cubit/sprite_cubit.dart | 16 +- .../lib/sprite/cubit/sprite_state.dart | 29 +- .../lib/sprite/cubit/tools_state.dart | 19 +- .../lib/sprite/models/sprite_tool.dart | 7 +- .../lib/sprite/view/confirm_dialog.dart | 4 +- .../lib/sprite/view/page_shortcuts.dart | 5 +- .../lib/sprite/view/pixel_cell.dart | 2 +- .../lib/sprite/view/rename_dialog.dart | 6 +- .../lib/sprite/view/sprite_page.dart | 140 +-- .../lib/sprite/view/sprite_size_dialog.dart | 18 +- .../lib/workspace/cubit/workspace_cubit.dart | 14 +- .../lib/workspace/cubit/workspace_state.dart | 22 +- .../lib/workspace/view/initial_panel.dart | 8 +- .../lib/workspace/view/panel.dart | 9 +- .../lib/workspace/view/tab_workspace.dart | 7 +- .../lib/workspace/view/workspace_view.dart | 10 +- .../Flutter/GeneratedPluginRegistrant.swift | 2 +- packages/mini_sprite_editor/pubspec.lock | 336 +++--- packages/mini_sprite_editor/pubspec.yaml | 8 +- .../test/config/cubit/config_cubit_test.dart | 111 +- .../test/config/cubit/config_state_test.dart | 12 +- .../test/config/view/sprite_config_test.dart | 42 +- .../test/helpers/mock_hydrated_storage.dart | 5 + .../test/helpers/pump_app.dart | 2 +- .../library/cubit/library_cubit_test.dart | 442 ++++--- .../library/cubit/library_state_test.dart | 23 +- .../test/sprite/cubit/sprite_cubit_test.dart | 403 ++++--- .../test/sprite/cubit/sprite_state_test.dart | 46 +- .../test/sprite/cubit/tools_cubit_test.dart | 23 +- .../test/sprite/view/pixel_cell_test.dart | 74 +- .../test/sprite/view/sprite_view_test.dart | 1013 ++++++++--------- .../workspace/view/workspace_view_test.dart | 164 +-- packages/mini_treasure_quest/lib/main.dart | 4 +- 85 files changed, 1665 insertions(+), 2661 deletions(-) delete mode 100644 packages/mini_hub_client/.gitignore delete mode 100644 packages/mini_hub_client/README.md delete mode 100644 packages/mini_hub_client/analysis_options.yaml delete mode 100644 packages/mini_hub_client/lib/mini_hub_client.dart delete mode 100644 packages/mini_hub_client/lib/src/hub_entry.dart delete mode 100644 packages/mini_hub_client/lib/src/hub_entry.g.dart delete mode 100644 packages/mini_hub_client/lib/src/hub_entry_result.dart delete mode 100644 packages/mini_hub_client/lib/src/hub_entry_result.g.dart delete mode 100644 packages/mini_hub_client/lib/src/mini_hub_client.dart delete mode 100644 packages/mini_hub_client/melos_mini_hub_client.iml delete mode 100644 packages/mini_hub_client/pubspec.yaml delete mode 100644 packages/mini_sprite_editor/lib/hub/cubit/hub_cubit.dart delete mode 100644 packages/mini_sprite_editor/lib/hub/cubit/hub_state.dart delete mode 100644 packages/mini_sprite_editor/lib/hub/hub.dart delete mode 100644 packages/mini_sprite_editor/lib/hub/view/hub_entry_card.dart delete mode 100644 packages/mini_sprite_editor/lib/hub/view/hub_page.dart delete mode 100644 packages/mini_sprite_editor/lib/hub/view/view.dart diff --git a/packages/flame_mini_sprite/example/pubspec.lock b/packages/flame_mini_sprite/example/pubspec.lock index 4df92d5..2b46e39 100644 --- a/packages/flame_mini_sprite/example/pubspec.lock +++ b/packages/flame_mini_sprite/example/pubspec.lock @@ -69,10 +69,10 @@ packages: dependency: "direct main" description: name: flame - sha256: "61c42b966a6b1f44ee093194e6701d45b14fdda1859c14fe68a39489454bfbd4" + sha256: "86f63943349ef4d891fd1988ccd9fa3d27952eb8d9eb17b774a64e78cd62aaa6" url: "https://pub.dev" source: hosted - version: "1.14.0" + version: "1.32.0" flame_mini_sprite: dependency: "direct main" description: @@ -102,26 +102,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "10.0.9" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" lints: dependency: transitive description: @@ -165,10 +165,10 @@ packages: dependency: transitive description: name: ordered_set - sha256: "3858c7d84619edfab87c3e367584648020903187edb70b52697646f4b2a93022" + sha256: d6c1d053a533e84931a388cbf03f1ad21a0543bf06c7a281859d3ffacd8e15f2 url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "8.0.0" path: dependency: transitive description: @@ -226,18 +226,18 @@ packages: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.6" vector_math: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" vm_service: dependency: transitive description: @@ -247,5 +247,5 @@ packages: source: hosted version: "15.0.0" sdks: - dart: ">=3.7.0-0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.32.0" diff --git a/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart b/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart index 574dd02..a21adf7 100644 --- a/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart +++ b/packages/flame_mini_sprite/lib/src/components/mini_sprite_component.dart @@ -91,7 +91,7 @@ class MiniSpriteComponent extends PositionComponent { } final paint = _palette[entry.color]; - if (paint.color.alpha == 0) { + if (((paint.color.a * 255.0).round() & 0xff) == 0) { continue; } diff --git a/packages/flame_mini_sprite/pubspec.lock b/packages/flame_mini_sprite/pubspec.lock index a5294f6..ab2e465 100644 --- a/packages/flame_mini_sprite/pubspec.lock +++ b/packages/flame_mini_sprite/pubspec.lock @@ -117,10 +117,10 @@ packages: dependency: "direct main" description: name: flame - sha256: "61c42b966a6b1f44ee093194e6701d45b14fdda1859c14fe68a39489454bfbd4" + sha256: "86f63943349ef4d891fd1988ccd9fa3d27952eb8d9eb17b774a64e78cd62aaa6" url: "https://pub.dev" source: hosted - version: "1.14.0" + version: "1.32.0" flame_test: dependency: "direct dev" description: @@ -191,26 +191,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "10.0.9" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" logging: dependency: transitive description: @@ -270,10 +270,10 @@ packages: dependency: transitive description: name: ordered_set - sha256: "3858c7d84619edfab87c3e367584648020903187edb70b52697646f4b2a93022" + sha256: d6c1d053a533e84931a388cbf03f1ad21a0543bf06c7a281859d3ffacd8e15f2 url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "8.0.0" package_config: dependency: transitive description: @@ -403,26 +403,26 @@ packages: dependency: transitive description: name: test - sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" + sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb" url: "https://pub.dev" source: hosted - version: "1.25.15" + version: "1.26.2" test_api: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.6" test_core: dependency: transitive description: name: test_core - sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" + sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a" url: "https://pub.dev" source: hosted - version: "0.6.8" + version: "0.6.11" typed_data: dependency: transitive description: @@ -435,10 +435,10 @@ packages: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" very_good_analysis: dependency: "direct dev" description: @@ -488,5 +488,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=3.7.0-0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.32.0" diff --git a/packages/flame_mini_sprite/pubspec.yaml b/packages/flame_mini_sprite/pubspec.yaml index d76ad7f..32b0e80 100644 --- a/packages/flame_mini_sprite/pubspec.yaml +++ b/packages/flame_mini_sprite/pubspec.yaml @@ -7,7 +7,7 @@ environment: sdk: ">=2.17.0 <3.0.0" dependencies: - flame: ^1.14.0 + flame: ^1.32.0 flutter: sdk: flutter mini_sprite: ^0.1.0 diff --git a/packages/flutter_mini_sprite/analysis_options.yaml b/packages/flutter_mini_sprite/analysis_options.yaml index d0fffaf..9df80aa 100644 --- a/packages/flutter_mini_sprite/analysis_options.yaml +++ b/packages/flutter_mini_sprite/analysis_options.yaml @@ -1 +1 @@ -include: package:very_good_analysis/analysis_options.3.0.1.yaml +include: package:very_good_analysis/analysis_options.yaml diff --git a/packages/flutter_mini_sprite/lib/flutter_mini_sprite.dart b/packages/flutter_mini_sprite/lib/flutter_mini_sprite.dart index 6465920..196ea0c 100644 --- a/packages/flutter_mini_sprite/lib/flutter_mini_sprite.dart +++ b/packages/flutter_mini_sprite/lib/flutter_mini_sprite.dart @@ -1,3 +1 @@ -library flutter_mini_sprite; - export 'src/flutter_mini_sprite.dart'; diff --git a/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart b/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart index ff24f09..be09b57 100644 --- a/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart +++ b/packages/flutter_mini_sprite/lib/src/flutter_mini_sprite.dart @@ -9,10 +9,10 @@ import 'package:mini_sprite/mini_sprite.dart'; class MiniSpriteWidget extends StatelessWidget { /// {@macro mini_sprite_widget} const MiniSpriteWidget({ - super.key, required this.sprite, this.pixelSize = 1, this.palette = const [Color(0xFFFFFFFF), Color(0xFF000000)], + super.key, }); /// The size of each pixel of the sprite, defaults to 1. diff --git a/packages/flutter_mini_sprite/pubspec.yaml b/packages/flutter_mini_sprite/pubspec.yaml index 7ae8064..1bb9024 100644 --- a/packages/flutter_mini_sprite/pubspec.yaml +++ b/packages/flutter_mini_sprite/pubspec.yaml @@ -13,4 +13,4 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - very_good_analysis: ^3.0.1 + very_good_analysis: ^10.0.0 diff --git a/packages/flutter_mini_sprite/test/src/flutter_mini_sprite_test.dart b/packages/flutter_mini_sprite/test/src/flutter_mini_sprite_test.dart index a5f31fe..0535ce8 100644 --- a/packages/flutter_mini_sprite/test/src/flutter_mini_sprite_test.dart +++ b/packages/flutter_mini_sprite/test/src/flutter_mini_sprite_test.dart @@ -1,4 +1,5 @@ -// ignore_for_file: prefer_const_constructors, lines_longer_than_80_chars +// Ignoring for test +// ignore_for_file: lines_longer_than_80_chars import 'package:flutter/material.dart'; import 'package:flutter_mini_sprite/flutter_mini_sprite.dart'; import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/mini_hub_client/.gitignore b/packages/mini_hub_client/.gitignore deleted file mode 100644 index 526da15..0000000 --- a/packages/mini_hub_client/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# See https://www.dartlang.org/guides/libraries/private-files - -# Files and directories created by pub -.dart_tool/ -.packages -build/ -pubspec.lock \ No newline at end of file diff --git a/packages/mini_hub_client/README.md b/packages/mini_hub_client/README.md deleted file mode 100644 index 2bd3d7f..0000000 --- a/packages/mini_hub_client/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# mini_hub_client - -[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link] -[![License: MIT][license_badge]][license_link] - -A dart client that provides access to the mini sprite hub API - -[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg -[license_link]: https://opensource.org/licenses/MIT -[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg -[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis diff --git a/packages/mini_hub_client/analysis_options.yaml b/packages/mini_hub_client/analysis_options.yaml deleted file mode 100644 index d0fffaf..0000000 --- a/packages/mini_hub_client/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: package:very_good_analysis/analysis_options.3.0.1.yaml diff --git a/packages/mini_hub_client/lib/mini_hub_client.dart b/packages/mini_hub_client/lib/mini_hub_client.dart deleted file mode 100644 index e94e2bb..0000000 --- a/packages/mini_hub_client/lib/mini_hub_client.dart +++ /dev/null @@ -1,5 +0,0 @@ -library mini_hub_client; - -export 'src/hub_entry.dart'; -export 'src/hub_entry_result.dart'; -export 'src/mini_hub_client.dart'; diff --git a/packages/mini_hub_client/lib/src/hub_entry.dart b/packages/mini_hub_client/lib/src/hub_entry.dart deleted file mode 100644 index a2cca56..0000000 --- a/packages/mini_hub_client/lib/src/hub_entry.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:json_annotation/json_annotation.dart'; - -part 'hub_entry.g.dart'; - -/// {@template hub_entry} -/// Model representing a hub entry. -/// {@endtemplate} -@JsonSerializable() -class HubEntry extends Equatable { - /// {@macro hub_entry} - const HubEntry({ - required this.name, - required this.description, - required this.data, - required this.thumb, - required this.gridSize, - required this.author, - }); - - /// {@macro hub_entry} - factory HubEntry.fromJson(Map json) => - _$HubEntryFromJson(json); - - /// This as a json. - Map toJson() => _$HubEntryToJson(this); - - /// The name of the entry. - final String name; - - /// The description of the entry. - final String description; - - /// The thumbnail of the entry. - final String thumb; - - /// The data of the entry. - final String data; - - /// The grid size of the entry. - final int gridSize; - - /// The author of the entry. - final String author; - - @override - List get props => [ - name, - description, - data, - thumb, - gridSize, - author, - ]; -} diff --git a/packages/mini_hub_client/lib/src/hub_entry.g.dart b/packages/mini_hub_client/lib/src/hub_entry.g.dart deleted file mode 100644 index 6f7f3a7..0000000 --- a/packages/mini_hub_client/lib/src/hub_entry.g.dart +++ /dev/null @@ -1,25 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'hub_entry.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -HubEntry _$HubEntryFromJson(Map json) => HubEntry( - name: json['name'] as String, - description: json['description'] as String, - data: json['data'] as String, - thumb: json['thumb'] as String, - gridSize: json['gridSize'] as int, - author: json['author'] as String, - ); - -Map _$HubEntryToJson(HubEntry instance) => { - 'name': instance.name, - 'description': instance.description, - 'thumb': instance.thumb, - 'data': instance.data, - 'gridSize': instance.gridSize, - 'author': instance.author, - }; diff --git a/packages/mini_hub_client/lib/src/hub_entry_result.dart b/packages/mini_hub_client/lib/src/hub_entry_result.dart deleted file mode 100644 index c23a1eb..0000000 --- a/packages/mini_hub_client/lib/src/hub_entry_result.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:json_annotation/json_annotation.dart'; - -part 'hub_entry_result.g.dart'; - -/// {@template hub_entry_result} -/// Model representing a hub entry resulted from a search. -/// {@endtemplate} -@JsonSerializable() -class HubEntryResult extends Equatable { - /// {@macro hub_entry} - const HubEntryResult({ - required this.name, - required this.description, - required this.path, - }); - - /// {@macro hub_entry_result} - factory HubEntryResult.fromJson(Map json) => - _$HubEntryResultFromJson(json); - - /// This as a json. - Map toJson() => _$HubEntryResultToJson(this); - - /// The name of the entry. - final String name; - - /// The description of the entry. - final String description; - - /// The path of the entry. - final String path; - - @override - List get props => [ - name, - description, - path, - ]; -} diff --git a/packages/mini_hub_client/lib/src/hub_entry_result.g.dart b/packages/mini_hub_client/lib/src/hub_entry_result.g.dart deleted file mode 100644 index e231161..0000000 --- a/packages/mini_hub_client/lib/src/hub_entry_result.g.dart +++ /dev/null @@ -1,21 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'hub_entry_result.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -HubEntryResult _$HubEntryResultFromJson(Map json) => - HubEntryResult( - name: json['name'] as String, - description: json['description'] as String, - path: json['path'] as String, - ); - -Map _$HubEntryResultToJson(HubEntryResult instance) => - { - 'name': instance.name, - 'description': instance.description, - 'path': instance.path, - }; diff --git a/packages/mini_hub_client/lib/src/mini_hub_client.dart b/packages/mini_hub_client/lib/src/mini_hub_client.dart deleted file mode 100644 index a4e1a3e..0000000 --- a/packages/mini_hub_client/lib/src/mini_hub_client.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:dio/dio.dart'; -import 'package:mini_hub_client/mini_hub_client.dart'; - -/// {@template mini_hub_client} -/// A dart client that provides access to the mini sprite hub API -/// {@endtemplate} -class MiniHubClient { - /// {@macro mini_hub_client} - const MiniHubClient({ - this.apiUrl = 'https://bluefireteam.github.io/mini_hub', - }); - - /// The url of the api. - final String apiUrl; - - /// Returns the search result. - Future> listEntries(String? query) async { - final response = await Dio().get>('$apiUrl/index.json'); - - return response.data - ?.map( - (data) => HubEntryResult.fromJson(data as Map), - ) - .toList() - .cast() ?? - []; - } - - /// Returns an entry. - Future fetchEntry(String path) async { - final response = await Dio().get>('$apiUrl/$path'); - - final data = response.data; - if (data == null) { - return null; - } - - return HubEntry.fromJson(data); - } -} diff --git a/packages/mini_hub_client/melos_mini_hub_client.iml b/packages/mini_hub_client/melos_mini_hub_client.iml deleted file mode 100644 index 389d07a..0000000 --- a/packages/mini_hub_client/melos_mini_hub_client.iml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/mini_hub_client/pubspec.yaml b/packages/mini_hub_client/pubspec.yaml deleted file mode 100644 index 5ef636f..0000000 --- a/packages/mini_hub_client/pubspec.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: mini_hub_client -description: A dart client that provides access to the mini sprite hub API -version: 0.0.1 -publish_to: none - -environment: - sdk: ">=2.17.0 <3.0.0" - -dependencies: - dio: ^5.9.0 - equatable: ^2.0.3 - json_annotation: ^4.6.0 - -dev_dependencies: - build_runner: ^2.2.0 - json_serializable: ^6.3.1 - mocktail: ^0.3.0 - test: ^1.19.2 - very_good_analysis: ^3.0.1 diff --git a/packages/mini_sprite/analysis_options.yaml b/packages/mini_sprite/analysis_options.yaml index b08262c..9df80aa 100644 --- a/packages/mini_sprite/analysis_options.yaml +++ b/packages/mini_sprite/analysis_options.yaml @@ -1 +1 @@ -include: package:very_good_analysis/analysis_options.3.0.0.yaml +include: package:very_good_analysis/analysis_options.yaml diff --git a/packages/mini_sprite/lib/src/mini_map.dart b/packages/mini_sprite/lib/src/mini_map.dart index a3c0808..fe0ab66 100644 --- a/packages/mini_sprite/lib/src/mini_map.dart +++ b/packages/mini_sprite/lib/src/mini_map.dart @@ -106,7 +106,7 @@ class MiniMap extends Equatable { List get props => [objects, _width, _height]; } -/// {@macro map_position} +/// {@template map_position} /// A [MapPosition] is a class that represents a position in a game map. /// {@endtemplate} class MapPosition extends Equatable { diff --git a/packages/mini_sprite/pubspec.yaml b/packages/mini_sprite/pubspec.yaml index 7d84bd9..774c0d4 100644 --- a/packages/mini_sprite/pubspec.yaml +++ b/packages/mini_sprite/pubspec.yaml @@ -13,4 +13,4 @@ dev_dependencies: coverage: ^1.1.0 mocktail: ^0.3.0 test: ^1.19.2 - very_good_analysis: ^3.0.0 + very_good_analysis: ^10.0.0 diff --git a/packages/mini_sprite/test/src/mini_sprite_test.dart b/packages/mini_sprite/test/src/mini_sprite_test.dart index c688784..164621c 100644 --- a/packages/mini_sprite/test/src/mini_sprite_test.dart +++ b/packages/mini_sprite/test/src/mini_sprite_test.dart @@ -93,12 +93,12 @@ void main() { expect( MiniSprite(const [ [1], - [1] + [1], ]), equals( MiniSprite(const [ [1], - [1] + [1], ]), ), ); @@ -106,13 +106,13 @@ void main() { expect( MiniSprite(const [ [1], - [0] + [0], ]), isNot( equals( MiniSprite(const [ [0], - [0] + [0], ]), ), ), diff --git a/packages/mini_sprite_editor/analysis_options.yaml b/packages/mini_sprite_editor/analysis_options.yaml index b4d573c..ce42cd4 100644 --- a/packages/mini_sprite_editor/analysis_options.yaml +++ b/packages/mini_sprite_editor/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:very_good_analysis/analysis_options.3.0.0.yaml +include: package:very_good_analysis/analysis_options.yaml linter: rules: public_member_api_docs: false diff --git a/packages/mini_sprite_editor/lib/app/view/app.dart b/packages/mini_sprite_editor/lib/app/view/app.dart index c4bddfd..fb5b498 100644 --- a/packages/mini_sprite_editor/lib/app/view/app.dart +++ b/packages/mini_sprite_editor/lib/app/view/app.dart @@ -3,8 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:mini_sprite/mini_sprite.dart'; import 'package:mini_sprite_editor/config/config.dart'; -import 'package:mini_sprite_editor/hub/hub.dart'; -import 'package:mini_sprite_editor/l10n/l10n.dart'; +import 'package:mini_sprite_editor/l10n/arb/app_localizations.dart'; import 'package:mini_sprite_editor/library/library.dart'; import 'package:mini_sprite_editor/map/map.dart'; import 'package:mini_sprite_editor/sprite/sprite.dart'; @@ -22,53 +21,54 @@ class App extends StatelessWidget { BlocProvider(create: (context) => SpriteCubit()), BlocProvider(create: (context) => LibraryCubit()), BlocProvider(create: (context) => MapCubit()), - BlocProvider(create: (context) => HubCubit()), ], child: BlocBuilder( - builder: (context, state) => MaterialApp( - themeMode: state.themeMode, - theme: ThemeData(), - darkTheme: ThemeData.dark(), - localizationsDelegates: const [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - ], - supportedLocales: AppLocalizations.supportedLocales, - onGenerateRoute: (settings) { - final name = settings.name; + builder: + (context, state) => MaterialApp( + themeMode: state.themeMode, + theme: ThemeData(), + darkTheme: ThemeData.dark(), + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + ], + supportedLocales: AppLocalizations.supportedLocales, + onGenerateRoute: (settings) { + final name = settings.name; - if (name != null && name != '/') { - final uri = Uri.parse(name); - final colors = uri.queryParameters['colors']; + if (name != null && name != '/') { + final uri = Uri.parse(name); + final colors = uri.queryParameters['colors']; - List? colorList; - if (colors != null) { - colorList = - colors.split(',').map(int.parse).map(Color.new).toList(); - } + List? colorList; + if (colors != null) { + colorList = + colors + .split(',') + .map(int.parse) + .map(Color.new) + .toList(); + } - final spriteRaw = uri.queryParameters['sprite']; - MiniSprite? sprite; - if (spriteRaw != null) { - try { - sprite = MiniSprite.fromDataString(spriteRaw); - } catch (_) { - // ignore on invalid sprite data + final spriteRaw = uri.queryParameters['sprite']; + MiniSprite? sprite; + if (spriteRaw != null) { + try { + sprite = MiniSprite.fromDataString(spriteRaw); + } catch (_) { + // ignore on invalid sprite data + } + } + return MaterialPageRoute( + builder: + (_) => + WorkspaceView(colorList: colorList, sprite: sprite), + ); } - } - return MaterialPageRoute( - builder: (_) => WorkspaceView( - colorList: colorList, - sprite: sprite, - ), - ); - } - return MaterialPageRoute( - builder: (_) => const WorkspaceView(), - ); - }, - ), + return MaterialPageRoute(builder: (_) => const WorkspaceView()); + }, + ), ), ); } diff --git a/packages/mini_sprite_editor/lib/bootstrap.dart b/packages/mini_sprite_editor/lib/bootstrap.dart index 99d9adc..ba4759b 100644 --- a/packages/mini_sprite_editor/lib/bootstrap.dart +++ b/packages/mini_sprite_editor/lib/bootstrap.dart @@ -6,13 +6,13 @@ import 'package:flutter/widgets.dart'; class AppBlocObserver extends BlocObserver { @override - void onChange(BlocBase bloc, Change change) { + void onChange(BlocBase bloc, Change change) { super.onChange(bloc, change); log('onChange(${bloc.runtimeType}, $change)'); } @override - void onError(BlocBase bloc, Object error, StackTrace stackTrace) { + void onError(BlocBase bloc, Object error, StackTrace stackTrace) { log('onError(${bloc.runtimeType}, $error, $stackTrace)'); super.onError(bloc, error, stackTrace); } @@ -23,11 +23,8 @@ Future bootstrap(FutureOr Function() builder) async { log(details.exceptionAsString(), stackTrace: details.stack); }; - await runZonedGuarded( - () async { - Bloc.observer = AppBlocObserver(); - runApp(await builder()); - }, - (error, stackTrace) => log(error.toString(), stackTrace: stackTrace), - ); + await runZonedGuarded(() async { + Bloc.observer = AppBlocObserver(); + runApp(await builder()); + }, (error, stackTrace) => log(error.toString(), stackTrace: stackTrace)); } diff --git a/packages/mini_sprite_editor/lib/config/cubit/config_cubit.dart b/packages/mini_sprite_editor/lib/config/cubit/config_cubit.dart index f002ce7..49eb3ea 100644 --- a/packages/mini_sprite_editor/lib/config/cubit/config_cubit.dart +++ b/packages/mini_sprite_editor/lib/config/cubit/config_cubit.dart @@ -31,9 +31,7 @@ class ConfigCubit extends HydratedCubit { void removeColor(int index) { emit( - state.copyWith( - colors: List.from(state.colors)..removeAt(index), - ), + state.copyWith(colors: List.from(state.colors)..removeAt(index)), ); } @@ -72,8 +70,8 @@ class ConfigCubit extends HydratedCubit { Map? toJson(ConfigState state) { return { 'theme_mode': state.themeMode.name, - 'colors': state.colors.map((e) => e.value).toList(), - 'background_color': state.backgroundColor.value, + 'colors': state.colors.map((e) => e.toARGB32()).toList(), + 'background_color': state.backgroundColor.toARGB32(), 'map_grid_size': state.mapGridSize, }; } diff --git a/packages/mini_sprite_editor/lib/config/cubit/config_state.dart b/packages/mini_sprite_editor/lib/config/cubit/config_state.dart index 1050396..5704d91 100644 --- a/packages/mini_sprite_editor/lib/config/cubit/config_state.dart +++ b/packages/mini_sprite_editor/lib/config/cubit/config_state.dart @@ -9,12 +9,12 @@ class ConfigState extends Equatable { }); const ConfigState.initial() - : this( - themeMode: ThemeMode.system, - colors: const [Colors.black, Colors.white], - backgroundColor: Colors.transparent, - mapGridSize: 16, - ); + : this( + themeMode: ThemeMode.system, + colors: const [Colors.black, Colors.white], + backgroundColor: Colors.transparent, + mapGridSize: 16, + ); final ThemeMode themeMode; final List colors; @@ -36,10 +36,5 @@ class ConfigState extends Equatable { } @override - List get props => [ - themeMode, - colors, - backgroundColor, - mapGridSize, - ]; + List get props => [themeMode, colors, backgroundColor, mapGridSize]; } diff --git a/packages/mini_sprite_editor/lib/config/view/config_dialog.dart b/packages/mini_sprite_editor/lib/config/view/config_dialog.dart index 7cb81f3..a604c10 100644 --- a/packages/mini_sprite_editor/lib/config/view/config_dialog.dart +++ b/packages/mini_sprite_editor/lib/config/view/config_dialog.dart @@ -7,26 +7,27 @@ import 'package:mini_sprite_editor/l10n/l10n.dart'; import 'package:mini_sprite_editor/sprite/sprite.dart'; Future _showColorPicker(Color color, BuildContext context) { - Color? _color = color; + Color? color0 = color; return showDialog( context: context, - builder: (context) => AlertDialog( - title: Text(context.l10n.chooseColor), - content: SingleChildScrollView( - child: ColorPicker( - pickerColor: color, - onColorChanged: (color) => _color = color, - ), - ), - actions: [ - ElevatedButton( - child: Text(context.l10n.confirm), - onPressed: () { - Navigator.of(context).pop(_color); - }, + builder: + (context) => AlertDialog( + title: Text(context.l10n.chooseColor), + content: SingleChildScrollView( + child: ColorPicker( + pickerColor: color, + onColorChanged: (color) => color0 = color, + ), + ), + actions: [ + ElevatedButton( + child: Text(context.l10n.confirm), + onPressed: () { + Navigator.of(context).pop(color0); + }, + ), + ], ), - ], - ), ); } @@ -55,8 +56,9 @@ class _ConfigDialogState extends State { @override void initState() { super.initState(); - _gridFieldController = TextEditingController() - ..text = context.read().state.mapGridSize.toString(); + _gridFieldController = + TextEditingController() + ..text = context.read().state.mapGridSize.toString(); } @override @@ -82,52 +84,42 @@ class _ConfigDialogState extends State { child: Row( children: [ Expanded( - child: Column( - children: [ - Text( - l10n.themeSettings, - style: Theme.of(context).textTheme.titleLarge, - ), - ListTile( - title: Text(l10n.system), - leading: Radio( - key: const Key('radio_system'), - value: ThemeMode.system, - groupValue: state.themeMode, - onChanged: (ThemeMode? value) { - if (value != null) { - cubit.setThemeMode(value); - } - }, + child: RadioGroup( + groupValue: state.themeMode, + onChanged: (ThemeMode? value) { + if (value != null) { + cubit.setThemeMode(value); + } + }, + child: Column( + children: [ + Text( + l10n.themeSettings, + style: Theme.of(context).textTheme.titleLarge, ), - ), - ListTile( - title: Text(l10n.dark), - leading: Radio( - key: const Key('radio_dark'), - value: ThemeMode.dark, - groupValue: state.themeMode, - onChanged: (ThemeMode? value) { - if (value != null) { - cubit.setThemeMode(value); - } - }, + ListTile( + title: Text(l10n.system), + leading: const Radio( + key: Key('radio_system'), + value: ThemeMode.system, + ), ), - ), - ListTile( - title: Text(l10n.light), - leading: Radio( - key: const Key('radio_light'), - value: ThemeMode.light, - groupValue: state.themeMode, - onChanged: (ThemeMode? value) { - if (value != null) { - cubit.setThemeMode(value); - } - }, + ListTile( + title: Text(l10n.dark), + leading: const Radio( + key: Key('radio_dark'), + value: ThemeMode.dark, + ), ), - ), - ], + ListTile( + title: Text(l10n.light), + leading: const Radio( + key: Key('radio_light'), + value: ThemeMode.light, + ), + ), + ], + ), ), ), Expanded( @@ -220,9 +212,7 @@ class _ConfigDialogState extends State { padding: const EdgeInsets.all(16), child: ElevatedButton( onPressed: () { - cubit.setGridSize( - int.parse(_gridFieldController.text), - ); + cubit.setGridSize(int.parse(_gridFieldController.text)); Navigator.of(context).pop(); }, child: Text(l10n.close), @@ -253,18 +243,13 @@ class _ColorEntry extends StatelessWidget { Widget build(BuildContext context) { return GestureDetector( onLongPress: () async { - final confirmaiton = await ConfirmDialog.show( - context, - ); + final confirmaiton = await ConfirmDialog.show(context); if (confirmaiton ?? false) { onRemove(); } }, onTap: () async { - final newColor = await _showColorPicker( - color, - context, - ); + final newColor = await _showColorPicker(color, context); if (newColor != null) { onChanged(newColor); } @@ -296,11 +281,7 @@ class _ColorTile extends StatelessWidget { padding: const EdgeInsets.only(left: 16, top: 16), child: Row( children: [ - _ColorButton( - key: buttonKey, - color: color, - onPressed: onPressed, - ), + _ColorButton(key: buttonKey, color: color, onPressed: onPressed), const SizedBox(width: 16), Expanded(child: Text(label)), ], @@ -310,11 +291,7 @@ class _ColorTile extends StatelessWidget { } class _ColorButton extends StatelessWidget { - const _ColorButton({ - super.key, - required this.color, - required this.onPressed, - }); + const _ColorButton({super.key, required this.color, required this.onPressed}); final Color color; final VoidCallback onPressed; @@ -323,13 +300,7 @@ class _ColorButton extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: onPressed, - child: Card( - child: Container( - width: 32, - height: 32, - color: color, - ), - ), + child: Card(child: Container(width: 32, height: 32, color: color)), ); } } diff --git a/packages/mini_sprite_editor/lib/hub/cubit/hub_cubit.dart b/packages/mini_sprite_editor/lib/hub/cubit/hub_cubit.dart deleted file mode 100644 index 4bad23e..0000000 --- a/packages/mini_sprite_editor/lib/hub/cubit/hub_cubit.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:bloc/bloc.dart'; -import 'package:equatable/equatable.dart'; -import 'package:flutter/foundation.dart'; -import 'package:mini_hub_client/mini_hub_client.dart'; - -part 'hub_state.dart'; - -class HubCubit extends Cubit { - HubCubit({ - MiniHubClient? client, - }) : super(const HubState.initial()) { - _client = client ?? const MiniHubClient(); - } - - late final MiniHubClient _client; - - Future load() async { - emit(state.copyWith(status: HubStateStatus.loading)); - try { - final entries = await _client.listEntries(''); - emit(state.copyWith(status: HubStateStatus.loaded, entries: entries)); - } catch (e) { - if (kDebugMode) { - print(e); - } - emit(state.copyWith(status: HubStateStatus.error)); - } - } -} diff --git a/packages/mini_sprite_editor/lib/hub/cubit/hub_state.dart b/packages/mini_sprite_editor/lib/hub/cubit/hub_state.dart deleted file mode 100644 index eb5a829..0000000 --- a/packages/mini_sprite_editor/lib/hub/cubit/hub_state.dart +++ /dev/null @@ -1,37 +0,0 @@ -part of 'hub_cubit.dart'; - -enum HubStateStatus { - initial, - loading, - loaded, - error, -} - -class HubState extends Equatable { - const HubState({ - required this.status, - required this.entries, - }); - - const HubState.initial() - : this( - status: HubStateStatus.initial, - entries: const [], - ); - - final HubStateStatus status; - final List entries; - - HubState copyWith({ - HubStateStatus? status, - List? entries, - }) { - return HubState( - status: status ?? this.status, - entries: entries ?? this.entries, - ); - } - - @override - List get props => [status, entries]; -} diff --git a/packages/mini_sprite_editor/lib/hub/hub.dart b/packages/mini_sprite_editor/lib/hub/hub.dart deleted file mode 100644 index f68fea5..0000000 --- a/packages/mini_sprite_editor/lib/hub/hub.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'cubit/hub_cubit.dart'; -export 'view/view.dart'; diff --git a/packages/mini_sprite_editor/lib/hub/view/hub_entry_card.dart b/packages/mini_sprite_editor/lib/hub/view/hub_entry_card.dart deleted file mode 100644 index d18f198..0000000 --- a/packages/mini_sprite_editor/lib/hub/view/hub_entry_card.dart +++ /dev/null @@ -1,158 +0,0 @@ -import 'dart:math'; - -import 'package:flame/sprite.dart'; -import 'package:flame_mini_sprite/flame_mini_sprite.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:mini_hub_client/mini_hub_client.dart'; -import 'package:mini_sprite/mini_sprite.dart'; -import 'package:mini_sprite_editor/config/cubit/config_cubit.dart'; -import 'package:mini_sprite_editor/l10n/l10n.dart'; - -class HubEntryCard extends StatefulWidget { - const HubEntryCard({super.key, required this.entry}); - - final HubEntryResult entry; - - @override - State createState() => _HubEntryCardState(); -} - -class _HubEntryCardState extends State { - final client = const MiniHubClient(); - - late Map? _sprites; - HubEntry? _entry; - - @override - void initState() { - super.initState(); - _loadEntry(); - } - - Future _loadEntry() async { - final cubit = context.read(); - final configState = cubit.state; - - try { - final entry = await client.fetchEntry(widget.entry.path); - if (entry != null) { - final library = MiniLibrary.fromDataString(entry.data); - _sprites = await library.toSprites( - pixelSize: 1, - palette: cubit.state.colors, - backgroundColor: configState.backgroundColor, - ); - setState(() { - _entry = entry; - }); - } - } catch (e) { - if (kDebugMode) { - print(e); - } - } - } - - @override - Widget build(BuildContext context) { - return Card( - child: SizedBox( - height: 220, - child: _entry == null - ? const Center(child: CircularProgressIndicator()) - : Row( - children: [ - Container( - margin: const EdgeInsets.all(16), - color: context.read().state.backgroundColor, - width: 180, - height: 180, - child: CustomPaint( - painter: _Thumbnail( - _entry!.thumb, - _sprites!, - _entry!.gridSize, - ), - ), - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 8), - Text( - _entry!.name, - style: Theme.of(context).textTheme.headlineMedium, - ), - const SizedBox(height: 16), - Text(_entry!.description), - const SizedBox(height: 8), - Text('Grid size: ${_entry!.gridSize}'), - const SizedBox(height: 16), - Text('by: ${_entry!.author}'), - IconButton( - onPressed: () async { - final messenger = ScaffoldMessenger.of(context); - final label = context.l10n.copiedWithSuccess; - await Clipboard.setData( - ClipboardData(text: _entry!.data), - ); - messenger.showSnackBar( - SnackBar(content: Text(label)), - ); - }, - icon: const Icon(Icons.download), - ), - ], - ), - ], - ), - ), - ); - } -} - -class _Thumbnail extends CustomPainter { - _Thumbnail(this.thumbnail, this.sprites, this.gridSize); - - final int gridSize; - final String thumbnail; - final Map sprites; - - @override - bool shouldRepaint(covariant CustomPainter oldDelegate) { - return oldDelegate is! _Thumbnail || oldDelegate.thumbnail != thumbnail; - } - - @override - void paint(Canvas canvas, Size size) { - final map = MiniMap.fromDataString(thumbnail); - - final bigger = map.objects.keys.fold(const MapPosition(0, 0), - (MapPosition previousValue, MapPosition element) { - return MapPosition( - max(previousValue.x, element.x), - max(previousValue.y, element.y), - ); - }); - - final rate = size.width / ((bigger.x + 1) * gridSize); - - for (final object in map.objects.entries) { - final sprite = sprites[object.value['sprite']]; - if (sprite != null) { - sprite.renderRect( - canvas, - Rect.fromLTWH( - object.key.x * gridSize.toDouble() * rate, - object.key.y * gridSize.toDouble() * rate, - sprite.image.width * rate, - sprite.image.height * rate, - ), - ); - } - } - } -} diff --git a/packages/mini_sprite_editor/lib/hub/view/hub_page.dart b/packages/mini_sprite_editor/lib/hub/view/hub_page.dart deleted file mode 100644 index 6f6502c..0000000 --- a/packages/mini_sprite_editor/lib/hub/view/hub_page.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:mini_sprite_editor/hub/hub.dart'; - -class HubPage extends StatefulWidget { - const HubPage({super.key}); - - @override - State createState() => _HubPageState(); -} - -class _HubPageState extends State { - @override - void initState() { - super.initState(); - - context.read().load(); - } - - @override - Widget build(BuildContext context) { - return const HubView(); - } -} - -class HubView extends StatelessWidget { - const HubView({super.key}); - - @override - Widget build(BuildContext context) { - final entries = context.watch().state.entries; - - return SingleChildScrollView( - child: Column( - children: [ - for (final entry in entries) HubEntryCard(entry: entry), - ], - ), - ); - } -} diff --git a/packages/mini_sprite_editor/lib/hub/view/view.dart b/packages/mini_sprite_editor/lib/hub/view/view.dart deleted file mode 100644 index 0eb04dd..0000000 --- a/packages/mini_sprite_editor/lib/hub/view/view.dart +++ /dev/null @@ -1,2 +0,0 @@ -export 'hub_entry_card.dart'; -export 'hub_page.dart'; diff --git a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart index bbd1ecf..06a89a0 100644 --- a/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart +++ b/packages/mini_sprite_editor/lib/l10n/arb/app_localizations.dart @@ -62,7 +62,7 @@ import 'app_localizations_en.dart'; /// property. abstract class AppLocalizations { AppLocalizations(String locale) - : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); final String localeName; @@ -85,11 +85,11 @@ abstract class AppLocalizations { /// of delegates is preferred or required. static const List> localizationsDelegates = >[ - delegate, - GlobalMaterialLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ]; + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; /// A list of this localizations delegate's supported locales. static const List supportedLocales = [Locale('en')]; @@ -456,8 +456,9 @@ AppLocalizations lookupAppLocalizations(Locale locale) { } throw FlutterError( - 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' - 'an issue with the localizations generation tool. Please file an issue ' - 'on GitHub with a reproducible sample app and the gen-l10n configuration ' - 'that was used.'); + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.', + ); } diff --git a/packages/mini_sprite_editor/lib/l10n/l10n.dart b/packages/mini_sprite_editor/lib/l10n/l10n.dart index 17c891b..a402f68 100644 --- a/packages/mini_sprite_editor/lib/l10n/l10n.dart +++ b/packages/mini_sprite_editor/lib/l10n/l10n.dart @@ -1,7 +1,5 @@ import 'package:flutter/widgets.dart'; -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; - -export 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:mini_sprite_editor/l10n/arb/app_localizations.dart'; extension AppLocalizationsX on BuildContext { AppLocalizations get l10n => AppLocalizations.of(this); diff --git a/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart b/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart index 476c2a0..f204921 100644 --- a/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart +++ b/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart @@ -9,9 +9,9 @@ class LibraryCubit extends Cubit { LibraryCubit({ Future Function(ClipboardData)? setClipboardData, Future Function(String)? getClipboardData, - }) : _setClipboardData = setClipboardData ?? Clipboard.setData, - _getClipboardData = getClipboardData ?? Clipboard.getData, - super(const LibraryState.initial()); + }) : _setClipboardData = setClipboardData ?? Clipboard.setData, + _getClipboardData = getClipboardData ?? Clipboard.getData, + super(const LibraryState.initial()); final Future Function(ClipboardData) _setClipboardData; final Future Function(String) _getClipboardData; @@ -23,9 +23,7 @@ class LibraryCubit extends Cubit { void startCollection(List> firstSprite) { emit( state.copyWith( - sprites: { - 'sprite_1': MiniSprite(firstSprite), - }, + sprites: {'sprite_1': MiniSprite(firstSprite)}, selected: 'sprite_1', ), ); @@ -34,10 +32,7 @@ class LibraryCubit extends Cubit { void updateSelected(List> sprite) { emit( state.copyWith( - sprites: { - ...state.sprites, - state.selected: MiniSprite(sprite), - }, + sprites: {...state.sprites, state.selected: MiniSprite(sprite)}, ), ); } @@ -46,25 +41,22 @@ class LibraryCubit extends Cubit { final newSprites = {...state.sprites}..remove(key); emit( state.copyWith( - sprites: { - ...newSprites, - newKey: state.sprites[key]!, - }, + sprites: {...newSprites, newKey: state.sprites[key]!}, selected: state.selected == key ? newKey : state.selected, ), ); } String _newSpriteKey() { - var _idx = state.sprites.length + 1; - var _spriteKey = 'sprite_$_idx'; + var idx = state.sprites.length + 1; + var spriteKey = 'sprite_$idx'; - while (state.sprites.containsKey(_spriteKey)) { - _idx++; - _spriteKey = 'sprite_$_idx'; + while (state.sprites.containsKey(spriteKey)) { + idx++; + spriteKey = 'sprite_$idx'; } - return _spriteKey; + return spriteKey; } void addSprite(int width, int height) { @@ -73,13 +65,7 @@ class LibraryCubit extends Cubit { sprites: { ...state.sprites, _newSpriteKey(): MiniSprite( - List.generate( - height, - (_) => List.generate( - width, - (_) => -1, - ), - ), + List.generate(height, (_) => List.generate(width, (_) => -1)), ), }, ), diff --git a/packages/mini_sprite_editor/lib/library/cubit/library_state.dart b/packages/mini_sprite_editor/lib/library/cubit/library_state.dart index b5341ef..73e7de3 100644 --- a/packages/mini_sprite_editor/lib/library/cubit/library_state.dart +++ b/packages/mini_sprite_editor/lib/library/cubit/library_state.dart @@ -1,24 +1,14 @@ part of 'library_cubit.dart'; class LibraryState extends Equatable { - const LibraryState({ - required this.sprites, - required this.selected, - }); + const LibraryState({required this.sprites, required this.selected}); - const LibraryState.initial() - : this( - sprites: const {}, - selected: '', - ); + const LibraryState.initial() : this(sprites: const {}, selected: ''); final Map sprites; final String selected; - LibraryState copyWith({ - Map? sprites, - String? selected, - }) { + LibraryState copyWith({Map? sprites, String? selected}) { return LibraryState( sprites: sprites ?? this.sprites, selected: selected ?? this.selected, diff --git a/packages/mini_sprite_editor/lib/library/view/library_panel.dart b/packages/mini_sprite_editor/lib/library/view/library_panel.dart index 20976de..c64f0c3 100644 --- a/packages/mini_sprite_editor/lib/library/view/library_panel.dart +++ b/packages/mini_sprite_editor/lib/library/view/library_panel.dart @@ -187,10 +187,7 @@ class _LibraryEntryState extends State<_LibraryEntry> { final cubit = context.read(); final newName = await RenameDialog.show(context, widget.spriteKey); if (newName != null) { - cubit.rename( - widget.spriteKey, - newName, - ); + cubit.rename(widget.spriteKey, newName); } }, child: Column( @@ -203,9 +200,10 @@ class _LibraryEntryState extends State<_LibraryEntry> { border: Border( bottom: BorderSide( width: 2, - color: widget.selected - ? Theme.of(context).buttonTheme.colorScheme!.primary - : Colors.transparent, + color: + widget.selected + ? Theme.of(context).buttonTheme.colorScheme!.primary + : Colors.transparent, ), ), ), diff --git a/packages/mini_sprite_editor/lib/main.dart b/packages/mini_sprite_editor/lib/main.dart index 417f0a6..e80a3fc 100644 --- a/packages/mini_sprite_editor/lib/main.dart +++ b/packages/mini_sprite_editor/lib/main.dart @@ -10,9 +10,10 @@ import 'package:path_provider/path_provider.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); HydratedBloc.storage = await HydratedStorage.build( - storageDirectory: kIsWeb - ? HydratedStorage.webStorageDirectory - : await getApplicationDocumentsDirectory(), + storageDirectory: + kIsWeb + ? HydratedStorage.webStorageDirectory + : await getApplicationDocumentsDirectory(), ); unawaited(bootstrap(() => const App())); diff --git a/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart b/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart index 5659804..622af5d 100644 --- a/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart +++ b/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart @@ -9,19 +9,20 @@ class MapCubit extends Cubit { MapCubit({ Future Function(ClipboardData)? setClipboardData, Future Function(String)? getClipboardData, - }) : _setClipboardData = setClipboardData ?? Clipboard.setData, - _getClipboardData = getClipboardData ?? Clipboard.getData, - super(const MapState.initial()); + }) : _setClipboardData = setClipboardData ?? Clipboard.setData, + _getClipboardData = getClipboardData ?? Clipboard.getData, + super(const MapState.initial()); final Future Function(ClipboardData) _setClipboardData; final Future Function(String) _getClipboardData; void copyToClipboard() { - final data = MiniMap( - objects: state.objects, - width: state.mapSize.width.toInt(), - height: state.mapSize.height.toInt(), - ).toDataString(); + final data = + MiniMap( + objects: state.objects, + width: state.mapSize.width.toInt(), + height: state.mapSize.height.toInt(), + ).toDataString(); _setClipboardData(ClipboardData(text: data)); } @@ -40,56 +41,25 @@ class MapCubit extends Cubit { addObject(x, y, data); } else { final objData = state.objects[MapPosition(x, y)]!; - final newData = { - ...objData, - ...data, - }; + final newData = {...objData, ...data}; - emit( - state.copyWith( - objects: { - ...state.objects, - position: newData, - }, - ), - ); + emit(state.copyWith(objects: {...state.objects, position: newData})); } } void addObject(int x, int y, Map data) { - emit( - state.copyWith( - objects: { - ...state.objects, - MapPosition(x, y): data, - }, - ), - ); + emit(state.copyWith(objects: {...state.objects, MapPosition(x, y): data})); } void removeObject(int x, int y) { final newObjects = Map.fromEntries( - state.objects.entries.where( - (entry) => - entry.key != - MapPosition( - x, - y, - ), - ), + state.objects.entries.where((entry) => entry.key != MapPosition(x, y)), ); emit(state.copyWith(objects: newObjects)); } void setSize(int x, int y) { - emit( - state.copyWith( - mapSize: Size( - x.toDouble(), - y.toDouble(), - ), - ), - ); + emit(state.copyWith(mapSize: Size(x.toDouble(), y.toDouble()))); } void clearMap() { @@ -113,14 +83,7 @@ class MapCubit extends Cubit { ), }; - emit( - state.copyWith( - objects: { - ...state.objects, - selected: data, - }, - ), - ); + emit(state.copyWith(objects: {...state.objects, selected: data})); } } } diff --git a/packages/mini_sprite_editor/lib/map/cubit/map_state.dart b/packages/mini_sprite_editor/lib/map/cubit/map_state.dart index 4e1dc68..185baed 100644 --- a/packages/mini_sprite_editor/lib/map/cubit/map_state.dart +++ b/packages/mini_sprite_editor/lib/map/cubit/map_state.dart @@ -8,11 +8,11 @@ class MapState extends Equatable { }); const MapState.initial() - : this( - objects: const {}, - selectedObject: const MapPosition(-1, -1), - mapSize: const Size(10, 10), - ); + : this( + objects: const {}, + selectedObject: const MapPosition(-1, -1), + mapSize: const Size(10, 10), + ); final Map> objects; final MapPosition selectedObject; diff --git a/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart b/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart index 74a43d4..b6bcf6a 100644 --- a/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart +++ b/packages/mini_sprite_editor/lib/map/cubit/map_tool_cubit.dart @@ -11,34 +11,18 @@ class MapToolCubit extends Cubit { } void selectTool(MapTool tool) { - emit( - state.copyWith( - tool: tool, - ), - ); + emit(state.copyWith(tool: tool)); } void setZoom(double zoom) { - emit( - state.copyWith( - zoom: zoom, - ), - ); + emit(state.copyWith(zoom: zoom)); } void increaseZoom() { - emit( - state.copyWith( - zoom: state.zoom + 0.1, - ), - ); + emit(state.copyWith(zoom: state.zoom + 0.1)); } void decreaseZoom() { - emit( - state.copyWith( - zoom: state.zoom - 0.1, - ), - ); + emit(state.copyWith(zoom: state.zoom - 0.1)); } } diff --git a/packages/mini_sprite_editor/lib/map/cubit/map_tool_state.dart b/packages/mini_sprite_editor/lib/map/cubit/map_tool_state.dart index 26ab09d..3c1a4fc 100644 --- a/packages/mini_sprite_editor/lib/map/cubit/map_tool_state.dart +++ b/packages/mini_sprite_editor/lib/map/cubit/map_tool_state.dart @@ -1,10 +1,6 @@ part of 'map_tool_cubit.dart'; -enum MapTool { - none, - brush, - eraser, -} +enum MapTool { none, brush, eraser } class MapToolState extends Equatable { const MapToolState({ @@ -14,21 +10,13 @@ class MapToolState extends Equatable { }); const MapToolState.initial() - : this( - tool: MapTool.brush, - zoom: 1, - gridActive: true, - ); + : this(tool: MapTool.brush, zoom: 1, gridActive: true); final MapTool tool; final double zoom; final bool gridActive; - MapToolState copyWith({ - MapTool? tool, - double? zoom, - bool? gridActive, - }) { + MapToolState copyWith({MapTool? tool, double? zoom, bool? gridActive}) { return MapToolState( tool: tool ?? this.tool, zoom: zoom ?? this.zoom, diff --git a/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart b/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart index aa97df3..8820718 100644 --- a/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart +++ b/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart @@ -42,15 +42,11 @@ class MapBoardGame extends FlameGame with PanDetector { await world.add( FlameMultiBlocProvider( providers: [ - FlameBlocProvider.value( - value: configCubit, - ), + FlameBlocProvider.value(value: configCubit), FlameBlocProvider.value( value: libraryCubit, ), - FlameBlocProvider.value( - value: mapCubit, - ), + FlameBlocProvider.value(value: mapCubit), FlameBlocProvider.value( value: mapToolCubit, ), @@ -65,12 +61,12 @@ class MapBoardGame extends FlameGame with PanDetector { }, ), FlameBlocListener( - listenWhen: (previous, current) => - previous.mapSize != current.mapSize, + listenWhen: + (previous, current) => previous.mapSize != current.mapSize, onNewState: (state) { - descendants() - .whereType() - .forEach((e) => e.removeFromParent()); + descendants().whereType().forEach( + (e) => e.removeFromParent(), + ); createTiles(); center(); }, @@ -99,10 +95,7 @@ class MapBoardGame extends FlameGame with PanDetector { for (var y = 0; y < mapSize.height; y++) { for (var x = 0; x < mapSize.width; x++) { final tile = TileComponent( - position: Vector2( - x * tileSize.toDouble(), - y * tileSize.toDouble(), - ), + position: Vector2(x * tileSize.toDouble(), y * tileSize.toDouble()), mapPosition: MapPosition(x, y), size: Vector2(tileSize.toDouble(), tileSize.toDouble()), ); diff --git a/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart b/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart index 0dff645..8aa010c 100644 --- a/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart +++ b/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart @@ -11,11 +11,7 @@ import 'package:mini_sprite_editor/map/map.dart'; class TileComponent extends PositionComponent with HasPaint, HasGameRef, TapCallbacks { - TileComponent({ - super.position, - super.size, - required this.mapPosition, - }); + TileComponent({super.position, super.size, required this.mapPosition}); final MapPosition mapPosition; @@ -28,14 +24,17 @@ class TileComponent extends PositionComponent @override Future onLoad() async { - paint = Paint() - ..color = const Color(0xFFFFFFFF) - ..style = PaintingStyle.stroke - ..strokeWidth = 1; + paint = + Paint() + ..color = const Color(0xFFFFFFFF) + ..style = PaintingStyle.stroke + ..strokeWidth = 1; - _selectedPaint = Paint()..color = gameRef.primaryColor.withOpacity(0.4); + _selectedPaint = + Paint()..color = gameRef.primaryColor.withValues(alpha: 0.4); - _hasDataPaint = Paint()..color = gameRef.primaryColor.withOpacity(0.8); + _hasDataPaint = + Paint()..color = gameRef.primaryColor.withValues(alpha: 0.8); await addAll([ FlameBlocListener( @@ -76,10 +75,8 @@ class TileComponent extends PositionComponent }, onNewState: (state) { size = Vector2.all(state.mapGridSize.toDouble()); - position = Vector2( - mapPosition.x.toDouble(), - mapPosition.y.toDouble(), - ) * + position = + Vector2(mapPosition.x.toDouble(), mapPosition.y.toDouble()) * state.mapGridSize.toDouble(); }, ), @@ -118,16 +115,11 @@ class TileComponent extends PositionComponent gameRef.mapCubit.addObject( mapPosition.x, mapPosition.y, - { - 'sprite': library.selected, - }, + {'sprite': library.selected}, ); break; case MapTool.eraser: - gameRef.mapCubit.removeObject( - mapPosition.x, - mapPosition.y, - ); + gameRef.mapCubit.removeObject(mapPosition.x, mapPosition.y); break; } event.handled = true; diff --git a/packages/mini_sprite_editor/lib/map/view/map_page.dart b/packages/mini_sprite_editor/lib/map/view/map_page.dart index dbddd58..da302f6 100644 --- a/packages/mini_sprite_editor/lib/map/view/map_page.dart +++ b/packages/mini_sprite_editor/lib/map/view/map_page.dart @@ -45,10 +45,7 @@ class MapView extends StatelessWidget { final cubit = context.read(); final value = await MapSizeDialog.show(context); if (value != null) { - cubit.setSize( - value.dx.toInt(), - value.dy.toInt(), - ); + cubit.setSize(value.dx.toInt(), value.dy.toInt()); } }, tooltip: l10n.mapSizeTitle, @@ -72,9 +69,7 @@ class MapView extends StatelessWidget { context.read().toogleGrid(); }, tooltip: l10n.toogleGrid, - icon: Icon( - gridActive ? Icons.grid_on : Icons.grid_off, - ), + icon: Icon(gridActive ? Icons.grid_on : Icons.grid_off), ), IconButton( key: const Key('copy_to_clipboard_key'), @@ -91,9 +86,9 @@ class MapView extends StatelessWidget { key: const Key('import_from_clipboard_key'), onPressed: () { context.read().importFromClipboard(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(l10n.importSuccess)), - ); + ScaffoldMessenger.of( + context, + ).showSnackBar(SnackBar(content: Text(l10n.importSuccess))); }, tooltip: l10n.importFromClipBoard, icon: const Icon(Icons.import_export), @@ -124,10 +119,10 @@ class MapView extends StatelessWidget { libraryCubit: context.read(), mapCubit: context.read(), mapToolCubit: context.read(), - primaryColor: Theme.of(context) - .buttonTheme - .colorScheme - ?.primary ?? + primaryColor: + Theme.of( + context, + ).buttonTheme.colorScheme?.primary ?? Colors.blue, ); }, @@ -144,37 +139,40 @@ class MapView extends StatelessWidget { children: [ IconButton( key: const Key('map_cursor_key'), - onPressed: tool == MapTool.none - ? null - : () { - context - .read() - .selectTool(MapTool.none); - }, + onPressed: + tool == MapTool.none + ? null + : () { + context + .read() + .selectTool(MapTool.none); + }, tooltip: l10n.cursor, icon: const Icon(Icons.mouse), ), IconButton( key: const Key('map_brush_key'), - onPressed: tool == MapTool.brush - ? null - : () { - context - .read() - .selectTool(MapTool.brush); - }, + onPressed: + tool == MapTool.brush + ? null + : () { + context + .read() + .selectTool(MapTool.brush); + }, tooltip: l10n.brush, icon: const Icon(Icons.brush), ), IconButton( key: const Key('map_eraser_key'), - onPressed: tool == MapTool.eraser - ? null - : () { - context - .read() - .selectTool(MapTool.eraser); - }, + onPressed: + tool == MapTool.eraser + ? null + : () { + context + .read() + .selectTool(MapTool.eraser); + }, tooltip: l10n.eraser, icon: const Icon(Icons.rectangle), ), @@ -203,19 +201,13 @@ class MapView extends StatelessWidget { ), ), ), - const Expanded( - child: LibraryPanel(readOnly: true), - ), + const Expanded(child: LibraryPanel(readOnly: true)), ], ), ], ), ), - const Positioned( - top: 8, - left: 8, - child: ObjectPanel(), - ), + const Positioned(top: 8, left: 8, child: ObjectPanel()), ], ), ), diff --git a/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart b/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart index 23b6a42..357542d 100644 --- a/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart +++ b/packages/mini_sprite_editor/lib/map/view/map_size_dialog.dart @@ -32,10 +32,10 @@ class _MapSizeDialogState extends State { super.initState(); final state = context.read().state; - _widthController = TextEditingController() - ..text = state.mapSize.width.toInt().toString(); - _heightController = TextEditingController() - ..text = state.mapSize.height.toInt().toString(); + _widthController = + TextEditingController()..text = state.mapSize.width.toInt().toString(); + _heightController = + TextEditingController()..text = state.mapSize.height.toInt().toString(); } @override @@ -64,9 +64,7 @@ class _MapSizeDialogState extends State { decoration: InputDecoration(label: Text(l10n.width)), textAlign: TextAlign.center, controller: _widthController, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], + inputFormatters: [FilteringTextInputFormatter.digitsOnly], ), ), const SizedBox(width: 50), @@ -76,9 +74,7 @@ class _MapSizeDialogState extends State { decoration: InputDecoration(label: Text(l10n.height)), textAlign: TextAlign.center, controller: _heightController, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], + inputFormatters: [FilteringTextInputFormatter.digitsOnly], ), ), const SizedBox(width: 50), @@ -90,7 +86,7 @@ class _MapSizeDialogState extends State { children: [ ElevatedButton( onPressed: () { - Navigator.of(context).pop(null); + Navigator.of(context).pop(); }, child: Text(l10n.cancel), ), diff --git a/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart b/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart index 1ed4e4d..3415509 100644 --- a/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart +++ b/packages/mini_sprite_editor/lib/map/view/new_property_dialog.dart @@ -2,11 +2,7 @@ import 'package:flutter/material.dart'; import 'package:mini_sprite_editor/l10n/l10n.dart'; class NewPropertyDialog extends StatefulWidget { - const NewPropertyDialog({ - super.key, - this.name, - this.value, - }); + const NewPropertyDialog({super.key, this.name, this.value}); final String? name; final String? value; @@ -61,9 +57,7 @@ class _NewPropertyDialogState extends State { child: TextField( autofocus: true, key: const Key('new_property_name_field'), - decoration: InputDecoration( - label: Text(l10n.name), - ), + decoration: InputDecoration(label: Text(l10n.name)), textAlign: TextAlign.center, controller: _nameController, enabled: _nameController.text.isEmpty, @@ -74,9 +68,7 @@ class _NewPropertyDialogState extends State { child: TextField( autofocus: true, key: const Key('new_property_value_field'), - decoration: InputDecoration( - label: Text(l10n.value), - ), + decoration: InputDecoration(label: Text(l10n.value)), textAlign: TextAlign.center, controller: _valueController, ), @@ -87,7 +79,7 @@ class _NewPropertyDialogState extends State { children: [ ElevatedButton( onPressed: () { - Navigator.of(context).pop(null); + Navigator.of(context).pop(); }, child: Text(l10n.cancel), ), @@ -98,9 +90,9 @@ class _NewPropertyDialogState extends State { _valueController.text.isEmpty ? null : MapEntry( - _nameController.text, - _valueController.text, - ), + _nameController.text, + _valueController.text, + ), ); }, child: Text(l10n.confirm), diff --git a/packages/mini_sprite_editor/lib/map/view/object_panel.dart b/packages/mini_sprite_editor/lib/map/view/object_panel.dart index cc4a7be..006cf32 100644 --- a/packages/mini_sprite_editor/lib/map/view/object_panel.dart +++ b/packages/mini_sprite_editor/lib/map/view/object_panel.dart @@ -11,10 +11,11 @@ class ObjectPanel extends StatelessWidget { @override Widget build(BuildContext context) { return BlocBuilder( - buildWhen: (previous, current) => - previous.selectedObject != current.selectedObject || - previous.objects[previous.selectedObject] != - current.objects[current.selectedObject], + buildWhen: + (previous, current) => + previous.selectedObject != current.selectedObject || + previous.objects[previous.selectedObject] != + current.objects[current.selectedObject], builder: (context, state) { if (state.selectedObject == const MapPosition(-1, -1)) { return const SizedBox(); @@ -29,9 +30,7 @@ class ObjectPanel extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - 'x ${state.selectedObject.x}, ${state.selectedObject.y}', - ), + Text('x ${state.selectedObject.x}, ${state.selectedObject.y}'), Padding( padding: const EdgeInsets.only(top: 8), child: Row( @@ -64,9 +63,7 @@ class ObjectPanel extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Text( - '${entry.key}: ${entry.value}', - ), + Text('${entry.key}: ${entry.value}'), IconButton( onPressed: () async { final cubit = context.read(); diff --git a/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart b/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart index 9bca806..8581497 100644 --- a/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart +++ b/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart @@ -15,9 +15,9 @@ class SpriteCubit extends ReplayCubit { SpriteCubit({ Future Function(ClipboardData)? setClipboardData, Future Function(String)? getClipboardData, - }) : _setClipboardData = setClipboardData ?? Clipboard.setData, - _getClipboardData = getClipboardData ?? Clipboard.getData, - super(SpriteState.initial()); + }) : _setClipboardData = setClipboardData ?? Clipboard.setData, + _getClipboardData = getClipboardData ?? Clipboard.getData, + super(SpriteState.initial()); final Future Function(ClipboardData) _setClipboardData; final Future Function(String) _getClipboardData; @@ -50,8 +50,8 @@ class SpriteCubit extends ReplayCubit { final data = await sprite.image.toByteData(format: ImageByteFormat.png); const fileName = 'sprite.png'; - final path = await getSavePath(suggestedName: fileName); - if (path == null) { + final location = await getSaveLocation(suggestedName: fileName); + if (location == null) { // Operation was canceled by the user. return; } @@ -63,7 +63,7 @@ class SpriteCubit extends ReplayCubit { mimeType: mimeType, name: fileName, ); - await imageFile.saveTo(path); + await imageFile.saveTo(location.path); } Future importFromClipboard() async { @@ -229,9 +229,7 @@ class SpriteCubit extends ReplayCubit { } void setSize(int x, int y) { - final newPixels = [ - ...List.generate(y, (i) => List.generate(x, (j) => -1)), - ]; + final newPixels = [...List.generate(y, (i) => List.generate(x, (j) => -1))]; for (var y = 0; y < state.pixels.length; y++) { for (var x = 0; x < state.pixels[y].length; x++) { diff --git a/packages/mini_sprite_editor/lib/sprite/cubit/sprite_state.dart b/packages/mini_sprite_editor/lib/sprite/cubit/sprite_state.dart index 1a8a295..86bc9c4 100644 --- a/packages/mini_sprite_editor/lib/sprite/cubit/sprite_state.dart +++ b/packages/mini_sprite_editor/lib/sprite/cubit/sprite_state.dart @@ -3,27 +3,21 @@ part of 'sprite_cubit.dart'; const _defaultSpriteSize = 16; class SpriteState extends Equatable { - const SpriteState({ - required this.pixels, - required this.cursorPosition, - }); + const SpriteState({required this.pixels, required this.cursorPosition}); SpriteState.initial() - : this( - pixels: List.filled( - _defaultSpriteSize, - List.filled(_defaultSpriteSize, -1), - ), - cursorPosition: const Offset(-1, -1), - ); + : this( + pixels: List.filled( + _defaultSpriteSize, + List.filled(_defaultSpriteSize, -1), + ), + cursorPosition: const Offset(-1, -1), + ); final List> pixels; final Offset cursorPosition; - SpriteState copyWith({ - List>? pixels, - Offset? cursorPosition, - }) { + SpriteState copyWith({List>? pixels, Offset? cursorPosition}) { return SpriteState( pixels: pixels ?? this.pixels, cursorPosition: cursorPosition ?? this.cursorPosition, @@ -31,8 +25,5 @@ class SpriteState extends Equatable { } @override - List get props => [ - pixels, - cursorPosition, - ]; + List get props => [pixels, cursorPosition]; } diff --git a/packages/mini_sprite_editor/lib/sprite/cubit/tools_state.dart b/packages/mini_sprite_editor/lib/sprite/cubit/tools_state.dart index e84883f..0e2980b 100644 --- a/packages/mini_sprite_editor/lib/sprite/cubit/tools_state.dart +++ b/packages/mini_sprite_editor/lib/sprite/cubit/tools_state.dart @@ -9,12 +9,12 @@ class ToolsState extends Equatable { }); const ToolsState.initial() - : this( - pixelSize: 25, - tool: SpriteTool.brush, - gridActive: true, - currentColor: 0, - ); + : this( + pixelSize: 25, + tool: SpriteTool.brush, + gridActive: true, + currentColor: 0, + ); final int pixelSize; final SpriteTool tool; @@ -36,10 +36,5 @@ class ToolsState extends Equatable { } @override - List get props => [ - pixelSize, - tool, - gridActive, - currentColor, - ]; + List get props => [pixelSize, tool, gridActive, currentColor]; } diff --git a/packages/mini_sprite_editor/lib/sprite/models/sprite_tool.dart b/packages/mini_sprite_editor/lib/sprite/models/sprite_tool.dart index 9e64fb8..31e7113 100644 --- a/packages/mini_sprite_editor/lib/sprite/models/sprite_tool.dart +++ b/packages/mini_sprite_editor/lib/sprite/models/sprite_tool.dart @@ -1,6 +1 @@ -enum SpriteTool { - brush, - eraser, - bucket, - bucketEraser, -} +enum SpriteTool { brush, eraser, bucket, bucketEraser } diff --git a/packages/mini_sprite_editor/lib/sprite/view/confirm_dialog.dart b/packages/mini_sprite_editor/lib/sprite/view/confirm_dialog.dart index d6852d2..2aa4ca1 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/confirm_dialog.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/confirm_dialog.dart @@ -27,9 +27,7 @@ class ConfirmDialog extends StatelessWidget { style: Theme.of(context).textTheme.headlineMedium, ), const SizedBox(width: 8), - Text( - l10n.confirmationMessage, - ), + Text(l10n.confirmationMessage), const SizedBox(height: 32), Column( children: [ diff --git a/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart b/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart index 1f14102..0c7364a 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart @@ -68,10 +68,7 @@ class PageShortcuts extends StatelessWidget { }, ), }, - child: Focus( - autofocus: true, - child: child, - ), + child: Focus(autofocus: true, child: child), ), ); } diff --git a/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart b/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart index d334ea2..9c57e40 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart @@ -20,7 +20,7 @@ class PixelCell extends StatelessWidget { width: pixelSize.toDouble(), height: pixelSize.toDouble(), decoration: BoxDecoration( - color: hovered ? color.withOpacity(.2) : color, + color: hovered ? color.withValues(alpha: .2) : color, border: Border.all( color: hasBorder ? Colors.black : Colors.transparent, ), diff --git a/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart b/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart index 612bd8f..dc5326d 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart @@ -63,16 +63,14 @@ class _RenameDialogState extends State { children: [ ElevatedButton( onPressed: () { - Navigator.of(context).pop(null); + Navigator.of(context).pop(); }, child: Text(l10n.cancel), ), const SizedBox(width: 16), ElevatedButton( onPressed: () { - Navigator.of(context).pop( - _textController.text, - ); + Navigator.of(context).pop(_textController.text); }, child: Text(l10n.confirm), ), diff --git a/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart b/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart index cdca8ae..8a38135 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart @@ -55,42 +55,43 @@ class SpriteView extends StatelessWidget { child: MouseRegion( onHover: (event) { context.read().cursorHover( - event.localPosition, - pixelSize.toDouble(), - tool, - toolsState.currentColor, - ); + event.localPosition, + pixelSize.toDouble(), + tool, + toolsState.currentColor, + ); }, child: GestureDetector( onPanStart: (event) { context.read().cursorDown( - event.localPosition, - pixelSize.toDouble(), - tool, - toolsState.currentColor, - ); + event.localPosition, + pixelSize.toDouble(), + tool, + toolsState.currentColor, + ); }, onPanEnd: (event) { context.read().cursorUp( - tool, - toolsState.currentColor, - ); + tool, + toolsState.currentColor, + ); }, onPanUpdate: (event) { context.read().cursorHover( - event.localPosition, - pixelSize.toDouble(), - tool, - toolsState.currentColor, - ); + event.localPosition, + pixelSize.toDouble(), + tool, + toolsState.currentColor, + ); }, child: BlocListener( - listenWhen: (previous, current) => - previous.selected != current.selected, + listenWhen: + (previous, current) => + previous.selected != current.selected, listener: (context, state) { context.read().setSprite( - state.sprites[state.selected]!.pixels, - ); + state.sprites[state.selected]!.pixels, + ); }, child: Container( color: configState.backgroundColor, @@ -105,11 +106,13 @@ class SpriteView extends StatelessWidget { for (var x = 0; x < pixels[y].length; x++) PixelCell( pixelSize: pixelSize, - color: pixels[y][x] >= 0 - ? palette[pixels[y][x]] - : configState.backgroundColor, + color: + pixels[y][x] >= 0 + ? palette[pixels[y][x]] + : configState.backgroundColor, hasBorder: gridActive, - hovered: cursorPosition == + hovered: + cursorPosition == Offset( x.toDouble(), y.toDouble(), @@ -141,10 +144,7 @@ class SpriteView extends StatelessWidget { final cubit = context.read(); final value = await SpriteSizeDialog.show(context); if (value != null) { - cubit.setSize( - value.dx.toInt(), - value.dy.toInt(), - ); + cubit.setSize(value.dx.toInt(), value.dy.toInt()); } }, tooltip: l10n.spriteSizeTitle, @@ -168,9 +168,7 @@ class SpriteView extends StatelessWidget { context.read().toogleGrid(); }, tooltip: l10n.toogleGrid, - icon: Icon( - gridActive ? Icons.grid_on : Icons.grid_off, - ), + icon: Icon(gridActive ? Icons.grid_on : Icons.grid_off), ), IconButton( key: const Key('flip_vertically_key'), @@ -236,10 +234,10 @@ class SpriteView extends StatelessWidget { onPressed: () async { final messenger = ScaffoldMessenger.of(context); await context.read().exportToImage( - pixelSize: pixelSize, - palette: palette, - backgroundColor: configState.backgroundColor, - ); + pixelSize: pixelSize, + palette: palette, + backgroundColor: configState.backgroundColor, + ); messenger.showSnackBar( SnackBar(content: Text(l10n.spriteExported)), ); @@ -273,12 +271,10 @@ class SpriteView extends StatelessWidget { context.read().setColor(i); }, child: ColoredBox( - color: configState.colors[i].withOpacity( - toolsState.currentColor == i ? .2 : 1, - ), - child: const SizedBox.square( - dimension: 16, + color: configState.colors[i].withValues( + alpha: toolsState.currentColor == i ? .2 : 1, ), + child: const SizedBox.square(dimension: 16), ), ), ], @@ -294,49 +290,53 @@ class SpriteView extends StatelessWidget { children: [ IconButton( key: const Key('brush_key'), - onPressed: tool == SpriteTool.brush - ? null - : () { - context - .read() - .selectTool(SpriteTool.brush); - }, + onPressed: + tool == SpriteTool.brush + ? null + : () { + context.read().selectTool( + SpriteTool.brush, + ); + }, tooltip: l10n.brush, icon: const Icon(Icons.brush), ), IconButton( key: const Key('eraser_key'), - onPressed: tool == SpriteTool.eraser - ? null - : () { - context - .read() - .selectTool(SpriteTool.eraser); - }, + onPressed: + tool == SpriteTool.eraser + ? null + : () { + context.read().selectTool( + SpriteTool.eraser, + ); + }, tooltip: l10n.eraser, icon: const Icon(Icons.rectangle), ), IconButton( key: const Key('bucket_key'), - onPressed: tool == SpriteTool.bucket - ? null - : () { - context - .read() - .selectTool(SpriteTool.bucket); - }, + onPressed: + tool == SpriteTool.bucket + ? null + : () { + context.read().selectTool( + SpriteTool.bucket, + ); + }, tooltip: l10n.bucket, icon: const Icon(Icons.egg_sharp), ), IconButton( key: const Key('bucket_eraser_key'), - onPressed: tool == SpriteTool.bucketEraser - ? null - : () { - context - .read() - .selectTool(SpriteTool.bucketEraser); - }, + onPressed: + tool == SpriteTool.bucketEraser + ? null + : () { + context.read().selectTool( + SpriteTool.bucketEraser, + ); + }, tooltip: l10n.bucketEraser, icon: const Icon(Icons.egg_outlined), ), diff --git a/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart b/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart index a1db29e..0da250b 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/sprite_size_dialog.dart @@ -32,10 +32,10 @@ class _SpriteSizeDialogState extends State { super.initState(); final state = context.read().state; - _widthController = TextEditingController() - ..text = state.pixels[0].length.toString(); - _heightController = TextEditingController() - ..text = state.pixels.length.toString(); + _widthController = + TextEditingController()..text = state.pixels[0].length.toString(); + _heightController = + TextEditingController()..text = state.pixels.length.toString(); } @override @@ -64,9 +64,7 @@ class _SpriteSizeDialogState extends State { decoration: InputDecoration(label: Text(l10n.width)), textAlign: TextAlign.center, controller: _widthController, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], + inputFormatters: [FilteringTextInputFormatter.digitsOnly], ), ), const SizedBox(width: 50), @@ -76,9 +74,7 @@ class _SpriteSizeDialogState extends State { decoration: InputDecoration(label: Text(l10n.height)), textAlign: TextAlign.center, controller: _heightController, - inputFormatters: [ - FilteringTextInputFormatter.digitsOnly, - ], + inputFormatters: [FilteringTextInputFormatter.digitsOnly], ), ), const SizedBox(width: 50), @@ -89,7 +85,7 @@ class _SpriteSizeDialogState extends State { children: [ ElevatedButton( onPressed: () { - Navigator.of(context).pop(null); + Navigator.of(context).pop(); }, child: Text(l10n.cancel), ), diff --git a/packages/mini_sprite_editor/lib/workspace/cubit/workspace_cubit.dart b/packages/mini_sprite_editor/lib/workspace/cubit/workspace_cubit.dart index 7d3dc35..7f0e784 100644 --- a/packages/mini_sprite_editor/lib/workspace/cubit/workspace_cubit.dart +++ b/packages/mini_sprite_editor/lib/workspace/cubit/workspace_cubit.dart @@ -9,13 +9,7 @@ class WorkspaceCubit extends Cubit { void openPanel(WorkspacePanel panel) { if (!state.panels.contains(panel)) { emit( - state.copyWith( - panels: [ - ...state.panels, - panel, - ], - activePanel: panel, - ), + state.copyWith(panels: [...state.panels, panel], activePanel: panel), ); } else { emit(state.copyWith(activePanel: panel)); @@ -32,10 +26,6 @@ class WorkspaceCubit extends Cubit { } void setMode(WorkspaceMode mode) { - emit( - state.copyWith( - mode: mode, - ), - ); + emit(state.copyWith(mode: mode)); } } diff --git a/packages/mini_sprite_editor/lib/workspace/cubit/workspace_state.dart b/packages/mini_sprite_editor/lib/workspace/cubit/workspace_state.dart index 75aef5c..7983335 100644 --- a/packages/mini_sprite_editor/lib/workspace/cubit/workspace_state.dart +++ b/packages/mini_sprite_editor/lib/workspace/cubit/workspace_state.dart @@ -1,16 +1,8 @@ part of 'workspace_cubit.dart'; -enum WorkspacePanel { - sprite, - map, - hub, -} +enum WorkspacePanel { sprite, map } -enum WorkspaceMode { - verticalSplit, - horizontalSplit, - tabs, -} +enum WorkspaceMode { verticalSplit, horizontalSplit, tabs } class WorkspaceState extends Equatable { const WorkspaceState({ @@ -20,11 +12,11 @@ class WorkspaceState extends Equatable { }); const WorkspaceState.initial() - : this( - panels: const [], - mode: WorkspaceMode.tabs, - activePanel: WorkspacePanel.sprite, - ); + : this( + panels: const [], + mode: WorkspaceMode.tabs, + activePanel: WorkspacePanel.sprite, + ); final List panels; final WorkspaceMode mode; diff --git a/packages/mini_sprite_editor/lib/workspace/view/initial_panel.dart b/packages/mini_sprite_editor/lib/workspace/view/initial_panel.dart index 3ac2ecd..10f5106 100644 --- a/packages/mini_sprite_editor/lib/workspace/view/initial_panel.dart +++ b/packages/mini_sprite_editor/lib/workspace/view/initial_panel.dart @@ -20,8 +20,8 @@ class InitialPanel extends StatelessWidget { child: IconButton( onPressed: () { context.read().openPanel( - WorkspacePanel.sprite, - ); + WorkspacePanel.sprite, + ); }, tooltip: l10n.openSpriteEditor, icon: const Icon(Icons.brush), @@ -35,9 +35,7 @@ class InitialPanel extends StatelessWidget { height: 100, child: IconButton( onPressed: () { - context.read().openPanel( - WorkspacePanel.map, - ); + context.read().openPanel(WorkspacePanel.map); }, tooltip: l10n.openMapEditor, icon: const Icon(Icons.map), diff --git a/packages/mini_sprite_editor/lib/workspace/view/panel.dart b/packages/mini_sprite_editor/lib/workspace/view/panel.dart index 3a954bc..85644eb 100644 --- a/packages/mini_sprite_editor/lib/workspace/view/panel.dart +++ b/packages/mini_sprite_editor/lib/workspace/view/panel.dart @@ -1,17 +1,12 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:mini_sprite_editor/hub/view/hub_page.dart'; import 'package:mini_sprite_editor/map/map.dart'; import 'package:mini_sprite_editor/sprite/sprite.dart'; import 'package:mini_sprite_editor/workspace/workspace.dart'; class Panel extends StatefulWidget { - const Panel({ - super.key, - required this.panel, - required this.isActive, - }); + const Panel({super.key, required this.panel, required this.isActive}); final WorkspacePanel panel; final bool isActive; @@ -51,8 +46,6 @@ class _PanelState extends State { return const SpritePage(); case WorkspacePanel.map: return const MapPage(); - case WorkspacePanel.hub: - return const HubPage(); } }, ), diff --git a/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart b/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart index 383cd76..c9b1777 100644 --- a/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart +++ b/packages/mini_sprite_editor/lib/workspace/view/tab_workspace.dart @@ -65,9 +65,10 @@ class _Tab extends StatelessWidget { decoration: BoxDecoration( border: Border( bottom: BorderSide( - color: selected - ? Theme.of(context).buttonTheme.colorScheme!.primary - : Colors.transparent, + color: + selected + ? Theme.of(context).buttonTheme.colorScheme!.primary + : Colors.transparent, ), ), ), diff --git a/packages/mini_sprite_editor/lib/workspace/view/workspace_view.dart b/packages/mini_sprite_editor/lib/workspace/view/workspace_view.dart index 2702b6e..0ee3b1e 100644 --- a/packages/mini_sprite_editor/lib/workspace/view/workspace_view.dart +++ b/packages/mini_sprite_editor/lib/workspace/view/workspace_view.dart @@ -6,11 +6,7 @@ import 'package:mini_sprite_editor/sprite/sprite.dart'; import 'package:mini_sprite_editor/workspace/workspace.dart'; class WorkspaceView extends StatefulWidget { - const WorkspaceView({ - this.colorList, - this.sprite, - super.key, - }); + const WorkspaceView({this.colorList, this.sprite, super.key}); final List? colorList; final MiniSprite? sprite; @@ -35,8 +31,6 @@ class _WorkspaceViewState extends State { @override Widget build(BuildContext context) { - return const Scaffold( - body: TabWorkspace(), - ); + return const Scaffold(body: TabWorkspace()); } } diff --git a/packages/mini_sprite_editor/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/mini_sprite_editor/macos/Flutter/GeneratedPluginRegistrant.swift index b700dcd..b878e03 100644 --- a/packages/mini_sprite_editor/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/packages/mini_sprite_editor/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,7 @@ import FlutterMacOS import Foundation import file_selector_macos -import path_provider_macos +import path_provider_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) diff --git a/packages/mini_sprite_editor/pubspec.lock b/packages/mini_sprite_editor/pubspec.lock index 2931005..c782aa5 100644 --- a/packages/mini_sprite_editor/pubspec.lock +++ b/packages/mini_sprite_editor/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 + sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f url: "https://pub.dev" source: hosted - version: "64.0.0" + version: "85.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" + sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d" url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "7.7.1" args: dependency: transitive description: name: args - sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.7.0" async: dependency: transitive description: @@ -37,18 +37,18 @@ packages: dependency: "direct main" description: name: bloc - sha256: bd4f8027bfa60d96c8046dec5ce74c463b2c918dce1b0d36593575995344534a + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" url: "https://pub.dev" source: hosted - version: "8.1.0" + version: "8.1.4" bloc_test: dependency: "direct dev" description: name: bloc_test - sha256: "17423ebac5cfa606be656d312f262e423d3737f2b7b82c46a0ef38988d96f0ca" + sha256: "165a6ec950d9252ebe36dc5335f2e6eb13055f33d56db0eeb7642768849b43d2" url: "https://pub.dev" source: hosted - version: "9.0.3" + version: "9.1.7" boolean_selector: dependency: transitive description: @@ -65,6 +65,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.dev" + source: hosted + version: "0.2.0" clock: dependency: transitive description: @@ -85,34 +93,34 @@ packages: dependency: transitive description: name: convert - sha256: "196284f26f69444b7f5c50692b55ec25da86d9e500451dc09333bf2e3ad69259" + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.1.2" coverage: dependency: transitive description: name: coverage - sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43 + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.15.0" cross_file: dependency: transitive description: name: cross_file - sha256: "7632a2bcddc8cef4afde3c6f80e69b29a7060e176f01119c229fe4eb3a2a3d4f" + sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" url: "https://pub.dev" source: hosted - version: "0.3.3+1" + version: "0.3.4+2" crypto: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.6" diff_match_patch: dependency: transitive description: @@ -141,10 +149,10 @@ packages: dependency: "direct main" description: name: equatable - sha256: c6094fd1efad3046334a9c40bee022147e55c25401ccd89b94e373e3edadd375 + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" url: "https://pub.dev" source: hosted - version: "2.0.3" + version: "2.0.7" fake_async: dependency: transitive description: @@ -157,58 +165,82 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.4" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.1" file_selector: dependency: "direct main" description: name: file_selector - sha256: "29c8f9fbd30d101135fc93b2d702298e8e8033249d8d877f004d289579b5bbf8" + sha256: "1d2fde93dddf634a9c3c0faa748169d7ac0d83757135555707e52f02c017ad4f" + url: "https://pub.dev" + source: hosted + version: "0.9.5" + file_selector_android: + dependency: transitive + description: + name: file_selector_android + sha256: "3015702ab73987000e7ff2df5ddc99666d2bcd65cdb243f59da35729d3be6cff" + url: "https://pub.dev" + source: hosted + version: "0.5.1+15" + file_selector_ios: + dependency: transitive + description: + name: file_selector_ios + sha256: fe9f52123af16bba4ad65bd7e03defbbb4b172a38a8e6aaa2a869a0c56a5f5fb + url: "https://pub.dev" + source: hosted + version: "0.5.3+2" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" url: "https://pub.dev" source: hosted - version: "0.9.0" + version: "0.9.3+2" file_selector_macos: dependency: transitive description: name: file_selector_macos - sha256: "5aa08c3764ebc6854ee94787528b81c8e6b6b0fc6d51847de60f7cbdf79ab694" + sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c" url: "https://pub.dev" source: hosted - version: "0.9.0" + version: "0.9.4+4" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: "92b924983d18c53d9d354b95be261af869f2a8efa125b293d2db6569c32dd9c3" + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.6.2" file_selector_web: dependency: transitive description: name: file_selector_web - sha256: "8e9ca06d07a7fe60e487e3647792552c5b9722139aeb51b8f462be0336b47456" + sha256: c4c0ea4224d97a60a7067eca0c8fd419e708ff830e0c83b11a48faf566cec3e7 url: "https://pub.dev" source: hosted - version: "0.9.0" + version: "0.9.4+2" file_selector_windows: dependency: transitive description: name: file_selector_windows - sha256: d51f13f87f1825fbd26d51b34491928bb2ec009e1bac1be60967bfb3bc2da960 + sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" url: "https://pub.dev" source: hosted - version: "0.9.1" + version: "0.9.3+4" flame: dependency: "direct main" description: @@ -221,10 +253,10 @@ packages: dependency: "direct main" description: name: flame_bloc - sha256: "86ea5dcaa072ee12ce2e68aa02b82e56fe13f931aa43e1b5f460f9d02e8fece0" + sha256: "47a083bc4446e42f0b5bbbb9100564c1ee86b90c67102093f3749989e9ef721e" url: "https://pub.dev" source: hosted - version: "1.6.0" + version: "1.10.9" flame_mini_sprite: dependency: "direct main" description: @@ -241,18 +273,18 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: "7b84d9777db3e30a5051c6718331be57e4cfc0c2424be82ac1771392cad7dbe8" + sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a url: "https://pub.dev" source: hosted - version: "8.0.1" + version: "8.1.6" flutter_colorpicker: dependency: "direct main" description: name: flutter_colorpicker - sha256: "458a6ed8ea480eb16ff892aedb4b7092b2804affd7e046591fb03127e8d8ef8b" + sha256: "969de5f6f9e2a570ac660fb7b501551451ea2a1ab9e2097e89475f60e07816ea" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.1.0" flutter_localizations: dependency: "direct main" description: flutter @@ -272,10 +304,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "4.0.0" glob: dependency: transitive description: @@ -296,34 +328,34 @@ packages: dependency: transitive description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "1.5.0" http_multi_server: dependency: transitive description: name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" http_parser: dependency: transitive description: name: http_parser - sha256: db3060f22889f3d9d55f6a217565486737037eec3609f7f3eca4d0c67ee0d8a0 + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.1.2" hydrated_bloc: dependency: "direct main" description: name: hydrated_bloc - sha256: "273a479d9881a4feb0079775c3b7a0e48cde2fbfca372658d29ccd309b2f588f" + sha256: af35b357739fe41728df10bec03aad422cdc725a1e702e03af9d2a41ea05160c url: "https://pub.dev" source: hosted - version: "9.0.0-dev.3" + version: "9.1.5" intl: dependency: "direct main" description: @@ -336,58 +368,58 @@ packages: dependency: transitive description: name: io - sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852" + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.5" js: dependency: transitive description: name: js - sha256: a5e201311cb08bf3912ebbe9a2be096e182d703f881136ec1e81a2338a9e120d + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.7.2" json_annotation: dependency: transitive description: name: json_annotation - sha256: cb314f00b2488de7bc575207e54402cd2f92363f333a7933fd1b0631af226baa + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.6.0" + version: "4.9.0" leak_tracker: dependency: transitive description: name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0" url: "https://pub.dev" source: hosted - version: "10.0.9" + version: "11.0.1" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" logging: dependency: transitive description: name: logging - sha256: "293ae2d49fd79d4c04944c3a26dfd313382d5f52e821ec57119230ae16031ad4" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.3.0" matcher: dependency: transitive description: @@ -416,10 +448,10 @@ packages: dependency: transitive description: name: mime - sha256: dab22e92b41aa1255ea90ddc4bc2feaf35544fd0728e209638cad041a6e3928a + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "2.0.0" mini_hub_client: dependency: "direct main" description: @@ -454,26 +486,26 @@ packages: dependency: transitive description: name: node_preamble - sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d" + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" ordered_set: dependency: transitive description: name: ordered_set - sha256: "3858c7d84619edfab87c3e367584648020903187edb70b52697646f4b2a93022" + sha256: "1bfaaaee0419e43ecc9eaebd410eb4bd5039657b72011de75ff3e2915c9aac60" url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "5.0.3" package_config: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.0" path: dependency: transitive description: @@ -486,74 +518,66 @@ packages: dependency: "direct main" description: name: path_provider - sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.1.5" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "833c8bcb182b515cd872c113e29aaaffd29a1c720259dd2f65ab35ed5e0db748" + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 url: "https://pub.dev" source: hosted - version: "2.0.17" - path_provider_ios: + version: "2.2.17" + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" + name: path_provider_foundation + sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd" url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.4.2" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - sha256: "2a97e7fbb7ae9dcd0dfc1220a78e9ec3e71da691912e617e8715ff2a13086ae8" - url: "https://pub.dev" - source: hosted - version: "2.0.6" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "27dc7a224fcd07444cb5e0e60423ccacea3e13cf00fc5282ac2c918132da931d" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: "4fedda0f10803a8530d616ad0a963128c6ef7525065c9b67ad6577315785d931" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.3.0" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.6" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.8" pool: dependency: transitive description: @@ -562,70 +586,62 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: transitive description: name: provider - sha256: "8d7d4c2df46d6a6270a4e10404bfecb18a937e3e00f710c260d0a10415ce6b7b" + sha256: "4e82183fa20e5ca25703ead7e05de9e4cceed1fbd1eadc1ac3cb6f565a09f272" url: "https://pub.dev" source: hosted - version: "6.0.3" + version: "6.1.5+1" pub_semver: dependency: transitive description: name: pub_semver - sha256: "816c1a640e952d213ddd223b3e7aafae08cd9f8e1f6864eed304cc13b0272b07" + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" replay_bloc: dependency: "direct main" description: name: replay_bloc - sha256: c4ed8c11e3ad0f1b270ccf9a4e1acae9821460c01be2e732660033ff0f33672a + sha256: "36d0fb566e47aa0f1f96d567e93b442c3fa5c957777ef52a5f60d2f9e9d8e766" url: "https://pub.dev" source: hosted - version: "0.2.2" + version: "0.2.7" shelf: dependency: transitive description: name: shelf - sha256: f27c6406c89ab3921ed4a3bbdc38d48676f8b78fe537cbdbeb0d2c0f661026d7 + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.2" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" shelf_static: dependency: transitive description: name: shelf_static - sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.3" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: "6db16374bc3497d21aa0eebe674d3db9fdf82082aac0f04dc7b44e4af5b08afc" + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "3.0.0" sky_engine: dependency: transitive description: flutter @@ -635,18 +651,18 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "8c463326277f68a628abab20580047b419c2ff66756fd0affd451f73f9508c11" + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" source_maps: dependency: transitive description: name: source_maps - sha256: "52de2200bb098de739794c82d09c41ac27b2e42fd7e23cce7b9c74bf653c7296" + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" url: "https://pub.dev" source: hosted - version: "0.10.10" + version: "0.10.13" source_span: dependency: transitive description: @@ -683,10 +699,10 @@ packages: dependency: transitive description: name: synchronized - sha256: a7f0790927c0806ae0d5eb061c713748fa6070ef0037e391a2d53c3844c09dc2 + sha256: c254ade258ec8282947a0acbbc90b9575b4f19673533ee46f2f6e9b3aeefd7c0 url: "https://pub.dev" source: hosted - version: "3.0.0+2" + version: "3.4.0" term_glyph: dependency: transitive description: @@ -699,66 +715,66 @@ packages: dependency: transitive description: name: test - sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" + sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb" url: "https://pub.dev" source: hosted - version: "1.25.15" + version: "1.26.2" test_api: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.6" test_core: dependency: transitive description: name: test_core - sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" + sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a" url: "https://pub.dev" source: hosted - version: "0.6.8" + version: "0.6.11" typed_data: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.4.0" vector_math: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" very_good_analysis: dependency: "direct dev" description: name: very_good_analysis - sha256: "396bf7de205dd5b03eb164d04692de3e8335c11a7ddb2f63153de8dfcee921d9" + sha256: "4815adc7ded57657038d2bb2a7f332c50e3c8152f7d3c6acf8f6b7c0cc81e5e2" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.1.0" vm_service: dependency: transitive description: name: vm_service - sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" url: "https://pub.dev" source: hosted - version: "15.0.0" + version: "15.0.2" watcher: dependency: transitive description: name: watcher - sha256: e42dfcc48f67618344da967b10f62de57e04bae01d9d3af4c2596f3712a88c99 + sha256: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.2" web: dependency: transitive description: @@ -767,46 +783,46 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - web_socket_channel: + web_socket: dependency: transitive description: - name: web_socket_channel - sha256: "3a969ddcc204a3e34e863d204b29c0752716f78b6f9cc8235083208d268a4ccd" + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" url: "https://pub.dev" source: hosted - version: "2.2.0" - webkit_inspection_protocol: + version: "1.0.1" + web_socket_channel: dependency: transitive description: - name: webkit_inspection_protocol - sha256: f66577ed748712574b076e48a300aa3d8bc7aba93e83490c679707187e135ee4 + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 url: "https://pub.dev" source: hosted - version: "1.1.0" - win32: + version: "3.0.3" + webkit_inspection_protocol: dependency: transitive description: - name: win32 - sha256: "6b75ac2ddd42f5c226fdaf4498a2b04071c06f1f2b8f7ab1c3f77cc7f2285ff1" + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "1.2.1" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "060b6e1c891d956f72b5ac9463466c37cce3fa962a921532fc001e86fe93438e" + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "0.2.0+1" + version: "1.1.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.3" sdks: - dart: ">=3.7.0-0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.29.0" diff --git a/packages/mini_sprite_editor/pubspec.yaml b/packages/mini_sprite_editor/pubspec.yaml index 1581818..017b3d4 100644 --- a/packages/mini_sprite_editor/pubspec.yaml +++ b/packages/mini_sprite_editor/pubspec.yaml @@ -4,15 +4,15 @@ version: 0.0.1+1 publish_to: none environment: - sdk: ">=2.17.0 <3.0.0" + sdk: ">=3.7.0 <4.0.0" dependencies: bloc: ^8.0.3 collection: ^1.16.0 equatable: ^2.0.3 file_selector: ^0.9.0 - flame: 1.14.0 - flame_bloc: ^1.6.0 + flame: 1.30.1 + flame_bloc: ^1.12.15 flame_mini_sprite: 0.0.2 flutter: sdk: flutter @@ -32,7 +32,7 @@ dev_dependencies: flutter_test: sdk: flutter mocktail: ^0.3.0 - very_good_analysis: ^3.0.0 + very_good_analysis: ^10.0.0 flutter: uses-material-design: true diff --git a/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart b/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart index f386bb1..f68ae08 100644 --- a/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart +++ b/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart @@ -23,39 +23,44 @@ void main() async { act: (cubit) { cubit.setThemeMode(ThemeMode.light); }, - expect: () => [ - const ConfigState.initial().copyWith(themeMode: ThemeMode.light), - ], + expect: + () => [ + const ConfigState.initial().copyWith(themeMode: ThemeMode.light), + ], ); blocTest( 'setColor', build: ConfigCubit.new, - seed: () => const ConfigState.initial().copyWith( - colors: [Colors.white, Colors.transparent], - ), + seed: + () => const ConfigState.initial().copyWith( + colors: [Colors.white, Colors.transparent], + ), act: (cubit) { cubit.setColor(1, Colors.red); }, - expect: () => [ - const ConfigState.initial().copyWith( - colors: [Colors.white, Colors.red], - ), - ], + expect: + () => [ + const ConfigState.initial().copyWith( + colors: [Colors.white, Colors.red], + ), + ], ); blocTest( 'removeColor', build: ConfigCubit.new, - seed: () => const ConfigState.initial().copyWith( - colors: [Colors.white, Colors.transparent], - ), + seed: + () => const ConfigState.initial().copyWith( + colors: [Colors.white, Colors.transparent], + ), act: (cubit) { cubit.removeColor(1); }, - expect: () => [ - const ConfigState.initial().copyWith(colors: [Colors.white]), - ], + expect: + () => [ + const ConfigState.initial().copyWith(colors: [Colors.white]), + ], ); blocTest( @@ -64,9 +69,10 @@ void main() async { act: (cubit) { cubit.setBackgroundColor(Colors.red); }, - expect: () => [ - const ConfigState.initial().copyWith(backgroundColor: Colors.red), - ], + expect: + () => [ + const ConfigState.initial().copyWith(backgroundColor: Colors.red), + ], ); blocTest( @@ -75,9 +81,7 @@ void main() async { act: (cubit) { cubit.setGridSize(20); }, - expect: () => [ - const ConfigState.initial().copyWith(mapGridSize: 20), - ], + expect: () => [const ConfigState.initial().copyWith(mapGridSize: 20)], ); test('toJson returns the state json', () { @@ -87,26 +91,22 @@ void main() async { expect( json, - equals( - { - 'theme_mode': 'dark', - 'colors': state.colors.map((e) => e.value).toList(), - 'background_color': state.backgroundColor.value, - 'map_grid_size': state.mapGridSize, - }, - ), + equals({ + 'theme_mode': 'dark', + 'colors': state.colors.map((e) => e.toARGB32()).toList(), + 'background_color': state.backgroundColor.toARGB32(), + 'map_grid_size': state.mapGridSize, + }), ); }); test('fromJson returns the correct instance', () { - final state = ConfigCubit().fromJson( - { - 'theme_mode': 'dark', - 'colors': [Colors.white.value, Colors.transparent.value], - 'background_color': Colors.black.value, - 'map_grid_size': 16, - }, - ); + final state = ConfigCubit().fromJson({ + 'theme_mode': 'dark', + 'colors': [Colors.white.toARGB32(), Colors.transparent.toARGB32()], + 'background_color': Colors.black.toARGB32(), + 'map_grid_size': 16, + }); expect( state, @@ -121,18 +121,15 @@ void main() async { ); }); - test( - 'fromJson returns colors in the new format when reading ' + test('fromJson returns colors in the new format when reading ' 'the old one', () { - final state = ConfigCubit().fromJson( - { - 'theme_mode': 'dark', - 'filled_color': Colors.white.value, - 'unfilled_color': Colors.black.value, - 'background_color': Colors.black.value, - 'map_grid_size': 16, - }, - ); + final state = ConfigCubit().fromJson({ + 'theme_mode': 'dark', + 'filled_color': Colors.white.toARGB32(), + 'unfilled_color': Colors.black.toARGB32(), + 'background_color': Colors.black.toARGB32(), + 'map_grid_size': 16, + }); expect( state, @@ -150,14 +147,12 @@ void main() async { test( 'fromJson returns theme mode system when serialized has invalid value', () { - final state = ConfigCubit().fromJson( - { - 'theme_mode': 'bla', - 'colors': [Colors.white.value, Colors.transparent.value], - 'background_color': Colors.black.value, - 'map_grid_size': 16, - }, - ); + final state = ConfigCubit().fromJson({ + 'theme_mode': 'bla', + 'colors': [Colors.white.toARGB32(), Colors.transparent.toARGB32()], + 'background_color': Colors.black.toARGB32(), + 'map_grid_size': 16, + }); expect( state, diff --git a/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart b/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart index 4ad7495..e0e76e8 100644 --- a/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart +++ b/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart @@ -129,9 +129,7 @@ void main() { colors: const [Colors.white, Colors.transparent], backgroundColor: Colors.black, mapGridSize: 16, - ).copyWith( - themeMode: ThemeMode.light, - ), + ).copyWith(themeMode: ThemeMode.light), equals( ConfigState( themeMode: ThemeMode.light, @@ -148,9 +146,7 @@ void main() { colors: const [Colors.white, Colors.transparent], backgroundColor: Colors.black, mapGridSize: 16, - ).copyWith( - colors: const [Colors.red], - ), + ).copyWith(colors: const [Colors.red]), equals( ConfigState( themeMode: ThemeMode.dark, @@ -167,9 +163,7 @@ void main() { colors: const [Colors.white, Colors.transparent], backgroundColor: Colors.black, mapGridSize: 16, - ).copyWith( - backgroundColor: Colors.red, - ), + ).copyWith(backgroundColor: Colors.red), equals( ConfigState( themeMode: ThemeMode.dark, diff --git a/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart b/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart index 66655a1..26578c4 100644 --- a/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart +++ b/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart @@ -31,18 +31,10 @@ extension TestWidgetText on WidgetTester { await pumpApp( MultiBlocProvider( providers: [ - BlocProvider.value( - value: spriteCubit, - ), - BlocProvider.value( - value: toolsCubit, - ), - BlocProvider.value( - value: configCubit, - ), - BlocProvider.value( - value: libraryCubit, - ), + BlocProvider.value(value: spriteCubit), + BlocProvider.value(value: toolsCubit), + BlocProvider.value(value: configCubit), + BlocProvider.value(value: libraryCubit), ], child: const SpriteView(), ), @@ -72,7 +64,7 @@ void main() async { libraryCubit = _MockLibraryCubit(); }); - void _mockState({ + void mockState({ required SpriteState spriteState, required ToolsState toolsState, required ConfigState configState, @@ -103,7 +95,7 @@ void main() async { group('config', () { testWidgets('opens the config dialog', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -124,7 +116,7 @@ void main() async { }); testWidgets('can close the config dialog', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -148,7 +140,7 @@ void main() async { }); testWidgets('can change to system', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial().copyWith( @@ -173,7 +165,7 @@ void main() async { }); testWidgets('can change to light', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -196,7 +188,7 @@ void main() async { }); testWidgets('can change to dark', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -220,7 +212,7 @@ void main() async { testWidgets('can change add a color', (tester) async { const state = ConfigState.initial(); - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: state, @@ -251,12 +243,10 @@ void main() async { testWidgets('can change a color', (tester) async { const state = ConfigState.initial(); - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), - configState: state.copyWith( - colors: const [Colors.red, Colors.green], - ), + configState: state.copyWith(colors: const [Colors.red, Colors.green]), libraryState: LibraryState.initial(), ); @@ -279,14 +269,12 @@ void main() async { await tester.pumpAndSettle(); await tester.idle(); - verify( - () => configCubit.setColor(0, captureAny()), - ).called(1); + verify(() => configCubit.setColor(0, captureAny())).called(1); }); testWidgets('can change the background color', (tester) async { const state = ConfigState.initial(); - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: state, diff --git a/packages/mini_sprite_editor/test/helpers/mock_hydrated_storage.dart b/packages/mini_sprite_editor/test/helpers/mock_hydrated_storage.dart index e0d7717..8c6a8c7 100644 --- a/packages/mini_sprite_editor/test/helpers/mock_hydrated_storage.dart +++ b/packages/mini_sprite_editor/test/helpers/mock_hydrated_storage.dart @@ -22,4 +22,9 @@ class MockHydratedStorage implements HydratedStorage { Future write(String key, dynamic value) async { _values[key] = value; } + + @override + Future close() async { + // noop + } } diff --git a/packages/mini_sprite_editor/test/helpers/pump_app.dart b/packages/mini_sprite_editor/test/helpers/pump_app.dart index 7284d9a..1eefbfd 100644 --- a/packages/mini_sprite_editor/test/helpers/pump_app.dart +++ b/packages/mini_sprite_editor/test/helpers/pump_app.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:mini_sprite_editor/l10n/l10n.dart'; +import 'package:mini_sprite_editor/l10n/arb/app_localizations.dart'; extension PumpApp on WidgetTester { Future pumpApp(Widget widget) { diff --git a/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart b/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart index 18a7118..02a7588 100644 --- a/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart +++ b/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart @@ -28,295 +28,266 @@ void main() { blocTest( 'startCollection initializes the state', build: LibraryCubit.new, - act: (cubit) => cubit.startCollection([ - [1], - ]), - expect: () => [ - LibraryState( - sprites: const { - 'sprite_1': MiniSprite([ - [1], - ]), - }, - selected: 'sprite_1', - ), - ], + act: + (cubit) => cubit.startCollection([ + [1], + ]), + expect: + () => [ + LibraryState( + sprites: const { + 'sprite_1': MiniSprite([ + [1], + ]), + }, + selected: 'sprite_1', + ), + ], ); blocTest( 'updates the selected sprite', - seed: () => LibraryState( - sprites: const { - 'player': MiniSprite( - [ - [1, 1], - [1, 1], - ], - ), - 'tile': MiniSprite( - [ - [0, 1], - [1, 0], - ], - ), - }, - selected: 'player', - ), - build: LibraryCubit.new, - act: (cubit) => cubit.updateSelected([ - [1, 0], - [0, 1], - ]), - expect: () => [ - LibraryState( - sprites: const { - 'player': MiniSprite( - [ - [1, 0], - [0, 1], - ], - ), - 'tile': MiniSprite( - [ + seed: + () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ [0, 1], [1, 0], - ], + ]), + }, + selected: 'player', + ), + build: LibraryCubit.new, + act: + (cubit) => cubit.updateSelected([ + [1, 0], + [0, 1], + ]), + expect: + () => [ + LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 0], + [0, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'player', ), - }, - selected: 'player', - ), - ], + ], ); blocTest( 'renames a sprite', - seed: () => LibraryState( - sprites: const { - 'player': MiniSprite( - [ - [1, 1], - [1, 1], - ], - ), - 'tile': MiniSprite( - [ - [0, 1], - [1, 0], - ], - ), - }, - selected: 'player', - ), - build: LibraryCubit.new, - act: (cubit) => cubit.rename('player', 'char'), - expect: () => [ - LibraryState( - sprites: const { - 'char': MiniSprite( - [ + seed: + () => LibraryState( + sprites: const { + 'player': MiniSprite([ [1, 1], [1, 1], - ], - ), - 'tile': MiniSprite( - [ + ]), + 'tile': MiniSprite([ [0, 1], [1, 0], - ], + ]), + }, + selected: 'player', + ), + build: LibraryCubit.new, + act: (cubit) => cubit.rename('player', 'char'), + expect: + () => [ + LibraryState( + sprites: const { + 'char': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'char', ), - }, - selected: 'char', - ), - ], + ], ); blocTest( 'renames a sprite that is not selected', - seed: () => LibraryState( - sprites: const { - 'player': MiniSprite( - [ - [1, 1], - [1, 1], - ], - ), - 'tile': MiniSprite( - [ - [0, 1], - [1, 0], - ], - ), - }, - selected: 'tile', - ), - build: LibraryCubit.new, - act: (cubit) => cubit.rename('player', 'char'), - expect: () => [ - LibraryState( - sprites: const { - 'char': MiniSprite( - [ + seed: + () => LibraryState( + sprites: const { + 'player': MiniSprite([ [1, 1], [1, 1], - ], - ), - 'tile': MiniSprite( - [ + ]), + 'tile': MiniSprite([ [0, 1], [1, 0], - ], + ]), + }, + selected: 'tile', + ), + build: LibraryCubit.new, + act: (cubit) => cubit.rename('player', 'char'), + expect: + () => [ + LibraryState( + sprites: const { + 'char': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', ), - }, - selected: 'tile', - ), - ], + ], ); blocTest( 'removes a sprite', - seed: () => LibraryState( - sprites: const { - 'player': MiniSprite( - [ - [1, 1], - [1, 1], - ], - ), - 'tile': MiniSprite( - [ - [0, 1], - [1, 0], - ], + seed: + () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', ), - }, - selected: 'tile', - ), build: LibraryCubit.new, act: (cubit) => cubit.removeSprite('player'), - expect: () => [ - LibraryState( - sprites: const { - 'tile': MiniSprite( - [ - [0, 1], - [1, 0], - ], + expect: + () => [ + LibraryState( + sprites: const { + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', ), - }, - selected: 'tile', - ), - ], + ], ); blocTest( 'removes a sprite that is selected', - seed: () => LibraryState( - sprites: const { - 'player': MiniSprite( - [ - [1, 1], - [1, 1], - ], - ), - 'tile': MiniSprite( - [ - [0, 1], - [1, 0], - ], + seed: + () => LibraryState( + sprites: const { + 'player': MiniSprite([ + [1, 1], + [1, 1], + ]), + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'player', ), - }, - selected: 'player', - ), build: LibraryCubit.new, act: (cubit) => cubit.removeSprite('player'), - expect: () => [ - LibraryState( - sprites: const { - 'tile': MiniSprite( - [ - [0, 1], - [1, 0], - ], + expect: + () => [ + LibraryState( + sprites: const { + 'tile': MiniSprite([ + [0, 1], + [1, 0], + ]), + }, + selected: 'tile', ), - }, - selected: 'tile', - ), - ], + ], ); blocTest( 'adds a sprite', - seed: () => const LibraryState( - sprites: {}, - selected: '', - ), + seed: () => const LibraryState(sprites: {}, selected: ''), build: LibraryCubit.new, act: (cubit) => cubit.addSprite(2, 2), - expect: () => [ - LibraryState( - sprites: const { - 'sprite_1': MiniSprite( - [ - [-1, -1], - [-1, -1], - ], + expect: + () => [ + LibraryState( + sprites: const { + 'sprite_1': MiniSprite([ + [-1, -1], + [-1, -1], + ]), + }, + selected: '', ), - }, - selected: '', - ), - ], + ], ); blocTest( 'can handle name conflict on addSprite', - seed: () => const LibraryState( - sprites: { - 'sprite_2': MiniSprite( - [ - [0, 0], - [0, 0], - ], + seed: + () => const LibraryState( + sprites: { + 'sprite_2': MiniSprite([ + [0, 0], + [0, 0], + ]), + }, + selected: '', ), - }, - selected: '', - ), build: LibraryCubit.new, act: (cubit) => cubit.addSprite(2, 2), - expect: () => [ - LibraryState( - sprites: const { - 'sprite_2': MiniSprite( - [ - [0, 0], - [0, 0], - ], - ), - 'sprite_3': MiniSprite( - [ - [-1, -1], - [-1, -1], - ], + expect: + () => [ + LibraryState( + sprites: const { + 'sprite_2': MiniSprite([ + [0, 0], + [0, 0], + ]), + 'sprite_3': MiniSprite([ + [-1, -1], + [-1, -1], + ]), + }, + selected: '', ), - }, - selected: '', - ), - ], + ], ); blocTest( 'selects a sprite', - seed: () => LibraryState( - sprites: {'player': MiniSprite.empty(1, 1)}, - selected: '', - ), + seed: + () => LibraryState( + sprites: {'player': MiniSprite.empty(1, 1)}, + selected: '', + ), build: LibraryCubit.new, act: (cubit) => cubit.select('player'), - expect: () => [ - LibraryState( - sprites: {'player': MiniSprite.empty(1, 1)}, - selected: 'player', - ), - ], + expect: + () => [ + LibraryState( + sprites: {'player': MiniSprite.empty(1, 1)}, + selected: 'player', + ), + ], ); }); @@ -326,9 +297,7 @@ void main() { [1, 0], [0, 1], ]); - final library = MiniLibrary({ - 'player': sprite, - }); + final library = MiniLibrary({'player': sprite}); setUp(() { stub = GetClipboardStub(); @@ -338,14 +307,15 @@ void main() { 'emits the updated library when there is data', build: () => LibraryCubit(getClipboardData: stub.getClipboardData), setUp: () { - when(() => stub.getClipboardData('text/plain')).thenAnswer( - (_) async => ClipboardData(text: library.toDataString()), - ); + when( + () => stub.getClipboardData('text/plain'), + ).thenAnswer((_) async => ClipboardData(text: library.toDataString())); }, act: (cubit) => cubit.importFromClipboard(), - expect: () => [ - LibraryState(sprites: {'player': sprite}, selected: 'player'), - ], + expect: + () => [ + LibraryState(sprites: {'player': sprite}, selected: 'player'), + ], ); }); diff --git a/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart b/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart index 76577a7..2c1eadc 100644 --- a/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart +++ b/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart @@ -7,21 +7,13 @@ import 'package:mini_sprite_editor/library/library.dart'; void main() { group('LibraryState', () { test('can be instantiated', () { - expect( - LibraryState( - sprites: const {}, - selected: '', - ), - isNotNull, - ); + expect(LibraryState(sprites: const {}, selected: ''), isNotNull); }); test('supports equality', () { expect( LibraryState(sprites: const {}, selected: ''), - equals( - LibraryState(sprites: const {}, selected: ''), - ), + equals(LibraryState(sprites: const {}, selected: '')), ); expect( @@ -99,15 +91,8 @@ void main() { ); expect( - LibraryState.initial().copyWith( - selected: 'player', - ), - equals( - LibraryState( - sprites: const {}, - selected: 'player', - ), - ), + LibraryState.initial().copyWith(selected: 'player'), + equals(LibraryState(sprites: const {}, selected: 'player')), ); }); }); diff --git a/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart index 7d2ebea..2ba29e7 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart @@ -26,10 +26,7 @@ void main() { }); test('can be instantiated', () { - expect( - SpriteCubit(), - isNotNull, - ); + expect(SpriteCubit(), isNotNull); }); test( @@ -152,14 +149,12 @@ void main() { 'emits the updated pixels when there is data', build: () => SpriteCubit(getClipboardData: stub.getClipboardData), setUp: () { - when(() => stub.getClipboardData('text/plain')).thenAnswer( - (_) async => ClipboardData(text: sprite.toDataString()), - ); + when( + () => stub.getClipboardData('text/plain'), + ).thenAnswer((_) async => ClipboardData(text: sprite.toDataString())); }, act: (cubit) => cubit.importFromClipboard(), - expect: () => [ - SpriteState.initial().copyWith(pixels: sprite.pixels), - ], + expect: () => [SpriteState.initial().copyWith(pixels: sprite.pixels)], ); }); @@ -168,9 +163,12 @@ void main() { build: SpriteCubit.new, seed: () => SpriteState.initial().copyWith(cursorPosition: Offset.zero), act: (cubit) => cubit.cursorLeft(), - expect: () => [ - SpriteState.initial().copyWith(cursorPosition: const Offset(-1, -1)), - ], + expect: + () => [ + SpriteState.initial().copyWith( + cursorPosition: const Offset(-1, -1), + ), + ], ); group('cursorHover', () { @@ -185,27 +183,27 @@ void main() { 'change cursor position on cursorHover', build: SpriteCubit.new, seed: () => state, - act: (cubit) => cubit.cursorHover( - const Offset(30, 30), - 25, - SpriteTool.brush, - 1, - ), - expect: () => [ - state.copyWith(cursorPosition: const Offset(1, 1)), - ], + act: + (cubit) => cubit.cursorHover( + const Offset(30, 30), + 25, + SpriteTool.brush, + 1, + ), + expect: () => [state.copyWith(cursorPosition: const Offset(1, 1))], ); blocTest( "doesn't change the position when the position is the same", build: SpriteCubit.new, seed: () => state.copyWith(cursorPosition: const Offset(1, 1)), - act: (cubit) => cubit.cursorHover( - const Offset(30, 30), - 25, - SpriteTool.brush, - 1, - ), + act: + (cubit) => cubit.cursorHover( + const Offset(30, 30), + 25, + SpriteTool.brush, + 1, + ), expect: () => [], ); }); @@ -222,17 +220,10 @@ void main() { 'change cursor position on cursorDown and active the tool', build: SpriteCubit.new, seed: () => state, - act: (cubit) => cubit.cursorDown( - const Offset(30, 30), - 25, - SpriteTool.brush, - 1, - ), - expect: () => [ - state.copyWith( - cursorPosition: const Offset(1, 1), - ), - ], + act: + (cubit) => + cubit.cursorDown(const Offset(30, 30), 25, SpriteTool.brush, 1), + expect: () => [state.copyWith(cursorPosition: const Offset(1, 1))], ); }); @@ -272,54 +263,57 @@ void main() { 'paints the board', build: SpriteCubit.new, seed: () => emptyState, - act: (cubit) => cubit - ..cursorDown(Offset.zero, 25, SpriteTool.brush, 1) - ..cursorHover(const Offset(30, 0), 25, SpriteTool.brush, 1) - ..cursorHover(const Offset(60, 0), 25, SpriteTool.brush, 1) - ..cursorUp(SpriteTool.brush, 1), - expect: () => [ - emptyState.copyWith(cursorPosition: Offset.zero), - emptyState.copyWith( - cursorPosition: Offset.zero, - pixels: [ - [1, -1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [1, -1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [1, 1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [1, 1, -1], - [-1, -1, -1], - [-1, -1, -1], - ], - ), - emptyState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [1, 1, 1], - [-1, -1, -1], - [-1, -1, -1], + act: + (cubit) => + cubit + ..cursorDown(Offset.zero, 25, SpriteTool.brush, 1) + ..cursorHover(const Offset(30, 0), 25, SpriteTool.brush, 1) + ..cursorHover(const Offset(60, 0), 25, SpriteTool.brush, 1) + ..cursorUp(SpriteTool.brush, 1), + expect: + () => [ + emptyState.copyWith(cursorPosition: Offset.zero), + emptyState.copyWith( + cursorPosition: Offset.zero, + pixels: [ + [1, -1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [1, -1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [1, 1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [1, 1, -1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), + emptyState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [1, 1, 1], + [-1, -1, -1], + [-1, -1, -1], + ], + ), ], - ), - ], ); }); @@ -328,56 +322,57 @@ void main() { 'clears the board', build: SpriteCubit.new, seed: () => filledState, - act: (cubit) => cubit - ..cursorDown(Offset.zero, 25, SpriteTool.eraser, 0) - ..cursorHover(const Offset(30, 0), 25, SpriteTool.eraser, 0) - ..cursorHover(const Offset(60, 0), 25, SpriteTool.eraser, 0) - ..cursorUp(SpriteTool.eraser, 0), - expect: () => [ - filledState.copyWith( - cursorPosition: Offset.zero, - ), - filledState.copyWith( - cursorPosition: Offset.zero, - pixels: [ - [-1, 1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [-1, 1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(1, 0), - pixels: [ - [-1, -1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [-1, -1, 1], - [1, 1, 1], - [1, 1, 1], - ], - ), - filledState.copyWith( - cursorPosition: const Offset(2, 0), - pixels: [ - [-1, -1, -1], - [1, 1, 1], - [1, 1, 1], + act: + (cubit) => + cubit + ..cursorDown(Offset.zero, 25, SpriteTool.eraser, 0) + ..cursorHover(const Offset(30, 0), 25, SpriteTool.eraser, 0) + ..cursorHover(const Offset(60, 0), 25, SpriteTool.eraser, 0) + ..cursorUp(SpriteTool.eraser, 0), + expect: + () => [ + filledState.copyWith(cursorPosition: Offset.zero), + filledState.copyWith( + cursorPosition: Offset.zero, + pixels: [ + [-1, 1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [-1, 1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(1, 0), + pixels: [ + [-1, -1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [-1, -1, 1], + [1, 1, 1], + [1, 1, 1], + ], + ), + filledState.copyWith( + cursorPosition: const Offset(2, 0), + pixels: [ + [-1, -1, -1], + [1, 1, 1], + [1, 1, 1], + ], + ), ], - ), - ], ); }); @@ -386,21 +381,14 @@ void main() { 'fills the board', seed: () => emptyState, build: SpriteCubit.new, - act: (cubit) => cubit - ..cursorDown( - Offset.zero, - 25, - SpriteTool.bucket, - 1, - ), - expect: () => [ - emptyState.copyWith( - cursorPosition: Offset.zero, - ), - filledState.copyWith( - cursorPosition: Offset.zero, - ), - ], + act: + (cubit) => + cubit..cursorDown(Offset.zero, 25, SpriteTool.bucket, 1), + expect: + () => [ + emptyState.copyWith(cursorPosition: Offset.zero), + filledState.copyWith(cursorPosition: Offset.zero), + ], ); }); @@ -409,21 +397,15 @@ void main() { 'clears the board', build: SpriteCubit.new, seed: () => filledState, - act: (cubit) => cubit - ..cursorDown( - Offset.zero, - 25, - SpriteTool.bucketEraser, - 0, - ), - expect: () => [ - filledState.copyWith( - cursorPosition: Offset.zero, - ), - emptyState.copyWith( - cursorPosition: Offset.zero, - ), - ], + act: + (cubit) => + cubit + ..cursorDown(Offset.zero, 25, SpriteTool.bucketEraser, 0), + expect: + () => [ + filledState.copyWith(cursorPosition: Offset.zero), + emptyState.copyWith(cursorPosition: Offset.zero), + ], ); }); }); @@ -433,72 +415,79 @@ void main() { 'resizes the sprite', build: SpriteCubit.new, act: (cubit) => cubit..setSize(2, 2), - expect: () => [ - SpriteState.initial().copyWith( - pixels: [ - [-1, -1], - [-1, -1], + expect: + () => [ + SpriteState.initial().copyWith( + pixels: [ + [-1, -1], + [-1, -1], + ], + ), ], - ), - ], ); blocTest( 'resizes the sprite keep any data possible', build: SpriteCubit.new, - seed: () => SpriteState.initial().copyWith( - pixels: [ - [1], - [0], - ], - ), + seed: + () => SpriteState.initial().copyWith( + pixels: [ + [1], + [0], + ], + ), act: (cubit) => cubit..setSize(2, 2), - expect: () => [ - SpriteState.initial().copyWith( - pixels: [ - [1, -1], - [0, -1], + expect: + () => [ + SpriteState.initial().copyWith( + pixels: [ + [1, -1], + [0, -1], + ], + ), ], - ), - ], ); }); blocTest( 'clears the sprite', build: SpriteCubit.new, - seed: () => SpriteState.initial().copyWith( - pixels: [ - [1], - [1], - ], - ), + seed: + () => SpriteState.initial().copyWith( + pixels: [ + [1], + [1], + ], + ), act: (cubit) => cubit.clearSprite(), - expect: () => [ - SpriteState.initial().copyWith( - pixels: [ - [-1], - [-1], + expect: + () => [ + SpriteState.initial().copyWith( + pixels: [ + [-1], + [-1], + ], + ), ], - ), - ], ); blocTest( 'sets the sprite', build: SpriteCubit.new, - act: (cubit) => cubit.setSprite([ - [0], - [0], - ]), - expect: () => [ - SpriteState.initial().copyWith( - pixels: [ + act: + (cubit) => cubit.setSprite([ [0], [0], + ]), + expect: + () => [ + SpriteState.initial().copyWith( + pixels: [ + [0], + [0], + ], + ), ], - ), - ], ); test('shouldReplay is 1 when pixels are different', () { diff --git a/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart index 53f5b96..d4e12f6 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart @@ -7,33 +7,19 @@ void main() { group('SpriteState', () { test('can be instantiated', () { expect( - SpriteState( - pixels: const [], - cursorPosition: Offset.zero, - ), + SpriteState(pixels: const [], cursorPosition: Offset.zero), isNotNull, ); }); test('supports equality', () { expect( - SpriteState( - pixels: const [], - cursorPosition: Offset.zero, - ), - equals( - SpriteState( - pixels: const [], - cursorPosition: Offset.zero, - ), - ), + SpriteState(pixels: const [], cursorPosition: Offset.zero), + equals(SpriteState(pixels: const [], cursorPosition: Offset.zero)), ); expect( - SpriteState( - pixels: const [], - cursorPosition: Offset.zero, - ), + SpriteState(pixels: const [], cursorPosition: Offset.zero), isNot( equals( SpriteState( @@ -47,27 +33,16 @@ void main() { ); expect( - SpriteState( - pixels: const [], - cursorPosition: Offset.zero, - ), + SpriteState(pixels: const [], cursorPosition: Offset.zero), isNot( - equals( - SpriteState( - pixels: const [], - cursorPosition: Offset(1, 0), - ), - ), + equals(SpriteState(pixels: const [], cursorPosition: Offset(1, 0))), ), ); }); test('copyWith returns a new isntance with the field updated', () { expect( - SpriteState( - pixels: const [], - cursorPosition: Offset.zero, - ).copyWith( + SpriteState(pixels: const [], cursorPosition: Offset.zero).copyWith( pixels: [ [1], ], @@ -87,12 +62,7 @@ void main() { pixels: const [], cursorPosition: Offset.zero, ).copyWith(cursorPosition: Offset(1, 1)), - equals( - SpriteState( - pixels: const [], - cursorPosition: Offset(1, 1), - ), - ), + equals(SpriteState(pixels: const [], cursorPosition: Offset(1, 1))), ); }); }); diff --git a/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart index 798bd91..f23d074 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart @@ -14,48 +14,35 @@ void main() { }); test('can be instantiated', () { - expect( - ToolsCubit(), - isNotNull, - ); + expect(ToolsCubit(), isNotNull); }); blocTest( 'increase pixel size on zoom in', build: ToolsCubit.new, act: (cubit) => cubit.zoomIn(), - expect: () => [ - ToolsState.initial().copyWith(pixelSize: 35), - ], + expect: () => [ToolsState.initial().copyWith(pixelSize: 35)], ); blocTest( 'decrease pixel size on zoom out', build: ToolsCubit.new, act: (cubit) => cubit.zoomOut(), - expect: () => [ - ToolsState.initial().copyWith(pixelSize: 15), - ], + expect: () => [ToolsState.initial().copyWith(pixelSize: 15)], ); blocTest( 'changes tool on selectTool', build: ToolsCubit.new, act: (cubit) => cubit.selectTool(SpriteTool.bucket), - expect: () => [ - ToolsState.initial().copyWith(tool: SpriteTool.bucket), - ], + expect: () => [ToolsState.initial().copyWith(tool: SpriteTool.bucket)], ); blocTest( 'can toogle the grid', build: ToolsCubit.new, act: (cubit) => cubit.toogleGrid(), - expect: () => [ - ToolsState.initial().copyWith( - gridActive: false, - ), - ], + expect: () => [ToolsState.initial().copyWith(gridActive: false)], ); }); } diff --git a/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart b/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart index 5fdf939..3bba6f7 100644 --- a/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart +++ b/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart @@ -46,49 +46,47 @@ void main() { ); }); - testWidgets( - 'renders correctly when not selected or hovered', - (tester) async { - await tester.pumpApp( - Scaffold( - backgroundColor: Colors.white, - body: PixelCell( - color: Color(0xFFFFFFFF), - hovered: false, - pixelSize: 50, - hasBorder: true, - ), + testWidgets('renders correctly when not selected or hovered', ( + tester, + ) async { + await tester.pumpApp( + Scaffold( + backgroundColor: Colors.white, + body: PixelCell( + color: Color(0xFFFFFFFF), + hovered: false, + pixelSize: 50, + hasBorder: true, ), - ); + ), + ); - await expectLater( - find.byType(Scaffold), - matchesGoldenFile('goldens/pixel_cell_empty.png'), - ); - }, - ); + await expectLater( + find.byType(Scaffold), + matchesGoldenFile('goldens/pixel_cell_empty.png'), + ); + }); - testWidgets( - 'renders correctly when there is no grid active', - (tester) async { - await tester.pumpApp( - Scaffold( - backgroundColor: Colors.white, - body: PixelCell( - color: Color(0xFFFFFFFF), - hovered: false, - pixelSize: 50, - hasBorder: false, - ), + testWidgets('renders correctly when there is no grid active', ( + tester, + ) async { + await tester.pumpApp( + Scaffold( + backgroundColor: Colors.white, + body: PixelCell( + color: Color(0xFFFFFFFF), + hovered: false, + pixelSize: 50, + hasBorder: false, ), - ); + ), + ); - await expectLater( - find.byType(Scaffold), - matchesGoldenFile('goldens/pixel_cell_no_border.png'), - ); - }, - ); + await expectLater( + find.byType(Scaffold), + matchesGoldenFile('goldens/pixel_cell_no_border.png'), + ); + }); testWidgets( 'renders correctly when there is no grid active and is selected', diff --git a/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart b/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart index e13809d..6992009 100644 --- a/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart +++ b/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart @@ -33,18 +33,10 @@ extension TestWidgetText on WidgetTester { await pumpApp( MultiBlocProvider( providers: [ - BlocProvider.value( - value: spriteCubit, - ), - BlocProvider.value( - value: toolsCubit, - ), - BlocProvider.value( - value: configCubit, - ), - BlocProvider.value( - value: libraryCubit, - ), + BlocProvider.value(value: spriteCubit), + BlocProvider.value(value: toolsCubit), + BlocProvider.value(value: configCubit), + BlocProvider.value(value: libraryCubit), ], child: const Scaffold(body: SpriteView()), ), @@ -74,7 +66,7 @@ void main() async { libraryCubit = _MockLibraryCubit(); }); - void _mockState({ + void mockState({ required SpriteState spriteState, required ToolsState toolsState, required ConfigState configState, @@ -103,9 +95,10 @@ void main() async { } testWidgets('emits cursor down on pan start', (tester) async { - when(() => spriteCubit.cursorDown(any(), any(), any(), any())) - .thenAnswer((_) {}); - _mockState( + when( + () => spriteCubit.cursorDown(any(), any(), any(), any()), + ).thenAnswer((_) {}); + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -122,19 +115,15 @@ void main() async { await tester.pump(); verify( - () => spriteCubit.cursorDown( - any(), - any(), - any(), - any(), - ), + () => spriteCubit.cursorDown(any(), any(), any(), any()), ).called(1); }); testWidgets('emits cursor hover on pan update', (tester) async { - when(() => spriteCubit.cursorHover(any(), any(), any(), any())) - .thenAnswer((_) {}); - _mockState( + when( + () => spriteCubit.cursorHover(any(), any(), any(), any()), + ).thenAnswer((_) {}); + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -151,19 +140,15 @@ void main() async { await tester.pump(); verify( - () => spriteCubit.cursorHover( - any(), - any(), - any(), - any(), - ), + () => spriteCubit.cursorHover(any(), any(), any(), any()), ).called(2); }); testWidgets('emits cursor hover on hover', (tester) async { - when(() => spriteCubit.cursorHover(any(), any(), any(), any())) - .thenAnswer((_) {}); - _mockState( + when( + () => spriteCubit.cursorHover(any(), any(), any(), any()), + ).thenAnswer((_) {}); + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -181,20 +166,20 @@ void main() async { addTearDown(gesture.removePointer); await gesture.moveTo( - tester.getCenter( - find.byKey(const Key('board_key')), - ), + tester.getCenter(find.byKey(const Key('board_key'))), ); await tester.pump(); - verify(() => spriteCubit.cursorHover(any(), any(), any(), any())) - .called(1); + verify( + () => spriteCubit.cursorHover(any(), any(), any(), any()), + ).called(1); }); testWidgets('emits cursor up on pan up', (tester) async { - when(() => spriteCubit.cursorHover(any(), any(), any(), any())) - .thenAnswer((_) {}); - _mockState( + when( + () => spriteCubit.cursorHover(any(), any(), any(), any()), + ).thenAnswer((_) {}); + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -215,7 +200,7 @@ void main() async { group('flip', () { testWidgets('flips horizontally', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -235,7 +220,7 @@ void main() async { }); testWidgets('flips vertically', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -257,7 +242,7 @@ void main() async { group('rotate', () { testWidgets('rotates clockwise', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -277,7 +262,7 @@ void main() async { }); testWidgets('rotates counter clockwise', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -299,194 +284,122 @@ void main() async { group('tools', () { group('brush', () { - testWidgets( - 'selects the tool when tapped', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial().copyWith( - tool: SpriteTool.eraser, - ), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('brush_key'))); - await tester.pump(); - verify(() => toolsCubit.selectTool(SpriteTool.brush)).called(1); - }, - ); + testWidgets('selects the tool when tapped', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial().copyWith(tool: SpriteTool.eraser), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('brush_key'))); + await tester.pump(); + verify(() => toolsCubit.selectTool(SpriteTool.brush)).called(1); + }); - testWidgets( - 'does nothing when it is already selected', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('brush_key'))); - await tester.pump(); - verifyNever(() => toolsCubit.selectTool(any())); - }, - ); + testWidgets('does nothing when it is already selected', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('brush_key'))); + await tester.pump(); + verifyNever(() => toolsCubit.selectTool(any())); + }); }); group('eraser', () { - testWidgets( - 'selects the tool when tapped', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('eraser_key'))); - await tester.pump(); - verify(() => toolsCubit.selectTool(SpriteTool.eraser)).called(1); - }, - ); + testWidgets('selects the tool when tapped', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('eraser_key'))); + await tester.pump(); + verify(() => toolsCubit.selectTool(SpriteTool.eraser)).called(1); + }); - testWidgets( - 'does nothing when it is already selected', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial().copyWith( - tool: SpriteTool.eraser, - ), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('eraser_key'))); - await tester.pump(); - verifyNever(() => toolsCubit.selectTool(any())); - }, - ); + testWidgets('does nothing when it is already selected', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial().copyWith(tool: SpriteTool.eraser), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('eraser_key'))); + await tester.pump(); + verifyNever(() => toolsCubit.selectTool(any())); + }); }); group('bucket', () { - testWidgets( - 'selects the tool when tapped', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('bucket_key'))); - await tester.pump(); - verify(() => toolsCubit.selectTool(SpriteTool.bucket)).called(1); - }, - ); + testWidgets('selects the tool when tapped', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('bucket_key'))); + await tester.pump(); + verify(() => toolsCubit.selectTool(SpriteTool.bucket)).called(1); + }); - testWidgets( - 'does nothing when it is already selected', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial().copyWith( - tool: SpriteTool.bucket, - ), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('bucket_key'))); - await tester.pump(); - verifyNever(() => toolsCubit.selectTool(any())); - }, - ); + testWidgets('does nothing when it is already selected', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial().copyWith(tool: SpriteTool.bucket), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('bucket_key'))); + await tester.pump(); + verifyNever(() => toolsCubit.selectTool(any())); + }); }); group('bucket eraser', () { - testWidgets( - 'selects the tool when tapped', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('bucket_eraser_key'))); - await tester.pump(); - verify(() => toolsCubit.selectTool(SpriteTool.bucketEraser)) - .called(1); - }, - ); - - testWidgets( - 'does nothing when it is already selected', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial().copyWith( - tool: SpriteTool.bucketEraser, - ), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('bucket_eraser_key'))); - await tester.pump(); - verifyNever(() => toolsCubit.selectTool(any())); - }, - ); - }); - - testWidgets( - 'zooms in', - (tester) async { - _mockState( + testWidgets('selects the tool when tapped', (tester) async { + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -498,18 +411,19 @@ void main() async { configCubit: configCubit, libraryCubit: libraryCubit, ); - await tester.tap(find.byKey(const Key('zoom_in_key'))); + await tester.tap(find.byKey(const Key('bucket_eraser_key'))); await tester.pump(); - verify(toolsCubit.zoomIn).called(1); - }, - ); + verify( + () => toolsCubit.selectTool(SpriteTool.bucketEraser), + ).called(1); + }); - testWidgets( - 'zooms out', - (tester) async { - _mockState( + testWidgets('does nothing when it is already selected', (tester) async { + mockState( spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), + toolsState: ToolsState.initial().copyWith( + tool: SpriteTool.bucketEraser, + ), configState: ConfigState.initial(), libraryState: LibraryState.initial(), ); @@ -519,58 +433,88 @@ void main() async { configCubit: configCubit, libraryCubit: libraryCubit, ); - await tester.tap(find.byKey(const Key('zoom_out_key'))); + await tester.tap(find.byKey(const Key('bucket_eraser_key'))); await tester.pump(); - verify(toolsCubit.zoomOut).called(1); - }, - ); + verifyNever(() => toolsCubit.selectTool(any())); + }); + }); + + testWidgets('zooms in', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('zoom_in_key'))); + await tester.pump(); + verify(toolsCubit.zoomIn).called(1); + }); + + testWidgets('zooms out', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('zoom_out_key'))); + await tester.pump(); + verify(toolsCubit.zoomOut).called(1); + }); group('copy to clipboard', () { setUp(() { when(spriteCubit.copyToClipboard).thenAnswer((_) async {}); }); - testWidgets( - 'copies to the clipboard', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('copy_to_clipboard_key'))); - await tester.pump(); - verify(spriteCubit.copyToClipboard).called(1); - }, - ); + testWidgets('copies to the clipboard', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('copy_to_clipboard_key'))); + await tester.pump(); + verify(spriteCubit.copyToClipboard).called(1); + }); - testWidgets( - 'shows the success message', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap(find.byKey(const Key('copy_to_clipboard_key'))); - await tester.pump(); - expect(find.byType(SnackBar), findsOneWidget); - }, - ); + testWidgets('shows the success message', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('copy_to_clipboard_key'))); + await tester.pump(); + expect(find.byType(SnackBar), findsOneWidget); + }); }); group('import from clipboard', () { @@ -578,51 +522,41 @@ void main() async { when(spriteCubit.importFromClipboard).thenAnswer((_) async {}); }); - testWidgets( - 'copies to the clipboard', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap( - find.byKey(const Key('import_from_clipboard_key')), - ); - await tester.pump(); - verify(spriteCubit.importFromClipboard).called(1); - }, - ); + testWidgets('copies to the clipboard', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('import_from_clipboard_key'))); + await tester.pump(); + verify(spriteCubit.importFromClipboard).called(1); + }); - testWidgets( - 'shows the success message', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap( - find.byKey(const Key('import_from_clipboard_key')), - ); - await tester.pump(); - expect(find.byType(SnackBar), findsOneWidget); - }, - ); + testWidgets('shows the success message', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('import_from_clipboard_key'))); + await tester.pump(); + expect(find.byType(SnackBar), findsOneWidget); + }); }); group('export to image', () { @@ -636,61 +570,51 @@ void main() async { ).thenAnswer((_) async {}); }); - testWidgets( - 'exports', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap( - find.byKey(const Key('export_to_image')), - ); - await tester.pump(); - verify( - () => spriteCubit.exportToImage( - pixelSize: any(named: 'pixelSize'), - palette: any(named: 'palette'), - backgroundColor: any(named: 'backgroundColor'), - ), - ).called(1); - }, - ); + testWidgets('exports', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('export_to_image'))); + await tester.pump(); + verify( + () => spriteCubit.exportToImage( + pixelSize: any(named: 'pixelSize'), + palette: any(named: 'palette'), + backgroundColor: any(named: 'backgroundColor'), + ), + ).called(1); + }); - testWidgets( - 'shows the success message', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - await tester.tap( - find.byKey(const Key('export_to_image')), - ); - await tester.pump(); - expect(find.byType(SnackBar), findsOneWidget); - }, - ); + testWidgets('shows the success message', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + await tester.tap(find.byKey(const Key('export_to_image'))); + await tester.pump(); + expect(find.byType(SnackBar), findsOneWidget); + }); }); testWidgets('opens the resize dialog', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -710,7 +634,7 @@ void main() async { }); testWidgets('can resize the sprite', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -736,7 +660,7 @@ void main() async { }); testWidgets('does nothing when cancel the resizing', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -761,10 +685,97 @@ void main() async { verifyNever(() => spriteCubit.setSize(any(), any())); }); - testWidgets( - 'opens the confirm dialog when clearing the sprite', - (tester) async { - _mockState( + testWidgets('opens the confirm dialog when clearing the sprite', ( + tester, + ) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + + await tester.tap(find.byKey(const Key('clear_sprite_key'))); + await tester.pumpAndSettle(); + + expect(find.byType(ConfirmDialog), findsOneWidget); + }); + + testWidgets('clears the sprite upon confirmation', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + + await tester.tap(find.byKey(const Key('clear_sprite_key'))); + await tester.pumpAndSettle(); + + await tester.tap(find.text('Confirm')); + await tester.pumpAndSettle(); + + verify(spriteCubit.clearSprite).called(1); + }); + + testWidgets('does nothing when cancel the clearing', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + + await tester.tap(find.byKey(const Key('clear_sprite_key'))); + await tester.pumpAndSettle(); + + await tester.tap(find.text('Cancel')); + await tester.pumpAndSettle(); + + verifyNever(spriteCubit.clearSprite); + }); + + testWidgets('toogles the grid', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); + + await tester.tap(find.byKey(const Key('toogle_grid_key'))); + await tester.pumpAndSettle(); + + verify(toolsCubit.toogleGrid).called(1); + }); + + group('tools shortcuts', () { + testWidgets('b selects brush', (tester) async { + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -777,17 +788,15 @@ void main() async { libraryCubit: libraryCubit, ); - await tester.tap(find.byKey(const Key('clear_sprite_key'))); - await tester.pumpAndSettle(); + await tester.sendKeyDownEvent(LogicalKeyboardKey.keyB); + await tester.sendKeyUpEvent(LogicalKeyboardKey.keyB); + await tester.pump(); - expect(find.byType(ConfirmDialog), findsOneWidget); - }, - ); + verify(() => toolsCubit.selectTool(SpriteTool.brush)).called(1); + }); - testWidgets( - 'clears the sprite upon confirmation', - (tester) async { - _mockState( + testWidgets('e selects eraser', (tester) async { + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -800,20 +809,15 @@ void main() async { libraryCubit: libraryCubit, ); - await tester.tap(find.byKey(const Key('clear_sprite_key'))); - await tester.pumpAndSettle(); - - await tester.tap(find.text('Confirm')); - await tester.pumpAndSettle(); + await tester.sendKeyDownEvent(LogicalKeyboardKey.keyE); + await tester.sendKeyUpEvent(LogicalKeyboardKey.keyE); + await tester.pump(); - verify(spriteCubit.clearSprite).called(1); - }, - ); + verify(() => toolsCubit.selectTool(SpriteTool.eraser)).called(1); + }); - testWidgets( - 'does nothing when cancel the clearing', - (tester) async { - _mockState( + testWidgets('f selects bucket', (tester) async { + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -826,20 +830,15 @@ void main() async { libraryCubit: libraryCubit, ); - await tester.tap(find.byKey(const Key('clear_sprite_key'))); - await tester.pumpAndSettle(); - - await tester.tap(find.text('Cancel')); - await tester.pumpAndSettle(); + await tester.sendKeyDownEvent(LogicalKeyboardKey.keyF); + await tester.sendKeyUpEvent(LogicalKeyboardKey.keyF); + await tester.pump(); - verifyNever(spriteCubit.clearSprite); - }, - ); + verify(() => toolsCubit.selectTool(SpriteTool.bucket)).called(1); + }); - testWidgets( - 'toogles the grid', - (tester) async { - _mockState( + testWidgets('d selects bucket eraser', (tester) async { + mockState( spriteState: SpriteState.initial(), toolsState: ToolsState.initial(), configState: ConfigState.initial(), @@ -852,162 +851,60 @@ void main() async { libraryCubit: libraryCubit, ); - await tester.tap(find.byKey(const Key('toogle_grid_key'))); - await tester.pumpAndSettle(); + await tester.sendKeyDownEvent(LogicalKeyboardKey.keyD); + await tester.sendKeyUpEvent(LogicalKeyboardKey.keyD); + await tester.pump(); - verify(toolsCubit.toogleGrid).called(1); - }, - ); + verify( + () => toolsCubit.selectTool(SpriteTool.bucketEraser), + ).called(1); + }); - group('tools shortcuts', () { - testWidgets( - 'b selects brush', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - - await tester.sendKeyDownEvent(LogicalKeyboardKey.keyB); - await tester.sendKeyUpEvent(LogicalKeyboardKey.keyB); - await tester.pump(); - - verify(() => toolsCubit.selectTool(SpriteTool.brush)).called(1); - }, - ); + testWidgets('meta + z undo', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); - testWidgets( - 'e selects eraser', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - - await tester.sendKeyDownEvent(LogicalKeyboardKey.keyE); - await tester.sendKeyUpEvent(LogicalKeyboardKey.keyE); - await tester.pump(); - - verify(() => toolsCubit.selectTool(SpriteTool.eraser)).called(1); - }, - ); + await tester.sendKeyDownEvent(LogicalKeyboardKey.meta); + await tester.sendKeyDownEvent(LogicalKeyboardKey.keyZ); + await tester.sendKeyUpEvent(LogicalKeyboardKey.meta); + await tester.sendKeyUpEvent(LogicalKeyboardKey.keyZ); + await tester.pump(); - testWidgets( - 'f selects bucket', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - - await tester.sendKeyDownEvent(LogicalKeyboardKey.keyF); - await tester.sendKeyUpEvent(LogicalKeyboardKey.keyF); - await tester.pump(); - - verify(() => toolsCubit.selectTool(SpriteTool.bucket)).called(1); - }, - ); + verify(spriteCubit.undo).called(1); + }); - testWidgets( - 'd selects bucket eraser', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - - await tester.sendKeyDownEvent(LogicalKeyboardKey.keyD); - await tester.sendKeyUpEvent(LogicalKeyboardKey.keyD); - await tester.pump(); - - verify(() => toolsCubit.selectTool(SpriteTool.bucketEraser)) - .called(1); - }, - ); + testWidgets('meta + y undo', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: ToolsState.initial(), + configState: ConfigState.initial(), + libraryState: LibraryState.initial(), + ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + ); - testWidgets( - 'meta + z undo', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - - await tester.sendKeyDownEvent(LogicalKeyboardKey.meta); - await tester.sendKeyDownEvent(LogicalKeyboardKey.keyZ); - await tester.sendKeyUpEvent(LogicalKeyboardKey.meta); - await tester.sendKeyUpEvent(LogicalKeyboardKey.keyZ); - await tester.pump(); - - verify(spriteCubit.undo).called(1); - }, - ); + await tester.sendKeyDownEvent(LogicalKeyboardKey.meta); + await tester.sendKeyDownEvent(LogicalKeyboardKey.keyY); + await tester.sendKeyUpEvent(LogicalKeyboardKey.meta); + await tester.sendKeyUpEvent(LogicalKeyboardKey.keyY); + await tester.pump(); - testWidgets( - 'meta + y undo', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: ToolsState.initial(), - configState: ConfigState.initial(), - libraryState: LibraryState.initial(), - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - ); - - await tester.sendKeyDownEvent(LogicalKeyboardKey.meta); - await tester.sendKeyDownEvent(LogicalKeyboardKey.keyY); - await tester.sendKeyUpEvent(LogicalKeyboardKey.meta); - await tester.sendKeyUpEvent(LogicalKeyboardKey.keyY); - await tester.pump(); - - verify(spriteCubit.redo).called(1); - }, - ); + verify(spriteCubit.redo).called(1); + }); }); }); }); diff --git a/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart b/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart index d551230..4f18cb2 100644 --- a/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart +++ b/packages/mini_sprite_editor/test/workspace/view/workspace_view_test.dart @@ -4,7 +4,6 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mini_sprite/mini_sprite.dart'; import 'package:mini_sprite_editor/config/config.dart'; -import 'package:mini_sprite_editor/hub/hub.dart'; import 'package:mini_sprite_editor/library/library.dart'; import 'package:mini_sprite_editor/map/map.dart'; import 'package:mini_sprite_editor/sprite/cubit/tools_cubit.dart'; @@ -27,8 +26,6 @@ class _MockConfigCubit extends Mock implements ConfigCubit {} class _MockLibraryCubit extends Mock implements LibraryCubit {} -class _MockHubCubit extends MockCubit implements HubCubit {} - extension TestWidgetText on WidgetTester { Future pumpTest({ required SpriteCubit spriteCubit, @@ -37,41 +34,20 @@ extension TestWidgetText on WidgetTester { required LibraryCubit libraryCubit, required WorkspaceCubit workspaceCubit, required MapCubit mapCubit, - required HubCubit hubCubit, List? colors, MiniSprite? sprite, }) async { await pumpApp( MultiBlocProvider( providers: [ - BlocProvider.value( - value: spriteCubit, - ), - BlocProvider.value( - value: toolsCubit, - ), - BlocProvider.value( - value: configCubit, - ), - BlocProvider.value( - value: libraryCubit, - ), - BlocProvider.value( - value: workspaceCubit, - ), - BlocProvider.value( - value: mapCubit, - ), - BlocProvider.value( - value: hubCubit, - ), + BlocProvider.value(value: spriteCubit), + BlocProvider.value(value: toolsCubit), + BlocProvider.value(value: configCubit), + BlocProvider.value(value: libraryCubit), + BlocProvider.value(value: workspaceCubit), + BlocProvider.value(value: mapCubit), ], - child: Scaffold( - body: WorkspaceView( - colorList: colors, - sprite: sprite, - ), - ), + child: Scaffold(body: WorkspaceView(colorList: colors, sprite: sprite)), ), ); } @@ -85,7 +61,6 @@ void main() { late LibraryCubit libraryCubit; late WorkspaceCubit workspaceCubit; late MapCubit mapCubit; - late HubCubit hubCubit; setUpAll(() { registerFallbackValue(SpriteTool.brush); @@ -100,11 +75,9 @@ void main() { libraryCubit = _MockLibraryCubit(); workspaceCubit = _MockWorkspaceCubit(); mapCubit = _MockMapCubit(); - hubCubit = _MockHubCubit(); - when(hubCubit.load).thenAnswer((_) async {}); }); - void _mockState({ + void mockState({ required SpriteState spriteState, required ToolsState toolsState, required ConfigState configState, @@ -142,19 +115,10 @@ void main() { Stream.fromIterable([mapState]), initialState: mapState, ); - const hubState = HubState( - entries: [], - status: HubStateStatus.loaded, - ); - whenListen( - hubCubit, - Stream.fromIterable([hubState]), - initialState: hubState, - ); } testWidgets('renders', (tester) async { - _mockState( + mockState( spriteState: SpriteState.initial(), toolsState: const ToolsState.initial(), configState: const ConfigState.initial(), @@ -170,71 +134,61 @@ void main() { libraryCubit: libraryCubit, workspaceCubit: workspaceCubit, mapCubit: mapCubit, - hubCubit: hubCubit, ); expect(find.byType(WorkspaceView), findsOneWidget); }); - testWidgets( - 'set the colors when receiving a list of colors', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: const ToolsState.initial(), - configState: const ConfigState.initial(), - libraryState: const LibraryState.initial(), - workspaceState: const WorkspaceState.initial(), - mapState: const MapState.initial(), - ); - - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - workspaceCubit: workspaceCubit, - mapCubit: mapCubit, - hubCubit: hubCubit, - colors: [Colors.red, Colors.blue], - ); - - verify(() => configCubit.setColors([Colors.red, Colors.blue])) - .called(1); - }, - ); + testWidgets('set the colors when receiving a list of colors', ( + tester, + ) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: const ToolsState.initial(), + configState: const ConfigState.initial(), + libraryState: const LibraryState.initial(), + workspaceState: const WorkspaceState.initial(), + mapState: const MapState.initial(), + ); - testWidgets( - 'set the sprite when receiving one', - (tester) async { - _mockState( - spriteState: SpriteState.initial(), - toolsState: const ToolsState.initial(), - configState: const ConfigState.initial(), - libraryState: const LibraryState.initial(), - workspaceState: const WorkspaceState.initial(), - mapState: const MapState.initial(), - ); - - const sprite = MiniSprite( - [ - [1], - [0], - ], - ); - await tester.pumpTest( - spriteCubit: spriteCubit, - toolsCubit: toolsCubit, - configCubit: configCubit, - libraryCubit: libraryCubit, - workspaceCubit: workspaceCubit, - mapCubit: mapCubit, - hubCubit: hubCubit, - sprite: sprite, - ); - - verify(() => spriteCubit.setSprite(sprite.pixels)).called(1); - }, - ); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + workspaceCubit: workspaceCubit, + mapCubit: mapCubit, + colors: [Colors.red, Colors.blue], + ); + + verify(() => configCubit.setColors([Colors.red, Colors.blue])).called(1); + }); + + testWidgets('set the sprite when receiving one', (tester) async { + mockState( + spriteState: SpriteState.initial(), + toolsState: const ToolsState.initial(), + configState: const ConfigState.initial(), + libraryState: const LibraryState.initial(), + workspaceState: const WorkspaceState.initial(), + mapState: const MapState.initial(), + ); + + const sprite = MiniSprite([ + [1], + [0], + ]); + await tester.pumpTest( + spriteCubit: spriteCubit, + toolsCubit: toolsCubit, + configCubit: configCubit, + libraryCubit: libraryCubit, + workspaceCubit: workspaceCubit, + mapCubit: mapCubit, + sprite: sprite, + ); + + verify(() => spriteCubit.setSprite(sprite.pixels)).called(1); + }); }); } diff --git a/packages/mini_treasure_quest/lib/main.dart b/packages/mini_treasure_quest/lib/main.dart index 0bd3123..4e3ca5a 100644 --- a/packages/mini_treasure_quest/lib/main.dart +++ b/packages/mini_treasure_quest/lib/main.dart @@ -17,12 +17,10 @@ ThemeData _buildTheme(Brightness brightness) { onSecondary: Colors.black, error: Colors.red, onError: Colors.red, - background: Colors.black, - onBackground: Colors.black, surface: Colors.black87, onSurface: Colors.black87, ), - cardTheme: CardTheme( + cardTheme: CardThemeData( color: Colors.black, elevation: 2, shape: Border.all( From d1d2e59a40e81da990aeb930ffa48907216f3a2e Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Fri, 3 Oct 2025 10:53:35 -0300 Subject: [PATCH 3/5] forgot to remove hub client dep from editor --- packages/mini_sprite_editor/pubspec.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/mini_sprite_editor/pubspec.yaml b/packages/mini_sprite_editor/pubspec.yaml index 017b3d4..21707d1 100644 --- a/packages/mini_sprite_editor/pubspec.yaml +++ b/packages/mini_sprite_editor/pubspec.yaml @@ -22,7 +22,6 @@ dependencies: sdk: flutter hydrated_bloc: ^9.0.0-dev.3 intl: ^0.20.2 - mini_hub_client: 0.0.1 mini_sprite: 0.1.0 path_provider: ^2.0.11 replay_bloc: ^0.2.2 From d4ab8590c966456ceabd2f3caa0b9f5bf425f70b Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Fri, 3 Oct 2025 11:38:31 -0300 Subject: [PATCH 4/5] OMG lint was mad at me --- .../flame_mini_sprite/example/pubspec.yaml | 2 +- packages/mini_sprite/lib/mini_sprite.dart | 2 - .../test/src/mini_library_test.dart | 1 + .../mini_sprite/test/src/mini_map_test.dart | 1 + .../test/src/mini_sprite_test.dart | 1 + .../mini_sprite_editor/lib/app/view/app.dart | 2 +- .../lib/config/view/config_dialog.dart | 2 +- .../lib/library/cubit/library_cubit.dart | 4 +- .../lib/library/view/library_panel.dart | 8 ++- .../lib/map/cubit/map_cubit.dart | 4 +- .../map/map_board/background_component.dart | 8 +-- .../lib/map/map_board/map_board_game.dart | 2 +- .../lib/map/map_board/tile_component.dart | 48 ++++++++--------- .../lib/map/view/map_page.dart | 6 ++- .../lib/sprite/cubit/sprite_cubit.dart | 7 +-- .../lib/sprite/view/page_shortcuts.dart | 2 +- .../lib/sprite/view/pixel_cell.dart | 2 +- .../lib/sprite/view/rename_dialog.dart | 2 +- .../lib/sprite/view/sprite_page.dart | 8 ++- .../lib/workspace/view/panel.dart | 4 +- packages/mini_sprite_editor/pubspec.lock | 51 ++++-------------- packages/mini_sprite_editor/pubspec.yaml | 2 +- .../test/config/cubit/config_cubit_test.dart | 1 + .../test/config/cubit/config_state_test.dart | 1 + .../test/config/view/sprite_config_test.dart | 1 + .../library/cubit/library_cubit_test.dart | 1 + .../library/cubit/library_state_test.dart | 1 + .../test/sprite/cubit/sprite_cubit_test.dart | 1 + .../test/sprite/cubit/sprite_state_test.dart | 1 + .../test/sprite/cubit/tools_cubit_test.dart | 1 + .../test/sprite/cubit/tools_state_test.dart | 1 + .../test/sprite/view/pixel_cell_test.dart | 1 + .../test/sprite/view/sprite_view_test.dart | 1 + .../lib/game/entities/player.dart | 30 +++++------ .../lib/game/entities/tile.dart | 17 +++--- .../lib/game/entities/treasure.dart | 20 +++---- .../mini_treasure_quest/lib/game/game.dart | 14 ++--- .../mini_treasure_quest/lib/game/stages.dart | 3 +- .../lib/game/views/game_view.dart | 4 +- .../lib/game/views/win_dialog.dart | 16 ++++-- packages/mini_treasure_quest/lib/sprites.dart | 1 + .../lib/stages/views/stages_view.dart | 6 ++- .../lib/title/views/title_view.dart | 6 ++- packages/mini_treasure_quest/pubspec.lock | 52 +++++++++---------- packages/mini_treasure_quest/pubspec.yaml | 6 +-- 45 files changed, 184 insertions(+), 171 deletions(-) diff --git a/packages/flame_mini_sprite/example/pubspec.yaml b/packages/flame_mini_sprite/example/pubspec.yaml index 1890da2..6a9c0b0 100644 --- a/packages/flame_mini_sprite/example/pubspec.yaml +++ b/packages/flame_mini_sprite/example/pubspec.yaml @@ -9,7 +9,7 @@ environment: sdk: ">=2.17.6 <3.0.0" dependencies: - flame: ^1.14.0 + flame: ^1.32.0 flame_mini_sprite: path: ../ flutter: diff --git a/packages/mini_sprite/lib/mini_sprite.dart b/packages/mini_sprite/lib/mini_sprite.dart index 54e78ec..7ab58d4 100644 --- a/packages/mini_sprite/lib/mini_sprite.dart +++ b/packages/mini_sprite/lib/mini_sprite.dart @@ -1,5 +1,3 @@ -library mini_sprite; - export 'src/mini_library.dart'; export 'src/mini_map.dart'; export 'src/mini_sprite.dart'; diff --git a/packages/mini_sprite/test/src/mini_library_test.dart b/packages/mini_sprite/test/src/mini_library_test.dart index 0ea983c..305f194 100644 --- a/packages/mini_sprite/test/src/mini_library_test.dart +++ b/packages/mini_sprite/test/src/mini_library_test.dart @@ -1,3 +1,4 @@ +// Ignore for tests // ignore_for_file: prefer_const_constructors import 'package:mini_sprite/mini_sprite.dart'; diff --git a/packages/mini_sprite/test/src/mini_map_test.dart b/packages/mini_sprite/test/src/mini_map_test.dart index d953657..7c2c0ce 100644 --- a/packages/mini_sprite/test/src/mini_map_test.dart +++ b/packages/mini_sprite/test/src/mini_map_test.dart @@ -43,6 +43,7 @@ void main() { 'fromDataString returns the correct instance with width and height', () { const data = + // Ignore for tests // ignore: lines_longer_than_80_chars '{"width":2,"height":2,"objects":[{"x": 0, "y": 0, "data": {"sprite": "player"}}]}'; final instance = MiniMap.fromDataString(data); diff --git a/packages/mini_sprite/test/src/mini_sprite_test.dart b/packages/mini_sprite/test/src/mini_sprite_test.dart index 164621c..b31e4c4 100644 --- a/packages/mini_sprite/test/src/mini_sprite_test.dart +++ b/packages/mini_sprite/test/src/mini_sprite_test.dart @@ -1,3 +1,4 @@ +// Ignore for tests // ignore_for_file: prefer_const_constructors import 'package:mini_sprite/mini_sprite.dart'; diff --git a/packages/mini_sprite_editor/lib/app/view/app.dart b/packages/mini_sprite_editor/lib/app/view/app.dart index fb5b498..6dcf353 100644 --- a/packages/mini_sprite_editor/lib/app/view/app.dart +++ b/packages/mini_sprite_editor/lib/app/view/app.dart @@ -55,7 +55,7 @@ class App extends StatelessWidget { if (spriteRaw != null) { try { sprite = MiniSprite.fromDataString(spriteRaw); - } catch (_) { + } on Exception catch (_) { // ignore on invalid sprite data } } diff --git a/packages/mini_sprite_editor/lib/config/view/config_dialog.dart b/packages/mini_sprite_editor/lib/config/view/config_dialog.dart index a604c10..e560523 100644 --- a/packages/mini_sprite_editor/lib/config/view/config_dialog.dart +++ b/packages/mini_sprite_editor/lib/config/view/config_dialog.dart @@ -291,7 +291,7 @@ class _ColorTile extends StatelessWidget { } class _ColorButton extends StatelessWidget { - const _ColorButton({super.key, required this.color, required this.onPressed}); + const _ColorButton({required this.color, required this.onPressed, super.key}); final Color color; final VoidCallback onPressed; diff --git a/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart b/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart index f204921..95a1c2f 100644 --- a/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart +++ b/packages/mini_sprite_editor/lib/library/cubit/library_cubit.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/services.dart'; @@ -100,6 +102,6 @@ class LibraryCubit extends Cubit { void copyToClipboard() { final library = MiniLibrary(state.sprites); final data = library.toDataString(); - _setClipboardData(ClipboardData(text: data)); + unawaited(_setClipboardData(ClipboardData(text: data))); } } diff --git a/packages/mini_sprite_editor/lib/library/view/library_panel.dart b/packages/mini_sprite_editor/lib/library/view/library_panel.dart index c64f0c3..1f55bd7 100644 --- a/packages/mini_sprite_editor/lib/library/view/library_panel.dart +++ b/packages/mini_sprite_editor/lib/library/view/library_panel.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flame/widgets.dart'; import 'package:flame_mini_sprite/flame_mini_sprite.dart'; import 'package:flutter/material.dart'; @@ -56,7 +58,7 @@ class _LibraryPanelState extends State { return BlocListener( listenWhen: (previous, current) => previous.pixels != current.pixels, listener: (context, state) { - _onSpriteChange(state.pixels); + unawaited(_onSpriteChange(state.pixels)); }, child: Card( child: Column( @@ -102,7 +104,9 @@ class _LibraryPanelState extends State { IconButton( key: const Key('import_library_from_clipboard_key'), onPressed: () { - context.read().importFromClipboard(); + unawaited( + context.read().importFromClipboard(), + ); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(l10n.importSuccess)), ); diff --git a/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart b/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart index 622af5d..bc7e5df 100644 --- a/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart +++ b/packages/mini_sprite_editor/lib/map/cubit/map_cubit.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/services.dart'; @@ -23,7 +25,7 @@ class MapCubit extends Cubit { width: state.mapSize.width.toInt(), height: state.mapSize.height.toInt(), ).toDataString(); - _setClipboardData(ClipboardData(text: data)); + unawaited(_setClipboardData(ClipboardData(text: data))); } Future importFromClipboard() async { diff --git a/packages/mini_sprite_editor/lib/map/map_board/background_component.dart b/packages/mini_sprite_editor/lib/map/map_board/background_component.dart index 4b8aa51..dd7f94d 100644 --- a/packages/mini_sprite_editor/lib/map/map_board/background_component.dart +++ b/packages/mini_sprite_editor/lib/map/map_board/background_component.dart @@ -7,7 +7,7 @@ import 'package:mini_sprite_editor/config/cubit/config_cubit.dart'; import 'package:mini_sprite_editor/map/map.dart'; class BackgroundComponent extends PositionComponent - with HasPaint, HasGameRef { + with HasPaint, HasGameReference { BackgroundComponent(); @override @@ -35,7 +35,7 @@ class BackgroundComponent extends PositionComponent ), ]); - _setColor(gameRef.configCubit.state.backgroundColor); + _setColor(game.configCubit.state.backgroundColor); _setSize(); } @@ -44,8 +44,8 @@ class BackgroundComponent extends PositionComponent } void _setSize() { - final mapUnitSize = gameRef.mapCubit.state.mapSize.toVector2(); - final gridSize = gameRef.configCubit.state.mapGridSize.toDouble(); + final mapUnitSize = game.mapCubit.state.mapSize.toVector2(); + final gridSize = game.configCubit.state.mapGridSize.toDouble(); size = mapUnitSize * gridSize; } diff --git a/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart b/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart index 8820718..5f3d062 100644 --- a/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart +++ b/packages/mini_sprite_editor/lib/map/map_board/map_board_game.dart @@ -104,7 +104,7 @@ class MapBoardGame extends FlameGame with PanDetector { } } - board.addAll(tiles); + unawaited(board.addAll(tiles)); } void center() { diff --git a/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart b/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart index 8aa010c..d088640 100644 --- a/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart +++ b/packages/mini_sprite_editor/lib/map/map_board/tile_component.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:ui'; import 'package:flame/components.dart'; @@ -10,8 +11,8 @@ import 'package:mini_sprite_editor/library/library.dart'; import 'package:mini_sprite_editor/map/map.dart'; class TileComponent extends PositionComponent - with HasPaint, HasGameRef, TapCallbacks { - TileComponent({super.position, super.size, required this.mapPosition}); + with HasPaint, HasGameReference, TapCallbacks { + TileComponent({required this.mapPosition, super.position, super.size}); final MapPosition mapPosition; @@ -30,11 +31,9 @@ class TileComponent extends PositionComponent ..style = PaintingStyle.stroke ..strokeWidth = 1; - _selectedPaint = - Paint()..color = gameRef.primaryColor.withValues(alpha: 0.4); + _selectedPaint = Paint()..color = game.primaryColor.withValues(alpha: 0.4); - _hasDataPaint = - Paint()..color = gameRef.primaryColor.withValues(alpha: 0.8); + _hasDataPaint = Paint()..color = game.primaryColor.withValues(alpha: 0.8); await addAll([ FlameBlocListener( @@ -64,7 +63,7 @@ class TileComponent extends PositionComponent FlameBlocListener( listenWhen: (previous, current) { final myKey = - gameRef.mapCubit.state.objects[mapPosition]?['sprite'] as String?; + game.mapCubit.state.objects[mapPosition]?['sprite'] as String?; return previous.sprites[myKey] != current.sprites[myKey]; }, onNewState: (_) => _updateSprite(), @@ -84,18 +83,20 @@ class TileComponent extends PositionComponent } void _updateSprite() { - final object = gameRef.mapCubit.state.objects[mapPosition]; + final object = game.mapCubit.state.objects[mapPosition]; final spriteId = object?['sprite'] as String?; - final miniSprite = gameRef.libraryCubit.state.sprites[spriteId]; + final miniSprite = game.libraryCubit.state.sprites[spriteId]; if (miniSprite != null) { // TODO(erickzanardo): cache this somehow. - miniSprite - .toSprite( - pixelSize: 1, - palette: gameRef.configCubit.state.colors, - backgroundColor: gameRef.configCubit.state.backgroundColor, - ) - .then((value) => _sprite = value); + unawaited( + miniSprite + .toSprite( + pixelSize: 1, + palette: game.configCubit.state.colors, + backgroundColor: game.configCubit.state.backgroundColor, + ) + .then((value) => _sprite = value), + ); } else { _sprite = null; _hasData = object?.isNotEmpty ?? false; @@ -104,23 +105,20 @@ class TileComponent extends PositionComponent @override void onTapUp(TapUpEvent event) { - final library = gameRef.libraryCubit.state; - final tool = gameRef.mapToolCubit.state.tool; + final library = game.libraryCubit.state; + final tool = game.mapToolCubit.state.tool; switch (tool) { case MapTool.none: - gameRef.mapCubit.setSelected(mapPosition); - break; + game.mapCubit.setSelected(mapPosition); case MapTool.brush: - gameRef.mapCubit.addObject( + game.mapCubit.addObject( mapPosition.x, mapPosition.y, {'sprite': library.selected}, ); - break; case MapTool.eraser: - gameRef.mapCubit.removeObject(mapPosition.x, mapPosition.y); - break; + game.mapCubit.removeObject(mapPosition.x, mapPosition.y); } event.handled = true; } @@ -135,7 +133,7 @@ class TileComponent extends PositionComponent if (_selected) { canvas.drawRect(size.toRect(), _selectedPaint); } - if (gameRef.mapToolCubit.state.gridActive) { + if (game.mapToolCubit.state.gridActive) { canvas.drawRect(size.toRect(), paint); } } diff --git a/packages/mini_sprite_editor/lib/map/view/map_page.dart b/packages/mini_sprite_editor/lib/map/view/map_page.dart index da302f6..f0192c1 100644 --- a/packages/mini_sprite_editor/lib/map/view/map_page.dart +++ b/packages/mini_sprite_editor/lib/map/view/map_page.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flame/game.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -85,7 +87,7 @@ class MapView extends StatelessWidget { IconButton( key: const Key('import_from_clipboard_key'), onPressed: () { - context.read().importFromClipboard(); + unawaited(context.read().importFromClipboard()); ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(l10n.importSuccess))); @@ -96,7 +98,7 @@ class MapView extends StatelessWidget { IconButton( key: const Key('config_key'), onPressed: () { - ConfigDialog.show(context); + unawaited(ConfigDialog.show(context)); }, tooltip: l10n.configurations, icon: const Icon(Icons.settings), diff --git a/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart b/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart index 8581497..f59b648 100644 --- a/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart +++ b/packages/mini_sprite_editor/lib/sprite/cubit/sprite_cubit.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:ui'; import 'package:collection/collection.dart'; @@ -27,7 +28,7 @@ class SpriteCubit extends ReplayCubit { void copyToClipboard() { final sprite = MiniSprite(state.pixels); final data = sprite.toDataString(); - _setClipboardData(ClipboardData(text: data)); + unawaited(_setClipboardData(ClipboardData(text: data))); } void setSprite(List> pixels) { @@ -179,22 +180,18 @@ class SpriteCubit extends ReplayCubit { if (toolActive) { _setPixel(selectedColor); } - break; case SpriteTool.eraser: if (toolActive) { _setPixel(-1); } - break; case SpriteTool.bucket: if (toolActive) { _floodFill(selectedColor); } - break; case SpriteTool.bucketEraser: if (toolActive) { _floodFill(-1); } - break; } } diff --git a/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart b/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart index 0c7364a..9560cfb 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/page_shortcuts.dart @@ -19,7 +19,7 @@ class RedoIntent extends Intent { } class PageShortcuts extends StatelessWidget { - const PageShortcuts({super.key, required this.child}); + const PageShortcuts({required this.child, super.key}); final Widget child; diff --git a/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart b/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart index 9c57e40..05fe280 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/pixel_cell.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; class PixelCell extends StatelessWidget { const PixelCell({ - super.key, required this.color, required this.hovered, required this.pixelSize, required this.hasBorder, + super.key, }); final bool hovered; diff --git a/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart b/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart index dc5326d..d74855d 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/rename_dialog.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:mini_sprite_editor/l10n/l10n.dart'; class RenameDialog extends StatefulWidget { - const RenameDialog({super.key, required this.name}); + const RenameDialog({required this.name, super.key}); final String name; diff --git a/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart b/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart index 8a38135..aee43a8 100644 --- a/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart +++ b/packages/mini_sprite_editor/lib/sprite/view/sprite_page.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:mini_sprite_editor/config/config.dart'; @@ -221,7 +223,9 @@ class SpriteView extends StatelessWidget { IconButton( key: const Key('import_from_clipboard_key'), onPressed: () { - context.read().importFromClipboard(); + unawaited( + context.read().importFromClipboard(), + ); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(l10n.importSuccess)), ); @@ -248,7 +252,7 @@ class SpriteView extends StatelessWidget { IconButton( key: const Key('config_key'), onPressed: () { - ConfigDialog.show(context); + unawaited(ConfigDialog.show(context)); }, tooltip: l10n.configurations, icon: const Icon(Icons.settings), diff --git a/packages/mini_sprite_editor/lib/workspace/view/panel.dart b/packages/mini_sprite_editor/lib/workspace/view/panel.dart index 85644eb..ae65794 100644 --- a/packages/mini_sprite_editor/lib/workspace/view/panel.dart +++ b/packages/mini_sprite_editor/lib/workspace/view/panel.dart @@ -6,7 +6,9 @@ import 'package:mini_sprite_editor/sprite/sprite.dart'; import 'package:mini_sprite_editor/workspace/workspace.dart'; class Panel extends StatefulWidget { - const Panel({super.key, required this.panel, required this.isActive}); + const Panel({ + required this.panel, required this.isActive, super.key, + }); final WorkspacePanel panel; final bool isActive; diff --git a/packages/mini_sprite_editor/pubspec.lock b/packages/mini_sprite_editor/pubspec.lock index c782aa5..c951ee3 100644 --- a/packages/mini_sprite_editor/pubspec.lock +++ b/packages/mini_sprite_editor/pubspec.lock @@ -129,22 +129,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - dio: - dependency: transitive - description: - name: dio - sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9 - url: "https://pub.dev" - source: hosted - version: "5.9.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78" - url: "https://pub.dev" - source: hosted - version: "2.1.1" equatable: dependency: "direct main" description: @@ -245,18 +229,18 @@ packages: dependency: "direct main" description: name: flame - sha256: "61c42b966a6b1f44ee093194e6701d45b14fdda1859c14fe68a39489454bfbd4" + sha256: "86f63943349ef4d891fd1988ccd9fa3d27952eb8d9eb17b774a64e78cd62aaa6" url: "https://pub.dev" source: hosted - version: "1.14.0" + version: "1.32.0" flame_bloc: dependency: "direct main" description: name: flame_bloc - sha256: "47a083bc4446e42f0b5bbbb9100564c1ee86b90c67102093f3749989e9ef721e" + sha256: b73f5f931ea3209c7d387660ffd543b0bb4b4c1ad84a22516b1d900d487eedde url: "https://pub.dev" source: hosted - version: "1.10.9" + version: "1.12.17" flame_mini_sprite: dependency: "direct main" description: @@ -380,14 +364,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.2" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" leak_tracker: dependency: transitive description: @@ -452,13 +428,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" - mini_hub_client: - dependency: "direct main" - description: - path: "../mini_hub_client" - relative: true - source: path - version: "0.0.1" mini_sprite: dependency: "direct main" description: @@ -494,10 +463,10 @@ packages: dependency: transitive description: name: ordered_set - sha256: "1bfaaaee0419e43ecc9eaebd410eb4bd5039657b72011de75ff3e2915c9aac60" + sha256: d6c1d053a533e84931a388cbf03f1ad21a0543bf06c7a281859d3ffacd8e15f2 url: "https://pub.dev" source: hosted - version: "5.0.3" + version: "8.0.0" package_config: dependency: transitive description: @@ -755,10 +724,10 @@ packages: dependency: "direct dev" description: name: very_good_analysis - sha256: "4815adc7ded57657038d2bb2a7f332c50e3c8152f7d3c6acf8f6b7c0cc81e5e2" + sha256: "96245839dbcc45dfab1af5fa551603b5c7a282028a64746c19c547d21a7f1e3a" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "10.0.0" vm_service: dependency: transitive description: @@ -824,5 +793,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.8.0 <4.0.0" - flutter: ">=3.29.0" + dart: ">=3.9.0 <4.0.0" + flutter: ">=3.32.0" diff --git a/packages/mini_sprite_editor/pubspec.yaml b/packages/mini_sprite_editor/pubspec.yaml index 21707d1..771ce74 100644 --- a/packages/mini_sprite_editor/pubspec.yaml +++ b/packages/mini_sprite_editor/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: collection: ^1.16.0 equatable: ^2.0.3 file_selector: ^0.9.0 - flame: 1.30.1 + flame: 1.32.0 flame_bloc: ^1.12.15 flame_mini_sprite: 0.0.2 flutter: diff --git a/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart b/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart index f68ae08..3f488d1 100644 --- a/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart +++ b/packages/mini_sprite_editor/test/config/cubit/config_cubit_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:bloc_test/bloc_test.dart'; diff --git a/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart b/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart index e0e76e8..440794c 100644 --- a/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart +++ b/packages/mini_sprite_editor/test/config/cubit/config_state_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:flutter/material.dart'; diff --git a/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart b/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart index 26578c4..9ed4242 100644 --- a/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart +++ b/packages/mini_sprite_editor/test/config/view/sprite_config_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:bloc_test/bloc_test.dart'; diff --git a/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart b/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart index 02a7588..e266c51 100644 --- a/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart +++ b/packages/mini_sprite_editor/test/library/cubit/library_cubit_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors, one_member_abstracts import 'package:bloc_test/bloc_test.dart'; diff --git a/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart b/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart index 2c1eadc..2e07304 100644 --- a/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart +++ b/packages/mini_sprite_editor/test/library/cubit/library_state_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart index 2ba29e7..4eaf772 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/sprite_cubit_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: one_member_abstracts, prefer_const_constructors import 'package:bloc_test/bloc_test.dart'; diff --git a/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart index d4e12f6..d865b57 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/sprite_state_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart index f23d074..37d8905 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/tools_cubit_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:bloc_test/bloc_test.dart'; diff --git a/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart b/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart index 801eac0..8a99218 100644 --- a/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart +++ b/packages/mini_sprite_editor/test/sprite/cubit/tools_state_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:flutter_test/flutter_test.dart'; diff --git a/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart b/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart index 3bba6f7..ea34f10 100644 --- a/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart +++ b/packages/mini_sprite_editor/test/sprite/view/pixel_cell_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:flutter/material.dart'; diff --git a/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart b/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart index 6992009..23d4ac0 100644 --- a/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart +++ b/packages/mini_sprite_editor/test/sprite/view/sprite_view_test.dart @@ -1,3 +1,4 @@ +// Ignoring for tests // ignore_for_file: prefer_const_constructors import 'package:bloc_test/bloc_test.dart'; diff --git a/packages/mini_treasure_quest/lib/game/entities/player.dart b/packages/mini_treasure_quest/lib/game/entities/player.dart index a254b0a..09ddb9c 100644 --- a/packages/mini_treasure_quest/lib/game/entities/player.dart +++ b/packages/mini_treasure_quest/lib/game/entities/player.dart @@ -1,10 +1,10 @@ import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame_forge2d/flame_forge2d.dart' as forge; import 'package:flutter/services.dart'; import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/mini_treasure_quest.dart'; -class Player extends BodyComponent { +class Player extends forge.BodyComponent { Player({ required this.initialPosition, }); @@ -43,16 +43,16 @@ class Player extends BodyComponent { ); } - bool _jump(_) { + bool _jump(Set pressedKeys) { if (body.linearVelocity.y == 0) { - body.applyLinearImpulse(Vector2(0, -jumpForce)); + body.applyLinearImpulse(forge.Vector2(0, -jumpForce)); } return true; } - bool _startMovingLeft(_) { + bool _startMovingLeft(Set pressedKeys) { if (body.linearVelocity.x > -speed) { - body.applyLinearImpulse(Vector2(-speed, 0)); + body.applyLinearImpulse(forge.Vector2(-speed, 0)); } if (!sprite.isFlippedHorizontally) { sprite.flipHorizontally(); @@ -60,9 +60,9 @@ class Player extends BodyComponent { return true; } - bool _startMovingRight(_) { + bool _startMovingRight(Set pressedKeys) { if (body.linearVelocity.x < speed) { - body.applyLinearImpulse(Vector2(speed, 0)); + body.applyLinearImpulse(forge.Vector2(speed, 0)); } if (sprite.isFlippedHorizontally) { sprite.flipHorizontally(); @@ -70,22 +70,22 @@ class Player extends BodyComponent { return true; } - bool _stopMoving(_) { - body.applyLinearImpulse(Vector2(-body.linearVelocity.x, 0)); + bool _stopMoving(Set pressedKeys) { + body.applyLinearImpulse(forge.Vector2(-body.linearVelocity.x, 0)); return true; } @override - Body createBody() { + forge.Body createBody() { renderBody = false; - final bodyDef = BodyDef( + final bodyDef = forge.BodyDef( userData: this, - type: BodyType.dynamic, - )..position = initialPosition; + type: forge.BodyType.dynamic, + )..position = forge.Vector2(initialPosition.x, initialPosition.y); return world.createBody(bodyDef) ..createFixtureFromShape( - PolygonShape()..setAsBoxXY(tileSize / 2, tileSize / 2), + forge.PolygonShape()..setAsBoxXY(tileSize / 2, tileSize / 2), ); } } diff --git a/packages/mini_treasure_quest/lib/game/entities/tile.dart b/packages/mini_treasure_quest/lib/game/entities/tile.dart index 4525dba..201de6d 100644 --- a/packages/mini_treasure_quest/lib/game/entities/tile.dart +++ b/packages/mini_treasure_quest/lib/game/entities/tile.dart @@ -1,9 +1,9 @@ import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame_forge2d/flame_forge2d.dart' as forge; import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/mini_treasure_quest.dart'; -class Tile extends BodyComponent { +class Tile extends forge.BodyComponent { Tile({ required this.initialPosition, required this.sprite, @@ -26,16 +26,19 @@ class Tile extends BodyComponent { } @override - Body createBody() { + forge.Body createBody() { renderBody = false; - final bodyDef = BodyDef( + final bodyDef = forge.BodyDef( userData: this, - type: BodyType.kinematic, - )..position = initialPosition; + type: forge.BodyType.kinematic, + )..position = forge.Vector2( + initialPosition.x, + initialPosition.y, + ); return world.createBody(bodyDef) ..createFixtureFromShape( - PolygonShape() + forge.PolygonShape() ..setAsBoxXY( (tileSize / 2) * 0.8, (tileSize / 2) * 0.8, diff --git a/packages/mini_treasure_quest/lib/game/entities/treasure.dart b/packages/mini_treasure_quest/lib/game/entities/treasure.dart index d550ac1..dde2c41 100644 --- a/packages/mini_treasure_quest/lib/game/entities/treasure.dart +++ b/packages/mini_treasure_quest/lib/game/entities/treasure.dart @@ -1,11 +1,11 @@ import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame_forge2d/flame_forge2d.dart' as forge; import 'package:mini_treasure_quest/assets.dart'; import 'package:mini_treasure_quest/game/entities/entities.dart'; import 'package:mini_treasure_quest/mini_treasure_quest.dart'; -class Treasure extends BodyComponent - with ContactCallbacks, HasGameRef { +class Treasure extends forge.BodyComponent + with forge.ContactCallbacks { Treasure({required this.initialPosition}); final Vector2 initialPosition; @@ -24,19 +24,19 @@ class Treasure extends BodyComponent } @override - Body createBody() { + forge.Body createBody() { renderBody = false; - final bodyDef = BodyDef( + final bodyDef = forge.BodyDef( userData: this, - type: BodyType.kinematic, - )..position = initialPosition; + type: forge.BodyType.kinematic, + )..position = forge.Vector2(initialPosition.x, initialPosition.y); final body = world.createBody(bodyDef); body .createFixtureFromShape( - PolygonShape() + forge.PolygonShape() ..setAsBoxXY( tileSize / 2, tileSize / 2, @@ -48,9 +48,9 @@ class Treasure extends BodyComponent } @override - void beginContact(Object other, Contact contact) { + void beginContact(Object other, forge.Contact contact) { if (other is Player) { - gameRef.win(); + game.win(); } } } diff --git a/packages/mini_treasure_quest/lib/game/game.dart b/packages/mini_treasure_quest/lib/game/game.dart index 5ee94a2..b7c3f15 100644 --- a/packages/mini_treasure_quest/lib/game/game.dart +++ b/packages/mini_treasure_quest/lib/game/game.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:math'; import 'package:flame/input.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame_forge2d/flame_forge2d.dart' hide Vector2; import 'package:flutter/material.dart'; import 'package:mini_sprite/mini_sprite.dart'; import 'package:mini_treasure_quest/game/entities/entities.dart'; @@ -44,11 +44,13 @@ class MiniTreasureQuest extends Forge2DGame with HasKeyboardHandlerComponents { void win() { world.children.whereType().first.removeFromParent(); - showDialog( - context: buildContext!, - builder: (context) { - return WinDialog(stage: stage); - }, + unawaited( + showDialog( + context: buildContext!, + builder: (context) { + return WinDialog(stage: stage); + }, + ), ); } } diff --git a/packages/mini_treasure_quest/lib/game/stages.dart b/packages/mini_treasure_quest/lib/game/stages.dart index e9b95e7..7dcb4ee 100644 --- a/packages/mini_treasure_quest/lib/game/stages.dart +++ b/packages/mini_treasure_quest/lib/game/stages.dart @@ -1,4 +1,5 @@ -// ignore_for_file: leading_newlines_in_multiline_strings, lines_longer_than_80_chars +// Not relevant for the example +// ignore_for_file: lines_longer_than_80_chars const stages = [ '[{"x":0,"y":1,"data":{"sprite":"SIMPLE_GROUND"}},{"x":1,"y":1,"data":{"sprite":"SIMPLE_GROUND"}},{"x":2,"y":1,"data":{"sprite":"SIMPLE_GROUND"}},{"x":3,"y":1,"data":{"sprite":"SIMPLE_GROUND"}},{"x":0,"y":0,"data":{"sprite":"PLAYER"}},{"x":3,"y":0,"data":{"sprite":"CHEST"}}]', diff --git a/packages/mini_treasure_quest/lib/game/views/game_view.dart b/packages/mini_treasure_quest/lib/game/views/game_view.dart index 132b92c..78f1279 100644 --- a/packages/mini_treasure_quest/lib/game/views/game_view.dart +++ b/packages/mini_treasure_quest/lib/game/views/game_view.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:mini_treasure_quest/game/game.dart'; class GamePage extends StatelessWidget { - const GamePage({super.key, required this.stage}); + const GamePage({required this.stage, super.key}); final int stage; @@ -22,7 +22,7 @@ class GamePage extends StatelessWidget { } class GameView extends StatelessWidget { - const GameView({super.key, required this.stage}); + const GameView({required this.stage, super.key}); final int stage; diff --git a/packages/mini_treasure_quest/lib/game/views/win_dialog.dart b/packages/mini_treasure_quest/lib/game/views/win_dialog.dart index e36cf57..9827b99 100644 --- a/packages/mini_treasure_quest/lib/game/views/win_dialog.dart +++ b/packages/mini_treasure_quest/lib/game/views/win_dialog.dart @@ -1,10 +1,12 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:mini_treasure_quest/game/stages.dart'; import 'package:mini_treasure_quest/game/views/game_view.dart'; import 'package:mini_treasure_quest/stages/stages.dart'; class WinDialog extends StatelessWidget { - const WinDialog({super.key, required this.stage}); + const WinDialog({required this.stage, super.key}); final int stage; @@ -28,8 +30,10 @@ class WinDialog extends StatelessWidget { ElevatedButton( autofocus: stage + 1 == stages.length, onPressed: () { - Navigator.of(context).pushReplacement( - StagesPage.route(), + unawaited( + Navigator.of(context).pushReplacement( + StagesPage.route(), + ), ); }, child: const Text('Stages'), @@ -38,8 +42,10 @@ class WinDialog extends StatelessWidget { ElevatedButton( autofocus: true, onPressed: () { - Navigator.of(context).pushReplacement( - GamePage.route(stage + 1), + unawaited( + Navigator.of(context).pushReplacement( + GamePage.route(stage + 1), + ), ); }, child: const Text('Next'), diff --git a/packages/mini_treasure_quest/lib/sprites.dart b/packages/mini_treasure_quest/lib/sprites.dart index bcdbfc1..4dbe91b 100644 --- a/packages/mini_treasure_quest/lib/sprites.dart +++ b/packages/mini_treasure_quest/lib/sprites.dart @@ -1,3 +1,4 @@ +// Not relevant here // ignore_for_file: lines_longer_than_80_chars, leading_newlines_in_multiline_strings const library = diff --git a/packages/mini_treasure_quest/lib/stages/views/stages_view.dart b/packages/mini_treasure_quest/lib/stages/views/stages_view.dart index a8b9422..4619a05 100644 --- a/packages/mini_treasure_quest/lib/stages/views/stages_view.dart +++ b/packages/mini_treasure_quest/lib/stages/views/stages_view.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:mini_treasure_quest/game/stages.dart'; import 'package:mini_treasure_quest/game/views/view.dart'; @@ -30,7 +32,9 @@ class StagesView extends StatelessWidget { for (var i = 0; i < stages.length; i++) ElevatedButton( onPressed: () { - Navigator.of(context).push(GamePage.route(i)); + unawaited( + Navigator.of(context).push(GamePage.route(i)), + ); }, autofocus: i == stages.length - 1, child: SizedBox( diff --git a/packages/mini_treasure_quest/lib/title/views/title_view.dart b/packages/mini_treasure_quest/lib/title/views/title_view.dart index e142ed4..9e94973 100644 --- a/packages/mini_treasure_quest/lib/title/views/title_view.dart +++ b/packages/mini_treasure_quest/lib/title/views/title_view.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flame/widgets.dart'; import 'package:flutter/material.dart'; import 'package:mini_treasure_quest/assets.dart'; @@ -47,7 +49,9 @@ class TitleView extends StatelessWidget { ElevatedButton( autofocus: true, onPressed: () { - Navigator.of(context).push(StagesPage.route()); + unawaited( + Navigator.of(context).push(StagesPage.route()), + ); }, child: const Text('Play'), ), diff --git a/packages/mini_treasure_quest/pubspec.lock b/packages/mini_treasure_quest/pubspec.lock index 86b2d49..61d48be 100644 --- a/packages/mini_treasure_quest/pubspec.lock +++ b/packages/mini_treasure_quest/pubspec.lock @@ -85,10 +85,10 @@ packages: dependency: "direct main" description: name: flame - sha256: "61c42b966a6b1f44ee093194e6701d45b14fdda1859c14fe68a39489454bfbd4" + sha256: "86f63943349ef4d891fd1988ccd9fa3d27952eb8d9eb17b774a64e78cd62aaa6" url: "https://pub.dev" source: hosted - version: "1.14.0" + version: "1.32.0" flame_behaviors: dependency: "direct main" description: @@ -101,10 +101,10 @@ packages: dependency: "direct main" description: name: flame_forge2d - sha256: "9914d836dfb0cf642300a1640d82488707ab4d230cbb6aa6e14228c9d4de3379" + sha256: "861161681cfceb285fc91e436a591129c900611c2111820b20e5f6240d0d0dd6" url: "https://pub.dev" source: hosted - version: "0.16.0+4" + version: "0.19.2" flame_mini_sprite: dependency: "direct main" description: @@ -134,10 +134,10 @@ packages: dependency: transitive description: name: forge2d - sha256: a16bee7a5bdf3538ef4a51ae9b6befb39872d3518b653fc7b8756ef49f7fcf96 + sha256: "747eab7e492975907d17ca1ed565eeb6342c421f26cfb2b2d6f5598dd57d6d7c" url: "https://pub.dev" source: hosted - version: "0.12.2" + version: "0.14.2" google_fonts: dependency: "direct main" description: @@ -150,10 +150,10 @@ packages: dependency: transitive description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.5.0" http_parser: dependency: transitive description: @@ -166,26 +166,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "10.0.9" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" lints: dependency: transitive description: @@ -229,10 +229,10 @@ packages: dependency: transitive description: name: ordered_set - sha256: "3858c7d84619edfab87c3e367584648020903187edb70b52697646f4b2a93022" + sha256: d6c1d053a533e84931a388cbf03f1ad21a0543bf06c7a281859d3ffacd8e15f2 url: "https://pub.dev" source: hosted - version: "5.0.2" + version: "8.0.0" path: dependency: transitive description: @@ -370,10 +370,10 @@ packages: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.6" typed_data: dependency: transitive description: @@ -386,18 +386,18 @@ packages: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" very_good_analysis: dependency: "direct dev" description: name: very_good_analysis - sha256: "396bf7de205dd5b03eb164d04692de3e8335c11a7ddb2f63153de8dfcee921d9" + sha256: "96245839dbcc45dfab1af5fa551603b5c7a282028a64746c19c547d21a7f1e3a" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "10.0.0" vm_service: dependency: transitive description: @@ -410,10 +410,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "1.1.1" win32: dependency: transitive description: @@ -431,5 +431,5 @@ packages: source: hosted version: "0.2.0+1" sdks: - dart: ">=3.7.0-0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" + dart: ">=3.9.0 <4.0.0" + flutter: ">=3.32.0" diff --git a/packages/mini_treasure_quest/pubspec.yaml b/packages/mini_treasure_quest/pubspec.yaml index 18b93f6..9d55474 100644 --- a/packages/mini_treasure_quest/pubspec.yaml +++ b/packages/mini_treasure_quest/pubspec.yaml @@ -9,9 +9,9 @@ environment: sdk: ">=2.17.3 <3.0.0" dependencies: - flame: 1.14.0 + flame: 1.32.0 flame_behaviors: ^0.1.1 - flame_forge2d: ^0.16.0+4 + flame_forge2d: ^0.19.2 flame_mini_sprite: 0.0.2 flutter: sdk: flutter @@ -21,7 +21,7 @@ dev_dependencies: flutter_lints: ^2.0.0 flutter_test: sdk: flutter - very_good_analysis: ^3.0.1 + very_good_analysis: ^10.0.0 flutter: assets: From 65b4c16f7f9ad21a4917a75729543b991d99b6ef Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Fri, 3 Oct 2025 11:40:33 -0300 Subject: [PATCH 5/5] formating --- packages/mini_sprite_editor/lib/workspace/view/panel.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/mini_sprite_editor/lib/workspace/view/panel.dart b/packages/mini_sprite_editor/lib/workspace/view/panel.dart index ae65794..680ca57 100644 --- a/packages/mini_sprite_editor/lib/workspace/view/panel.dart +++ b/packages/mini_sprite_editor/lib/workspace/view/panel.dart @@ -7,7 +7,9 @@ import 'package:mini_sprite_editor/workspace/workspace.dart'; class Panel extends StatefulWidget { const Panel({ - required this.panel, required this.isActive, super.key, + required this.panel, + required this.isActive, + super.key, }); final WorkspacePanel panel;