diff --git a/lib/actions/actions.dart b/lib/actions/actions.dart index 27173c4..20de2f2 100644 --- a/lib/actions/actions.dart +++ b/lib/actions/actions.dart @@ -22,11 +22,7 @@ import 'package:tripeaks_neue/util/theme_ext.dart'; import 'package:tripeaks_neue/widgets/common_dialog.dart'; import 'package:tripeaks_neue/widgets/constants.dart' as c; import 'package:tripeaks_neue/widgets/select_layout_dialog.dart'; -import 'package:tripeaks_neue/util/get_io.dart' - // ignore: uri_does_not_exist - if (dart.library.io) 'package:tripeaks_neue/util/local_io.dart' - // ignore: uri_does_not_exist - if (dart.library.js_util) 'package:tripeaks_neue/util/web_io.dart'; +import 'package:tripeaks_neue/util/web_io.dart'; import 'intents.dart'; diff --git a/lib/pages/home_page/widgets/drawer.dart b/lib/pages/home_page/widgets/drawer.dart index 6d4db53..40e36e0 100644 --- a/lib/pages/home_page/widgets/drawer.dart +++ b/lib/pages/home_page/widgets/drawer.dart @@ -1,9 +1,6 @@ -import 'package:flutter_mobx/flutter_mobx.dart'; -import 'package:provider/provider.dart'; import 'package:tripeaks_neue/actions/intents.dart'; import 'package:tripeaks_neue/assets/custom_icons.dart'; import 'package:material_ui/material_ui.dart'; -import 'package:tripeaks_neue/stores/settings.dart'; import 'package:tripeaks_neue/util/platform_utils.dart' show canExit; import 'package:tripeaks_neue/util/theme_ext.dart'; import 'package:tripeaks_neue/widgets/constants.dart' as c; @@ -43,18 +40,6 @@ class const HomePageDrawer({super.key}) extends StatelessWidget { tooltip: s.infoTooltip, onPressed: () => Actions.invoke(context, const NavigateToInfoIntent(replace: false)), ), - Observer( - builder: (context) { - final settings = Provider.of(context); - return IconButton( - icon: const Icon(Icons.volume_off), - isSelected: settings.soundOn, - selectedIcon: const Icon(Icons.volume_up), - tooltip: settings.soundOn ? s.soundOnToolTip : s.soundOffToolTip, - onPressed: () => settings.setSoundOn(!settings.soundOn), - ); - }, - ), IconButton( icon: const Icon(Icons.settings), tooltip: s.settingsTooltip, diff --git a/lib/pages/settings_page/settings_page.dart b/lib/pages/settings_page/settings_page.dart index 06fa5f8..214ef25 100644 --- a/lib/pages/settings_page/settings_page.dart +++ b/lib/pages/settings_page/settings_page.dart @@ -7,7 +7,6 @@ import 'package:tripeaks_neue/pages/settings_page/decor_setting.dart'; import 'package:tripeaks_neue/pages/settings_page/ensure_solvable_setting.dart'; import 'package:tripeaks_neue/pages/settings_page/layout_setting.dart'; import 'package:tripeaks_neue/pages/settings_page/show_all_setting.dart'; -import 'package:tripeaks_neue/pages/settings_page/sound_setting.dart'; import 'package:tripeaks_neue/pages/settings_page/start_empty_setting.dart'; import 'package:tripeaks_neue/pages/settings_page/suit_icon_setting.dart'; import 'package:tripeaks_neue/pages/settings_page/theme_mode_setting.dart'; @@ -120,7 +119,6 @@ final class SettingsPageBody extends StatelessWidget { const StartEmptySetting(), const EnsureSolvableSetting(), GroupTitle(s.interfaceSettingGroupTitle), - const SoundSetting(), const ThemeModeSetting(), const SuitIconSetting(), const ColourSetting(), diff --git a/lib/pages/settings_page/theme_mode_setting.dart b/lib/pages/settings_page/theme_mode_setting.dart index 441d66e..af9bba4 100644 --- a/lib/pages/settings_page/theme_mode_setting.dart +++ b/lib/pages/settings_page/theme_mode_setting.dart @@ -19,7 +19,7 @@ class ThemeModeSetting extends StatelessWidget { builder: (context) { return SettingTile( titleText: s.themeModeControl, - location: Location.centre, + location: Location.first, onTap: () => _showSelection(context, settings), subtitle: _valueLabel(settings.themeMode, s), showArrow: true, diff --git a/lib/stores/session.dart b/lib/stores/session.dart index aa3f717..28edddb 100644 --- a/lib/stores/session.dart +++ b/lib/stores/session.dart @@ -5,11 +5,7 @@ import 'package:tripeaks_neue/stores/data/layout.dart'; import 'package:tripeaks_neue/stores/data/player_statistics.dart'; import 'package:tripeaks_neue/stores/data/single_game_statistics.dart'; import 'package:tripeaks_neue/stores/game.dart'; -import 'package:tripeaks_neue/util/get_io.dart' - // ignore: uri_does_not_exist - if (dart.library.io) 'package:tripeaks_neue/util/local_io.dart' - // ignore: uri_does_not_exist - if (dart.library.js_util) 'package:tripeaks_neue/util/web_io.dart'; +import 'package:tripeaks_neue/util/web_io.dart'; part "session.g.dart"; diff --git a/lib/stores/settings.dart b/lib/stores/settings.dart index 19f34f4..b308587 100644 --- a/lib/stores/settings.dart +++ b/lib/stores/settings.dart @@ -3,11 +3,7 @@ import 'package:mobx/mobx.dart'; import 'package:tripeaks_neue/stores/data/decor.dart'; import 'package:tripeaks_neue/stores/sound_effects.dart'; import 'package:tripeaks_neue/util/json_object.dart'; -import 'package:tripeaks_neue/util/get_io.dart' - // ignore: uri_does_not_exist - if (dart.library.io) 'package:tripeaks_neue/util/local_io.dart' - // ignore: uri_does_not_exist - if (dart.library.js_util) 'package:tripeaks_neue/util/web_io.dart'; +import 'package:tripeaks_neue/util/web_io.dart'; part 'settings.g.dart'; diff --git a/lib/stores/sound_effects.dart b/lib/stores/sound_effects.dart index eb02371..6fba227 100644 --- a/lib/stores/sound_effects.dart +++ b/lib/stores/sound_effects.dart @@ -1,8 +1,3 @@ -import 'dart:collection'; - -import 'package:audioplayers/audioplayers.dart'; -import 'package:logger/logger.dart'; - sealed class SoundEffects { Future load(); Future dispose(); @@ -45,141 +40,5 @@ final class Silent implements SoundEffects { Future playStart() => Future.value(); } -final class SoundOn implements SoundEffects { - late final AudioCache _cache; - late final AudioPlayer _player; - late final _logger = Logger(); - final HashMap _assets = HashMap(); - bool loaded = false; - - @override - Future load() async { - if (loaded) { - return; - } - _cache = AudioCache(prefix: "sounds/"); - _player = AudioPlayer() - ..audioCache = _cache - ..setReleaseMode(ReleaseMode.stop) - ..setPlayerMode(PlayerMode.lowLatency); - await _cache.loadAll(_soundList); - - for (var sound in _soundList) { - _assets[sound] = AssetSource(sound); - } - - _prePlay(); - loaded = true; - } - - @override - Future dispose() async { - _player.release(); - _cache.clearAll(); - loaded = false; - } - - @override - Future playDraw() async { - try { - await _player.stop(); - await _player.play(_assets[_draw]!, volume: 1.0); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - - @override - Future playError() async { - try { - await _player.stop(); - await _player.play(_assets[_error]!, volume: 1.0); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - - @override - Future playGameOver() async { - try { - await _player.stop(); - await _player.play(_assets[_gameOver]!, volume: 1.0); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - - @override - Future playRollback() async { - try { - await _player.stop(); - await _player.play(_assets[_rollback]!, volume: 1.0); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - - @override - Future playStart() async { - try { - await _player.stop(); - await _player.play(_assets[_start]!, volume: 1.0); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - - @override - Future playTake(int n) async { - try { - await _player.stop(); - final sound = _takes[(n - 1) % _takes.length]; - await _player.play(_assets[sound]!, volume: 1.0); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - - @override - Future playWin() async { - try { - await _player.stop(); - await _player.play(_assets[_win]!, volume: 1.0); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - - Future _prePlay() async { - for (final sound in _soundList) { - try { - await _player.play(_assets[sound]!, volume: 0.0); - await _player.stop(); - } catch (e) { - _logger.e("Can'y play sound: $e\n${e is Error ? e.stackTrace : null}"); - } - } - } - - static const String _take1 = "take1.mp3"; - static const String _take2 = "take2.mp3"; - static const String _take3 = "take3.mp3"; - static const String _draw = "draw.mp3"; - static const String _rollback = "undo.mp3"; - static const String _error = "error.mp3"; - static const String _win = "win.mp3"; - static const String _gameOver = "gameover.mp3"; - static const String _start = "start.mp3"; - static const List _soundList = [ - _take1, - _take2, - _take3, - _draw, - _rollback, - _error, - _win, - _gameOver, - _start, - ]; - static const List _takes = [_take1, _take2, _take3]; -} +/// The web edition ships no sound files: "sound on" is the same as silent. +typedef SoundOn = Silent; diff --git a/lib/util/generic_file_picker.dart b/lib/util/generic_file_picker.dart index aaf1b82..fd0664a 100644 --- a/lib/util/generic_file_picker.dart +++ b/lib/util/generic_file_picker.dart @@ -1,32 +1,60 @@ -import 'dart:convert'; +import 'dart:async'; +import 'dart:js_interop'; import 'dart:typed_data'; -import 'package:file_picker/file_picker.dart'; +import 'package:web/web.dart' as web; +/// Import and export of the statistics file in the browser: a file input to read +/// a JSON file and a download link to save one (the web edition does not use +/// the file_picker package). final class GenericFilePicker { const GenericFilePicker(); - Future openFile() async { - final result = await FilePicker.pickFile( - dialogTitle: "Pick file to import", - allowedExtensions: ["json"], - type: FileType.custom, + Future openFile() { + final completer = Completer(); + final input = web.HTMLInputElement() + ..type = 'file' + ..accept = '.json,application/json'; + input.addEventListener( + 'change', + (web.Event _) { + final files = input.files; + if (files == null || files.length == 0) { + if (!completer.isCompleted) completer.complete(null); + return; + } + files.item(0)!.text().toDart.then( + (text) { + if (!completer.isCompleted) completer.complete(text.toDart); + }, + onError: (Object e) { + if (!completer.isCompleted) completer.completeError(e); + }, + ); + }.toJS, ); - final bytes = await result?.readAsBytes(); - if (bytes == null) { - return null; - } - return utf8.decoder.convert(bytes); + input.addEventListener( + 'cancel', + (web.Event _) { + if (!completer.isCompleted) completer.complete(null); + }.toJS, + ); + input.click(); + return completer.future; } Future saveFile(String suggestedName, Uint8List data) async { - final result = await FilePicker.saveFile( - dialogTitle: "Pick file to export", - fileName: suggestedName, - allowedExtensions: ["json"], - bytes: data, + final blob = web.Blob( + [data.toJS].toJS, + web.BlobPropertyBag(type: 'application/json'), ); - return result?.path; + final url = web.URL.createObjectURL(blob); + final link = web.HTMLAnchorElement() + ..href = url + ..download = suggestedName; + link.click(); + web.URL.revokeObjectURL(url); + return suggestedName; } static const instance = GenericFilePicker(); diff --git a/pubspec.lock b/pubspec.lock index 89bb2ee..ec238e7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,38 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "1b0e6a07425a3e460666e88bf1c949ccc7bb0116ad562ce94a1eca60fe820725" - url: "https://pub.dev" - source: hosted - version: "103.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "61c04d0c1bfed555c681ea079519933f071a5a026578ff73c4ff0df2d3462e5e" - url: "https://pub.dev" - source: hosted - version: "13.3.0" - android_file_picker: - dependency: transitive - description: - name: android_file_picker - sha256: "014c74ab48d452c3252465682375a7fe6ddf56abb908ec361f207a3c4ffb2444" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" - source: hosted - version: "2.7.0" async: dependency: transitive description: @@ -41,62 +9,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.13.1" - audioplayers: - dependency: "direct main" - description: - name: audioplayers - sha256: "2ba4bb2944baacbdd5372ff8254a8e7feb8c10d7739545e392f5605a8f618745" - url: "https://pub.dev" - source: hosted - version: "6.8.1" - audioplayers_android: - dependency: transitive - description: - name: audioplayers_android - sha256: f5ff5b15620fbab8cb0849e9636c48e2b96c3f0f71723bbbe2ad3c761b205f05 - url: "https://pub.dev" - source: hosted - version: "5.3.0" - audioplayers_darwin: - dependency: transitive - description: - name: audioplayers_darwin - sha256: "1ca553add991384ecf421b9569da850f3ab2472ffb83f6970b0416365abc51be" - url: "https://pub.dev" - source: hosted - version: "6.5.0" - audioplayers_linux: - dependency: transitive - description: - name: audioplayers_linux - sha256: "15178b726b7cdee5364d0463c8d445630c4e0fb7d26612b73c767e7d25de9417" - url: "https://pub.dev" - source: hosted - version: "4.3.0" - audioplayers_platform_interface: - dependency: transitive - description: - name: audioplayers_platform_interface - sha256: "765f6f0e6dca55cb471c9483fc77700564b3484d19198aca4ebb5147c6c85acb" - url: "https://pub.dev" - source: hosted - version: "7.2.0" - audioplayers_web: - dependency: transitive - description: - name: audioplayers_web - sha256: ae1e0103c865a03e273f6d13d97b93f5595eac09915729cd5e37ef96e2857319 - url: "https://pub.dev" - source: hosted - version: "5.3.0" - audioplayers_windows: - dependency: transitive - description: - name: audioplayers_windows - sha256: a70ae82bba2dfcb6eb03dd4815d737a2d46d33ea5a96a03f535cfcaac490e413 - url: "https://pub.dev" - source: hosted - version: "4.4.1" boolean_selector: dependency: transitive description: @@ -105,62 +17,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.2" - build: - dependency: transitive - description: - name: build - sha256: "8a5c5761af8e31748bba3c82f68925ace40f3225c3eea25be9beb57eca7cd7a8" - url: "https://pub.dev" - source: hosted - version: "4.0.11" - build_config: - dependency: transitive - description: - name: build_config - sha256: d466ed2dc9c6cd1d169948879b84ee061eb5e22c64a7c6089879c6296d272a8d - url: "https://pub.dev" - source: hosted - version: "1.3.3" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: e1d40ef3f7934986d5da2271b1ba07794921ce263e44d622fb6c406d76589e33 - url: "https://pub.dev" - source: hosted - version: "4.1.6" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: "894c243f6bc32015fec466ce30a6925bd537a77a426ee5bf481120477eb3de67" - url: "https://pub.dev" - source: hosted - version: "2.16.1" - build_version: - dependency: "direct dev" - description: - name: build_version - sha256: "1063066ec338c18f0629d01077c9315f92fae3e7e0e06d0dc10e8aa3145d44f5" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "44922ecebd8e3d0cef743dadd3b54df4e87e2a4c52a29465a1872aa9e192caa8" - url: "https://pub.dev" - source: hosted - version: "5.1.2" - built_value: - dependency: transitive - description: - name: built_value - sha256: f87ea98192116f7093cb214551ce1929caae0681fdba282b3d8b4462adee7bb7 - url: "https://pub.dev" - source: hosted - version: "8.13.0" characters: dependency: transitive description: @@ -169,30 +25,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" - url: "https://pub.dev" - source: hosted - version: "2.0.4" - cli_config: - dependency: transitive - description: - name: cli_config - sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec - url: "https://pub.dev" - source: hosted - version: "0.2.0" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: "71e43f1976c3eae2d9468a5b4d6600bf8cae61508b87f27fa1799228935d48ab" - url: "https://pub.dev" - source: hosted - version: "0.5.2" clock: dependency: transitive description: @@ -201,14 +33,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.3" - code_assets: - dependency: transitive - description: - name: code_assets - sha256: "828110d598123b5ea96c00c9f3c72105bf79f8ee36c20a39b26209ade421ec57" - url: "https://pub.dev" - source: hosted - version: "2.1.0" collection: dependency: transitive description: @@ -217,46 +41,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.1" - convert: - dependency: transitive - description: - name: convert - sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.dev" - source: hosted - version: "3.1.2" - coverage: - dependency: transitive - description: - name: coverage - sha256: "956a3de0725ca232ad353565a8290d3357592bf4250f6f298a185e2d949c5d3d" - url: "https://pub.dev" - source: hosted - version: "1.15.1" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: f141ea4f277af142a0356955707f6556f37b03947d39d55585981a06ca437bd6 - url: "https://pub.dev" - source: hosted - version: "0.3.5+5" - crypto: - dependency: transitive - description: - name: crypto - sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf - url: "https://pub.dev" - source: hosted - version: "3.0.7" - csslib: - dependency: transitive - description: - name: csslib - sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" - source: hosted - version: "1.0.2" cupertino_ui: dependency: transitive description: @@ -265,30 +49,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - dart_pubspec_licenses: - dependency: "direct dev" - description: - name: dart_pubspec_licenses - sha256: "3d579e1aa3ad3b6519f08fce6980799c0a8375bf41e0b8d58ca21f1be64032c9" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "82ade9fc4273f29ed673e33166944465225b4f7fc5d4aaef48605cc751c18fc1" - url: "https://pub.dev" - source: hosted - version: "3.1.13" - dbus: - dependency: transitive - description: - name: dbus - sha256: a48d5da28e89bd02196e80d81ed8d7954923d00a0f4a68cc20b575038f023383 - url: "https://pub.dev" - source: hosted - version: "0.7.15" equatable: dependency: transitive description: @@ -313,78 +73,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.0.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - ffi_leak_tracker: - dependency: transitive - description: - name: ffi_leak_tracker - sha256: "4093d4ef9ca06ffe2786e73bfb25e22aa92112b9bb4ec941f11e3e6b61489a97" - url: "https://pub.dev" - source: hosted - version: "0.1.2" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" - source: hosted - version: "7.0.1" - file_picker: - dependency: "direct main" - description: - name: file_picker - sha256: "9be6aac79508dbcf8dac80a4fb20f27ce6f910837ca27e3670b9295995cc0110" - url: "https://pub.dev" - source: hosted - version: "12.3.0" - file_picker_darwin: - dependency: transitive - description: - name: file_picker_darwin - sha256: "59fa5394cfa5b6dc8bf491630cb17077b77b844adbb840df371e7be5355d6cf6" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - file_picker_linux: - dependency: transitive - description: - name: file_picker_linux - sha256: bd52ff1e0048f29df95f913c55ad2991c72791d93e6c42241912c4bdee946cb9 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - file_picker_platform_interface: - dependency: transitive - description: - name: file_picker_platform_interface - sha256: "0355558fd9af6da499d18e333d6b3beb44b0bf19e00933fccd15d18eb8d0e9ca" - url: "https://pub.dev" - source: hosted - version: "3.4.0" - file_picker_web: - dependency: transitive - description: - name: file_picker_web - sha256: "935560a9d29fa6f006f2855addebb88e88d438e13627d4cc24187033c106f227" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" - source: hosted - version: "1.1.1" flex_seed_scheme: dependency: "direct main" description: @@ -398,14 +86,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" - url: "https://pub.dev" - source: hosted - version: "6.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -424,84 +104,6 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: "404dbf9bce29beafbe9dcb19219447b6f7d49900cd42b8d3b7af102b24508e25" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - glob: - dependency: transitive - description: - name: glob - sha256: "218aeb56050c714f62a3182775320dfa04602b55074873e24e31bbd39bda96fb" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - graphs: - dependency: transitive - description: - name: graphs - sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - handy_window: - dependency: "direct main" - description: - path: "." - ref: "35b816812218f014d0ab213629a6e18a251798df" - resolved-ref: "35b816812218f014d0ab213629a6e18a251798df" - url: "https://github.com/mimoguz/handy_window.dart" - source: git - version: "0.4.2" - hooks: - dependency: transitive - description: - name: hooks - sha256: eaac480a35ec0814146c2c48d96aaa829e0e44a7662c88ae84c9edf4bc35651f - url: "https://pub.dev" - source: hosted - version: "2.2.0" - html: - dependency: transitive - description: - name: html - sha256: "43b67b8f43321ab066817dfac5619596c98bb1b61624e77203bb4351785f9699" - url: "https://pub.dev" - source: hosted - version: "0.15.7" - http: - dependency: transitive - description: - name: http - sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" - url: "https://pub.dev" - source: hosted - version: "1.6.0" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.dev" - source: hosted - version: "3.2.2" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" - source: hosted - version: "4.1.2" intl: dependency: "direct main" description: @@ -510,46 +112,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.20.3" - io: - dependency: transitive - description: - name: io - sha256: "2635216ca6a737e60de577ffa1a48a0bec76ca8a62917cfc1bb88c14c570646f" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - jni: - dependency: transitive - description: - name: jni - sha256: "6b9ca0602fef0230e83149afbe3f9f8227e94f2bbe84a1da4f14d699742f402d" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - jni_flutter: - dependency: transitive - description: - name: jni_flutter - sha256: b2310cdd4c18c65c081ab141a41efa94aa26c65431803703ece51996f174f351 - url: "https://pub.dev" - source: hosted - version: "1.0.3" - jni_util: - dependency: transitive - description: - name: jni_util - sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80" - url: "https://pub.dev" - source: hosted - version: "4.12.0" leak_tracker: dependency: transitive description: @@ -574,14 +136,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" - lints: - dependency: transitive - description: - name: lints - sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" - url: "https://pub.dev" - source: hosted - version: "6.1.0" logger: dependency: "direct main" description: @@ -590,22 +144,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.8.0" - logging: - dependency: transitive - description: - name: logging - sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - markdown: - dependency: transitive - description: - name: markdown - sha256: ee85086ad7698b42522c6ad42fe195f1b9898e4d974a1af4576c1a3a176cada9 - url: "https://pub.dev" - source: hosted - version: "7.3.1" matcher: dependency: transitive description: @@ -638,14 +176,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.0" - mime: - dependency: transitive - description: - name: mime - sha256: bd47de35f07e27267e69c8c8b22edf9473bfee170a60d60fcc93730c5144b7f6 - url: "https://pub.dev" - source: hosted - version: "2.1.0" mobx: dependency: "direct main" description: @@ -654,14 +184,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.7.0" - mobx_codegen: - dependency: "direct dev" - description: - name: mobx_codegen - sha256: "7046aec3f07bf575dd65945ce6d40450c872a434b77148ac47a561d5f0ffe3ef" - url: "https://pub.dev" - source: hosted - version: "2.8.0" nested: dependency: transitive description: @@ -670,38 +192,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - objective_c: - dependency: transitive - description: - name: objective_c - sha256: "5c80c2ad6e2c0397de5db38c6d653e69616a3397e13aa7633bf39eb668f2041b" - url: "https://pub.dev" - source: hosted - version: "9.6.2" - package_config: - dependency: transitive - description: - name: package_config - sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.dev" - source: hosted - version: "2.2.0" - pana: - dependency: transitive - description: - name: pana - sha256: "0c76e89f3dea0398df0e13d61f733903c864a9f7fac58087d2c1cbfba9950c20" - url: "https://pub.dev" - source: hosted - version: "0.23.19" path: dependency: transitive description: @@ -710,86 +200,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.1" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825 - url: "https://pub.dev" - source: hosted - version: "2.1.6" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "2a376b7d6392d80cd3705782d2caa734ca4727776db0b6ec36ef3f1855197699" - url: "https://pub.dev" - source: hosted - version: "2.6.0" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda" - url: "https://pub.dev" - source: hosted - version: "2.1.3" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: "2f1564aadb14215e478563b5406cb80729d022158c01dc50c96013c2f7eb4790" - url: "https://pub.dev" - source: hosted - version: "7.1.0" - platform: - dependency: transitive - description: - name: platform - sha256: a36d119c13416516a7b5913fbe8af8531e11633d784c550b2125f76c758524ec - url: "https://pub.dev" - source: hosted - version: "3.2.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pool: - dependency: transitive - description: - name: pool - sha256: "4177f68c237ea2128d1bee66ac17b2ce05ba3dbaafcbdd54c5d40a39d0b6b11c" - url: "https://pub.dev" - source: hosted - version: "1.5.3" provider: dependency: "direct main" description: @@ -798,107 +208,11 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.5+1" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "261236774e8b1d69cfc6b9eabbc96c40f25e7a2d6b171f3385d4f65d5734fb24" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c38b81cbf34450b67e0265d73433569d12e34782e30ed769c9cc99c9d5f2e796 - url: "https://pub.dev" - source: hosted - version: "1.6.0" - record_use: - dependency: transitive - description: - name: record_use - sha256: "1cb8564af8d43b464294411db9217f5ec04891c6f22ee2c32d73ae05e88a6bd2" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - retry: - dependency: transitive - description: - name: retry - sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - safe_url_check: - dependency: transitive - description: - name: safe_url_check - sha256: "49a3e060a7869cbafc8f4845ca1ecbbaaa53179980a32f4fdfeab1607e90f41d" - url: "https://pub.dev" - source: hosted - version: "1.1.2" - shelf: - dependency: transitive - description: - name: shelf - sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.dev" - source: hosted - version: "1.4.2" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 - url: "https://pub.dev" - source: hosted - version: "1.1.3" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" - url: "https://pub.dev" - source: hosted - version: "3.0.0" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.0" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: a603f1fb984a7391ae5978d1b92bfaaa08b350dca5c825256f925818f7943bf5 - url: "https://pub.dev" - source: hosted - version: "4.2.4" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b - url: "https://pub.dev" - source: hosted - version: "2.1.2" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "14c2945847669b44089bb1222f66873d7ff7103c58911917f2a63c5a62327898" - url: "https://pub.dev" - source: hosted - version: "0.10.14" source_span: dependency: transitive description: @@ -923,14 +237,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: a00e5f18bffc764f923e7dec1038527f7fe7a1791361a7117f0358193f13d53a - url: "https://pub.dev" - source: hosted - version: "2.1.2" string_scanner: dependency: transitive description: @@ -939,14 +245,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" - synchronized: - dependency: transitive - description: - name: synchronized - sha256: "397b146f97613b83d84bdccb439bc8d0f3aebb6c1d14a9641e6f24201c490b2d" - url: "https://pub.dev" - source: hosted - version: "3.4.2" term_glyph: dependency: transitive description: @@ -955,14 +253,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.2" - test: - dependency: transitive - description: - name: test - sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f - url: "https://pub.dev" - source: hosted - version: "1.31.1" test_api: dependency: transitive description: @@ -971,30 +261,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.12" - test_core: - dependency: transitive - description: - name: test_core - sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 - url: "https://pub.dev" - source: hosted - version: "0.6.18" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - uuid: - dependency: transitive - description: - name: uuid - sha256: "9b129329f58692f6e6578329498a8fe9fbe98f090beb764ffbb8ee2eadd01dcd" - url: "https://pub.dev" - source: hosted - version: "4.6.0" vector_math: dependency: transitive description: @@ -1011,14 +277,6 @@ packages: url: "https://pub.dev" source: hosted version: "15.3.0" - watcher: - dependency: transitive - description: - name: watcher - sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" - url: "https://pub.dev" - source: hosted - version: "1.2.1" web: dependency: "direct main" description: @@ -1027,78 +285,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 - url: "https://pub.dev" - source: hosted - version: "3.0.3" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - win32: - dependency: transitive - description: - name: win32 - sha256: a0b93865d5644f11cf6a8c3f6db909f1ec168958b5805f6cc684adea957cd63d - url: "https://pub.dev" - source: hosted - version: "6.4.0" - windows_file_picker: - dependency: transitive - description: - name: windows_file_picker - sha256: "62e6e6e115231d1d1d71c7b5883b4091ce3e0190e49548dfb0ff8cba8d91ad96" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - xdg_desktop_portal: - dependency: "direct main" - description: - name: xdg_desktop_portal - sha256: "4fae74b6ed63a449d4c796a74265cebdd912c390336dedc06d705142f3b939d7" - url: "https://pub.dev" - source: hosted - version: "0.1.14" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - xml: - dependency: transitive - description: - name: xml - sha256: "0fe8cc98946def31cbcbc8734aa4067031e6f65ea3a78a508060bfed2200bfeb" - url: "https://pub.dev" - source: hosted - version: "7.1.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: f67cdd8e07d3c6329146aaef1ba043542b3134c12489f553ca9a7435d1068aea - url: "https://pub.dev" - source: hosted - version: "3.1.4" sdks: dart: ">=3.13.0 <4.0.0" flutter: ">=3.47.0" diff --git a/pubspec.yaml b/pubspec.yaml index 0241fa6..3fef81a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,36 +8,23 @@ environment: sdk: ^3.13.0 dependencies: - audioplayers: ^6.8.1 fast_rich_text: ^0.0.1 - file_picker: 12.3.0 flutter: sdk: flutter flutter_localizations: sdk: flutter flutter_mobx: ^2.4.0 - handy_window: - git: - url: https://github.com/mimoguz/handy_window.dart - ref: "35b816812218f014d0ab213629a6e18a251798df" intl: any logger: ^2.8.0 mobx: ^2.7.0 - path_provider: ^2.1.6 provider: ^6.1.5 web: ^1.1.1 - xdg_desktop_portal: ^0.1.14 material_ui: any flex_seed_scheme: ^5.0.1 dev_dependencies: - build_runner: ^2.16.1 - build_version: ^2.1.3 - flutter_lints: ^6.0.0 - dart_pubspec_licenses: ^3.2.0 flutter_test: sdk: flutter - mobx_codegen: ^2.8.0 flutter: uses-material-design: true @@ -49,15 +36,6 @@ flutter: - images/welcome.png - images/card_counter_dark.png - images/card_counter_light.png - - sounds/take1.mp3 - - sounds/take2.mp3 - - sounds/take3.mp3 - - sounds/draw.mp3 - - sounds/undo.mp3 - - sounds/error.mp3 - - sounds/start.mp3 - - sounds/win.mp3 - - sounds/gameover.mp3 fonts: - family: Actions