diff --git a/.gitignore b/.gitignore index 3050550..f05a226 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,5 @@ app.*.map.json /android/app/release lib/generated -lib/oss_licenses.dart \ No newline at end of file +lib/oss_licenses.dart +/pubspec.lock diff --git a/README.md b/README.md index f538965..c9389b9 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@

Just Another Workout Timer

+

A simple timer for your workouts, built with Flutter!
diff --git a/android/settings.gradle b/android/settings.gradle index 5ae9180..eb782a2 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -18,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version '8.4.1' apply false - id "org.jetbrains.kotlin.android" version "2.0.0" apply false + id "com.android.application" version '8.6.0' apply false + id "org.jetbrains.kotlin.android" version "2.1.0" apply false } include ":app" \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index aa73fd1..a5bfe21 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -19,6 +19,7 @@ "duplicate": "Duplicate", "durationLeft": "{timeLeft} of {timeTotal} left", "durationWithTime": "Duration: {formattedTime}", + "editSetName" : "Edit set name", "editWorkout": "Edit workout", "enterWorkoutName": "Please enter a name for the workout!", "exercise": "Exercise", @@ -57,7 +58,9 @@ "settingHalfway": "Play sound or announcement halfway during exercise", "settings": "Settings", "soundOutput": "Sound output", + "spinnerStep": "Editor time granularity", "startWorkout": "Start workout", + "tapToEdit": "Tap to edit", "title": "Just Another Workout Timer", "tts": "Text-to-Speech (TTS)", "ttsLang": "TTS Language", diff --git a/lib/layouts/home_page.dart b/lib/layouts/home_page.dart index 61327b9..5defeca 100644 --- a/lib/layouts/home_page.dart +++ b/lib/layouts/home_page.dart @@ -207,5 +207,10 @@ class HomePageState extends State { tooltip: S.of(context).addWorkout, child: const Icon(Icons.add), ), + // Empty App Bar prevents drawing under nav buttons. + bottomNavigationBar: const BottomAppBar( + elevation : 1, + height: 1, + ) ); } diff --git a/lib/layouts/oss_license_page.dart b/lib/layouts/oss_license_page.dart index dc50cdc..afc9bcc 100644 --- a/lib/layouts/oss_license_page.dart +++ b/lib/layouts/oss_license_page.dart @@ -39,6 +39,7 @@ class OssLicensesPage extends StatelessWidget { isMarkdown: false, isSdk: false, dependencies: [], + devDependencies: [] ), ); } @@ -54,6 +55,7 @@ class OssLicensesPage extends StatelessWidget { isSdk: false, homepage: 'https://freesound.org/people/unfa/sounds/243749/', dependencies: [], + devDependencies: [] ), ); diff --git a/lib/layouts/settings_page.dart b/lib/layouts/settings_page.dart index 22cf1c4..f43385e 100644 --- a/lib/layouts/settings_page.dart +++ b/lib/layouts/settings_page.dart @@ -102,6 +102,35 @@ class SettingsPageState extends State { subtitle: Text(S.of(context).expanded_setlist_info), pref: 'expanded_setlist', ), + + PrefTitle( + title: Text( + S.of(context).editWorkout, + ), + ), + PrefDropdown( + title: Text(S.of(context).spinnerStep), + pref: 'spinner_step', + items: [ + DropdownMenuItem( + value: 5, + child: Text("5 ${S.of(context).seconds}"), + ), + DropdownMenuItem( + value: 10, + child: Text("10 ${S.of(context).seconds}"), + ), + DropdownMenuItem( + value: 15, + child: Text("15 ${S.of(context).seconds}"), + ), + ], + ), + PrefSwitch( + title: Text(S.of(context).tapToEdit), + pref: 'tap_to_edit', + ), + PrefTitle( title: Text( S.of(context).backup, diff --git a/lib/layouts/workout_builder.dart b/lib/layouts/workout_builder.dart index 04c16cc..f3c01e8 100644 --- a/lib/layouts/workout_builder.dart +++ b/lib/layouts/workout_builder.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:prefs/prefs.dart'; +import 'package:prompt_dialog/prompt_dialog.dart'; import 'package:uuid/uuid.dart'; import '../generated/l10n.dart'; @@ -56,7 +58,7 @@ class BuilderPageState extends State { var newSet = Set.fromJson(_workout.sets[index].toJson()); newSet.id = const Uuid().v4(); setState(() { - _workout.sets.insert(index, newSet); + _workout.sets.insert(index + 1, newSet); _dirty = true; }); } @@ -149,6 +151,20 @@ class BuilderPageState extends State { }); } + void _editSetName(int setIndex) async { + var existingName = _workout.sets[setIndex].name ?? ""; + var newName = await prompt( + context, + initialValue: existingName, + maxLength: 15); + if (newName != null && newName != existingName) { + setState(() { + _workout.sets[setIndex].name = newName.isEmpty ? null : newName; + _dirty = true; + }); + } + } + Widget _buildSetList() => ReorderableListView( onReorder: (oldIndex, newIndex) { if (oldIndex < newIndex) { @@ -186,9 +202,16 @@ class BuilderPageState extends State { Expanded( child: ListTile( title: Text( + set.name ?? S.of(context).setIndex(_workout.sets.indexOf(set) + 1), + style: const TextStyle( + decoration: TextDecoration.underline, + ), ), subtitle: Text(Utils.formatSeconds(set.duration)), + onLongPress: () { + _editSetName(index); + }, ), ), Text(S.of(context).repetitions), @@ -196,7 +219,9 @@ class BuilderPageState extends State { lowerLimit: 1, upperLimit: 99, largeSteps: false, + step: 1, formatNumber: false, + tapToEdit: false, value: set.repetitions, valueChanged: (repetitions) { setState(() { @@ -232,12 +257,21 @@ class BuilderPageState extends State { Row( children: [ IconButton( - icon: const Icon(Icons.delete), - tooltip: S.of(context).deleteSet, + icon: Icon(set.hidden ? Icons.visibility : Icons.visibility_off), onPressed: () { - _deleteSet(index); + setState(() { + set.hidden = !set.hidden; + _dirty = true; + }); }, ), + IconButton( + icon: const Icon(Icons.delete), + tooltip: S.of(context).deleteSet, + onPressed: () { + _deleteSet(index); + } + ), IconButton( icon: const Icon(Icons.copy), tooltip: S.of(context).duplicate, @@ -264,7 +298,7 @@ class BuilderPageState extends State { _workout.sets[setIndex].exercises.insert(newIndex, ex); }); }, - children: set.exercises + children: set.hidden ? [] : set.exercises .asMap() .keys .map( @@ -337,7 +371,9 @@ class BuilderPageState extends State { lowerLimit: 0, upperLimit: 10800, largeSteps: true, + step: Prefs.getInt('spinner_step', 10) , formatNumber: true, + tapToEdit: Prefs.getBool('tap_to_edit', false), value: _workout.sets[setIndex].exercises[exIndex].duration, valueChanged: (duration) { setState(() { diff --git a/lib/layouts/workout_runner.dart b/lib/layouts/workout_runner.dart index 00de6e2..e7b5b78 100644 --- a/lib/layouts/workout_runner.dart +++ b/lib/layouts/workout_runner.dart @@ -166,6 +166,7 @@ class WorkoutPageState extends State { ), ), ), + // right side of footer Expanded( child: ListTile( @@ -198,7 +199,15 @@ class WorkoutPageState extends State { child: Column( children: [ Text( - '${S.of(context).setIndex(_workout.sets.indexOf(timetable.currentSet) + 1)} - ${Utils.formatSeconds(timetable.remainingSeconds)}', + timetable.currentSet.name ?? S.of(context).setIndex(_workout.sets.indexOf(timetable.currentSet) + 1), + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 40, + fontWeight: FontWeight.bold, + ), + ), + Text( + Utils.formatSeconds(timetable.remainingSeconds), textAlign: TextAlign.center, style: const TextStyle( fontSize: 48, diff --git a/lib/main.dart b/lib/main.dart index 78ded61..5d30feb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -31,6 +31,8 @@ void main() async { 'tts_next_announce': true, 'sound': 'tts', 'expanded_setlist': false, + 'spinner_step': 10, + 'tap_to_edit' : false, }, ).then( (service) => Future.wait([ @@ -49,6 +51,7 @@ void main() async { } class JAWTApp extends StatelessWidget { + // TODO this shouldn't exist in a StatelessWidget ThemeMode? _brightness; JAWTApp({super.key}); @@ -84,14 +87,14 @@ class JAWTApp extends StatelessWidget { brightness: Brightness.light, colorScheme: lightDynamic, colorSchemeSeed: lightDynamic != null ? null : Colors.blue, - cardTheme: const CardTheme( + cardTheme: const CardThemeData( elevation: 4, ), ), darkTheme: ThemeData( useMaterial3: true, brightness: Brightness.dark, - cardTheme: const CardTheme(elevation: 4), + cardTheme: const CardThemeData(elevation: 4), colorScheme: darkDynamic, colorSchemeSeed: darkDynamic != null ? null : Colors.blue, ), diff --git a/lib/utils/number_stepper.dart b/lib/utils/number_stepper.dart index cd174c7..b9d1dcc 100644 --- a/lib/utils/number_stepper.dart +++ b/lib/utils/number_stepper.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:numberpicker/numberpicker.dart'; @@ -16,6 +17,8 @@ class NumberStepper extends StatefulWidget { required this.valueChanged, required this.formatNumber, required this.largeSteps, + required this.step, + required this.tapToEdit, }); final int lowerLimit; @@ -24,7 +27,11 @@ class NumberStepper extends StatefulWidget { int value; final ValueChanged valueChanged; final bool formatNumber; + // if false, shows a number with plus/minus buttons. + // if true, shows the spinner. final bool largeSteps; + final int step; + final bool tapToEdit; @override CustomStepperState createState() => CustomStepperState(); @@ -32,12 +39,14 @@ class NumberStepper extends StatefulWidget { class CustomStepperState extends State { bool _isEditingText = false; + bool _isSpinnerActive = true; late TextEditingController _editingController; @override void initState() { super.initState(); _editingController = TextEditingController(text: widget.value.toString()); + _isSpinnerActive = !widget.tapToEdit; } @override @@ -47,12 +56,16 @@ class CustomStepperState extends State { } Widget _editableTextField() { - if (_isEditingText) { + var isSpinnerValid = widget.value % widget.step == 0; + + if (_isEditingText || !isSpinnerValid) { _editingController.value = TextEditingValue(text: widget.value.toString()); - return Center( + return Container( + width: 122, + alignment: Alignment.centerRight, child: SizedBox( - width: 112, + width: 75, child: TextField( maxLines: 1, maxLengthEnforcement: MaxLengthEnforcement.enforced, @@ -75,9 +88,13 @@ class CustomStepperState extends State { } }); }, - autofocus: true, + // Only autofocus if we're text editing, not for isSpinnerValid + autofocus: _isEditingText, controller: _editingController, - decoration: InputDecoration(suffixText: S.of(context).seconds), + decoration: InputDecoration( + helperText: S.of(context).seconds, + helperStyle: const TextStyle(fontSize: 14), + ), ), ), ); @@ -85,25 +102,50 @@ class CustomStepperState extends State { return InkWell( onTap: () { setState(() { - _isEditingText = true; + if (widget.tapToEdit) { + _isSpinnerActive = true; + } + else { + _isEditingText = true; + } + }); + }, + onLongPress: () { + setState(() { + if (widget.tapToEdit) { + _isEditingText = true; + } }); }, - child: NumberPicker( - itemHeight: 32, - value: widget.value, - minValue: widget.lowerLimit, - step: 10, - itemCount: 3, - haptics: true, - zeroPad: false, - maxValue: widget.upperLimit, - textMapper: (value) => Utils.formatSeconds(int.parse(value)), - onChanged: (value) { - setState(() { - widget.value = value; - widget.valueChanged(value); - }); - }, + child: IgnorePointer( + ignoring: !_isSpinnerActive, + child: NotificationListener( + onNotification: (notification) { + setState(() { + if (notification.direction == ScrollDirection.idle && widget.tapToEdit) { + _isSpinnerActive = false; + } + }); + return true; + }, + child: NumberPicker( + itemHeight: 32, + value: widget.value, + minValue: widget.lowerLimit, + step: widget.step, + itemCount: 3, + haptics: true, + zeroPad: false, + maxValue: widget.upperLimit, + textMapper: (value) => Utils.formatSeconds(int.parse(value)), + onChanged: (value) { + setState(() { + widget.value = value; + widget.valueChanged(value); + }); + }, + ), + ), ), ); } diff --git a/lib/utils/sound_helper.dart b/lib/utils/sound_helper.dart index 81f8bd3..0d5e4ba 100644 --- a/lib/utils/sound_helper.dart +++ b/lib/utils/sound_helper.dart @@ -1,63 +1,69 @@ -import 'package:flutter/services.dart'; import 'package:prefs/prefs.dart'; -import 'package:soundpool/soundpool.dart'; +import 'package:audioplayers/audioplayers.dart'; // ignore: avoid_classes_with_only_static_members class SoundHelper { - static final Soundpool _soundpool = Soundpool.fromOptions( - options: const SoundpoolOptions( - streamType: StreamType.music, - ), - ); - static late int _beepLowId; - static late int _beepHighId; - static late int _tickId; + + static final AssetSource _beepLowSource = AssetSource("beep_low.wav"); + static final AssetSource _beepHighSource = AssetSource("beep_high.wav"); + static final AssetSource _tickSource = AssetSource("tick.wav"); + static late AudioPlayer _player; static bool useSound = false; static Future loadSounds() async { + AudioLogger.logLevel = AudioLogLevel.info; await _loadSounds(); useSound = Prefs.getString('sound') == 'beep'; } static Future _loadSounds() async { - var beepLow = await rootBundle.load('assets/beep_low.wav'); - var beepHigh = await rootBundle.load('assets/beep_high.wav'); - var tick = await rootBundle.load('assets/tick.wav'); - _beepLowId = await _soundpool.load(beepLow); - _beepHighId = await _soundpool.load(beepHigh); - _tickId = await _soundpool.load(tick); + _player = AudioPlayer(); + await _player.setReleaseMode(ReleaseMode.stop); + + await _loadSound(_beepLowSource); + await _loadSound(_beepHighSource); + await _loadSound(_tickSource); + } + + static Future _loadSound(AssetSource src) async { + await AudioCache.instance.load(src.path); } static void playBeepLow() { - if (useSound) _soundpool.play(_beepLowId); + if (useSound) _player.play(_beepLowSource); } static void playBeepHigh() { - if (useSound) _soundpool.play(_beepHighId); + if (useSound) _player.play(_beepHighSource); } static void playBeepTick() { - if (Prefs.getBool('ticks')) _soundpool.play(_tickId); + if (Prefs.getBool('ticks')) _player.play(_tickSource); } static void playDouble() { if (useSound) { - _soundpool.play(_beepLowId); + playBeepLow(); Future.delayed(const Duration(milliseconds: 200)) - .then((value) => _soundpool.play(_beepLowId)); + .then((value) => playBeepLow()); } } static void playTriple() { if (useSound) { - _soundpool.play(_beepHighId); + playBeepHigh(); Future.delayed(const Duration(milliseconds: 150)) - .then((value) => _soundpool.play(_beepHighId)) + .then((value) => playBeepHigh()) .then( (value) => Future.delayed(const Duration(milliseconds: 150)) - .then((value) => _soundpool.play(_beepHighId)), + .then((value) => playBeepHigh()), ); } } + + // TODO does this need to be called somewhere? + static void dispose() async { + await _player.dispose(); + } } diff --git a/lib/utils/workout.dart b/lib/utils/workout.dart index 7b07623..7de7212 100644 --- a/lib/utils/workout.dart +++ b/lib/utils/workout.dart @@ -51,6 +51,8 @@ class Set { String? id, this.repetitions = 1, List? exercises, + this.name, + this.hidden = false, }) { this.id = id ?? const Uuid().v4(); this.exercises = exercises ?? [Exercise()]; @@ -59,12 +61,17 @@ class Set { @JsonKey(required: true) int repetitions; + @JsonKey() + late String? name; + @JsonKey() late String id; @JsonKey(required: true) late List exercises; + bool hidden; + int get duration { var duration = 0; diff --git a/lib/workout.g.dart b/lib/workout.g.dart index f65dc03..8789c61 100644 --- a/lib/workout.g.dart +++ b/lib/workout.g.dart @@ -39,6 +39,7 @@ Set _$SetFromJson(Map json) { exercises: (json['exercises'] as List?) ?.map((e) => Exercise.fromJson(e as Map)) .toList(), + name: json['name'] as String? ); } @@ -46,6 +47,7 @@ Map _$SetToJson(Set instance) => { 'repetitions': instance.repetitions, 'id': instance.id, 'exercises': instance.exercises.map((e) => e.toJson()).toList(), + 'name' : instance.name }; Exercise _$ExerciseFromJson(Map json) { diff --git a/pubspec.lock b/pubspec.lock deleted file mode 100644 index 4626522..0000000 --- a/pubspec.lock +++ /dev/null @@ -1,1167 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" - url: "https://pub.dev" - source: hosted - version: "67.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" - url: "https://pub.dev" - source: hosted - version: "6.4.1" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - archive: - dependency: transitive - description: - name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d - url: "https://pub.dev" - source: hosted - version: "3.6.1" - args: - dependency: transitive - description: - name: args - sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" - url: "https://pub.dev" - source: hosted - version: "2.5.0" - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build: - dependency: transitive - description: - name: build - sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 - url: "https://pub.dev" - source: hosted - version: "1.1.1" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" - url: "https://pub.dev" - source: hosted - version: "2.4.2" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" - url: "https://pub.dev" - source: hosted - version: "2.4.11" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe - url: "https://pub.dev" - source: hosted - version: "7.3.1" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb - url: "https://pub.dev" - source: hosted - version: "8.9.2" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff - url: "https://pub.dev" - source: hosted - version: "2.0.3" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 - url: "https://pub.dev" - source: hosted - version: "0.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 - url: "https://pub.dev" - source: hosted - version: "4.10.0" - collection: - dependency: "direct main" - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - convert: - dependency: transitive - description: - name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" - source: hosted - version: "3.1.1" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" - url: "https://pub.dev" - source: hosted - version: "0.3.4+1" - crypto: - dependency: transitive - description: - name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab - url: "https://pub.dev" - source: hosted - version: "3.0.3" - csslib: - dependency: transitive - description: - name: csslib - sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - dart_pubspec_licenses: - dependency: transitive - description: - name: dart_pubspec_licenses - sha256: a488baa010044452b208bc35c6dd62ac072a1ea918f796e4381d5aa1b21cfa41 - url: "https://pub.dev" - source: hosted - version: "3.0.1" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" - url: "https://pub.dev" - source: hosted - version: "2.3.6" - dbus: - dependency: transitive - description: - name: dbus - sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" - url: "https://pub.dev" - source: hosted - version: "0.7.10" - dynamic_color: - dependency: "direct main" - description: - name: dynamic_color - sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d - url: "https://pub.dev" - source: hosted - version: "1.7.0" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" - source: hosted - version: "1.3.1" - ffi: - dependency: transitive - description: - name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - file: - dependency: transitive - description: - name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_file_dialog: - dependency: "direct main" - description: - name: flutter_file_dialog - sha256: "9344b8f07be6a1b6f9854b723fb0cf84a8094ba94761af1d213589d3cb087488" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - flutter_launcher_icons: - dependency: "direct dev" - description: - name: flutter_launcher_icons - sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" - url: "https://pub.dev" - source: hosted - version: "0.13.1" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - flutter_localizations: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_native_splash: - dependency: "direct main" - description: - name: flutter_native_splash - sha256: edf39bcf4d74aca1eb2c1e43c3e445fd9f494013df7f0da752fefe72020eedc0 - url: "https://pub.dev" - source: hosted - version: "2.4.0" - flutter_oss_licenses: - dependency: "direct dev" - description: - name: flutter_oss_licenses - sha256: "1219e0e03faac80e68a554b79447d4936c79081d698abca912cc123fb77094aa" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - flutter_phoenix: - dependency: "direct main" - description: - name: flutter_phoenix - sha256: "39589dac934ea476d0e43fb60c1ddfba58f14960743640c8250dea11c4333378" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - flutter_test: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_tts: - dependency: "direct main" - description: - name: flutter_tts - sha256: aed2a00c48c43af043ed81145fd8503ddd793dafa7088ab137dbef81a703e53d - url: "https://pub.dev" - source: hosted - version: "4.0.2" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fluttertoast: - dependency: "direct main" - description: - name: fluttertoast - sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847" - url: "https://pub.dev" - source: hosted - version: "8.2.6" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - html: - dependency: transitive - description: - name: html - sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" - url: "https://pub.dev" - source: hosted - version: "0.15.4" - http: - dependency: transitive - description: - name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - image: - dependency: transitive - description: - name: image - sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" - url: "https://pub.dev" - source: hosted - version: "4.2.0" - infinite_listview: - dependency: transitive - description: - name: infinite_listview - sha256: f6062c1720eb59be553dfa6b89813d3e8dd2f054538445aaa5edaddfa5195ce6 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - intl: - dependency: "direct main" - description: - name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" - source: hosted - version: "0.19.0" - intl_utils: - dependency: "direct dev" - description: - name: intl_utils - sha256: c2b1f5c72c25512cbeef5ab015c008fc50fe7e04813ba5541c25272300484bf4 - url: "https://pub.dev" - source: hosted - version: "2.8.7" - io: - dependency: transitive - description: - name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" - source: hosted - version: "1.0.4" - js: - dependency: transitive - description: - name: js - sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf - url: "https://pub.dev" - source: hosted - version: "0.7.1" - json_annotation: - dependency: "direct main" - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - json_serializable: - dependency: "direct dev" - description: - name: json_serializable - sha256: ea1432d167339ea9b5bb153f0571d0039607a873d6e04e0117af043f14a1fd4b - url: "https://pub.dev" - source: hosted - version: "6.8.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" - url: "https://pub.dev" - source: hosted - version: "10.0.4" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" - url: "https://pub.dev" - source: hosted - version: "3.0.3" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - logger: - dependency: transitive - description: - name: logger - sha256: af05cc8714f356fd1f3888fb6741cbe9fbe25cdb6eedbab80e1a6db21047d4a4 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb - url: "https://pub.dev" - source: hosted - version: "0.12.16+1" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - meta: - dependency: transitive - description: - name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" - url: "https://pub.dev" - source: hosted - version: "1.12.0" - mime: - dependency: transitive - description: - name: mime - sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" - url: "https://pub.dev" - source: hosted - version: "1.0.5" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - numberpicker: - dependency: "direct main" - description: - name: numberpicker - sha256: "4c129154944b0f6b133e693f8749c3f8bfb67c4d07ef9dcab48b595c22d1f156" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - package_config: - dependency: transitive - description: - name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - package_info_plus: - dependency: transitive - description: - name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 - url: "https://pub.dev" - source: hosted - version: "8.0.0" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e - url: "https://pub.dev" - source: hosted - version: "3.0.0" - path: - dependency: "direct main" - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 - url: "https://pub.dev" - source: hosted - version: "2.1.3" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: bca87b0165ffd7cdb9cad8edd22d18d2201e886d9a9f19b4fb3452ea7df3a72a - url: "https://pub.dev" - source: hosted - version: "2.2.6" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 - url: "https://pub.dev" - source: hosted - version: "2.4.0" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" - url: "https://pub.dev" - source: hosted - version: "2.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 - url: "https://pub.dev" - source: hosted - version: "6.0.2" - platform: - dependency: transitive - description: - name: platform - sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" - url: "https://pub.dev" - source: hosted - version: "3.1.5" - 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: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" - source: hosted - version: "1.5.1" - pref: - dependency: "direct main" - description: - name: pref - sha256: c385b6239c594bfc78209eba17686bd0a156c8a216edf4b0716923fddc9b4f85 - url: "https://pub.dev" - source: hosted - version: "2.8.0" - prefs: - dependency: "direct main" - description: - name: prefs - sha256: a2bf3bd2b242539a14862fbc994721fb88bd3599255b38b721d16d45e361f30d - url: "https://pub.dev" - source: hosted - version: "4.1.0+3" - provider: - dependency: "direct main" - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - pubspec: - dependency: transitive - description: - name: pubspec - sha256: f534a50a2b4d48dc3bc0ec147c8bd7c304280fff23b153f3f11803c4d49d927e - url: "https://pub.dev" - source: hosted - version: "2.3.0" - pubspec_dependency_sorter: - dependency: "direct dev" - description: - name: pubspec_dependency_sorter - sha256: d2114e92f003195de74a9ed3aeb9c59425ae9b7d637b802bb225b3fe3a4ba605 - url: "https://pub.dev" - source: hosted - version: "1.0.5" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - quiver: - dependency: transitive - description: - name: quiver - sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 - url: "https://pub.dev" - source: hosted - version: "3.2.1" - scrollable_positioned_list: - dependency: "direct main" - description: - name: scrollable_positioned_list - sha256: "1b54d5f1329a1e263269abc9e2543d90806131aa14fe7c6062a8054d57249287" - url: "https://pub.dev" - source: hosted - version: "0.3.8" - share_plus: - dependency: "direct main" - description: - name: share_plus - sha256: ef3489a969683c4f3d0239010cc8b7a2a46543a8d139e111c06c558875083544 - url: "https://pub.dev" - source: hosted - version: "9.0.0" - share_plus_platform_interface: - dependency: transitive - description: - name: share_plus_platform_interface - sha256: "0f9e4418835d1b2c3ae78fdb918251959106cefdbc4dd43526e182f80e82f6d4" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - shared_preferences: - dependency: transitive - description: - name: shared_preferences - sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 - url: "https://pub.dev" - source: hosted - version: "2.2.3" - shared_preferences_android: - dependency: transitive - description: - name: shared_preferences_android - sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - shared_preferences_foundation: - dependency: transitive - description: - name: shared_preferences_foundation - sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" - url: "https://pub.dev" - source: hosted - version: "2.4.0" - shared_preferences_linux: - dependency: transitive - description: - name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - shared_preferences_platform_interface: - dependency: transitive - description: - name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - shared_preferences_web: - dependency: transitive - description: - name: shared_preferences_web - sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" - url: "https://pub.dev" - source: hosted - version: "2.3.0" - shared_preferences_windows: - dependency: transitive - description: - name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - shelf: - dependency: transitive - description: - name: shelf - sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 - url: "https://pub.dev" - source: hosted - version: "1.4.1" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - soundpool: - dependency: "direct main" - description: - name: soundpool - sha256: fe7302005759d6a3561de1711e3ea818b1ba025a62375b469196dda5b654bd38 - url: "https://pub.dev" - source: hosted - version: "2.4.1" - soundpool_macos: - dependency: transitive - description: - name: soundpool_macos - sha256: e0440a19d4e8f344dace336923b369184e91eebbbd8348266f4434b675bd15db - url: "https://pub.dev" - source: hosted - version: "2.3.0" - soundpool_platform_interface: - dependency: transitive - description: - name: soundpool_platform_interface - sha256: "7c6666e19319151b2036c4fc9b6da3a83f2ebf4097989e6ba1c2b0bfe3612e9f" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - soundpool_web: - dependency: transitive - description: - name: soundpool_web - sha256: "3d1eb8d6cceb8a0aec38ff9aec4fbd11a9a8101d27b27a6eb29305b83d46aee5" - url: "https://pub.dev" - source: hosted - version: "2.3.0" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" - url: "https://pub.dev" - source: hosted - version: "1.3.4" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" - url: "https://pub.dev" - source: hosted - version: "1.11.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 - url: "https://pub.dev" - source: hosted - version: "2.1.2" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" - url: "https://pub.dev" - source: hosted - version: "0.7.0" - timing: - dependency: transitive - description: - name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" - url: "https://pub.dev" - source: hosted - version: "2.2.2" - uri: - dependency: transitive - description: - name: uri - sha256: "889eea21e953187c6099802b7b4cf5219ba8f3518f604a1033064d45b1b8268a" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - url_launcher: - dependency: "direct main" - description: - name: url_launcher - sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" - url: "https://pub.dev" - source: hosted - version: "6.3.0" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf - url: "https://pub.dev" - source: hosted - version: "6.3.3" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89" - url: "https://pub.dev" - source: hosted - version: "6.3.0" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 - url: "https://pub.dev" - source: hosted - version: "3.1.1" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" - url: "https://pub.dev" - source: hosted - version: "3.2.0" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 - url: "https://pub.dev" - source: hosted - version: "3.1.1" - uuid: - dependency: "direct main" - description: - name: uuid - sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" - url: "https://pub.dev" - source: hosted - version: "4.4.0" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" - url: "https://pub.dev" - source: hosted - version: "14.2.1" - wakelock_plus: - dependency: "direct main" - description: - name: wakelock_plus - sha256: "14758533319a462ffb5aa3b7ddb198e59b29ac3b02da14173a1715d65d4e6e68" - url: "https://pub.dev" - source: hosted - version: "1.2.5" - wakelock_plus_platform_interface: - dependency: transitive - description: - name: wakelock_plus_platform_interface - sha256: "422d1cdbb448079a8a62a5a770b69baa489f8f7ca21aef47800c726d404f9d16" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" - url: "https://pub.dev" - source: hosted - version: "0.5.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "24301d8c293ce6fe327ffe6f59d8fd8834735f0ec36e4fd383ec7ff8a64aa078" - url: "https://pub.dev" - source: hosted - version: "0.1.5" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: a2d56211ee4d35d9b344d9d4ce60f362e4f5d1aafb988302906bd732bc731276 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - win32: - dependency: transitive - description: - name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 - url: "https://pub.dev" - source: hosted - version: "5.5.1" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d - url: "https://pub.dev" - source: hosted - version: "1.0.4" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - yaml_writer: - dependency: transitive - description: - name: yaml_writer - sha256: f182931a598f9a3fd29ff528f0caab98fffa713583e30c12c7a27ce0b66c1308 - url: "https://pub.dev" - source: hosted - version: "2.0.0" -sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index a0168fb..67bd826 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,10 +1,11 @@ name: 'just_another_workout_timer' -version: '1.13.0' +version: '1.14.0' environment: - sdk: '>=3.4.0' + sdk: '>=3.8.0' description: Just Another Workout Timer dependencies: + audioplayers : '^6.5.0' collection: '^1.18.0' dynamic_color: '^1.7.0' flutter: @@ -15,26 +16,26 @@ dependencies: flutter_native_splash: '^2.4.0' flutter_phoenix: '^1.1.1' flutter_tts: '^4.0.2' - fluttertoast: '^8.2.5' - intl: '^0.19.0' + fluttertoast: '^8.2.12' + intl: '^0.20.2' json_annotation: '^4.9.0' numberpicker: '^2.1.2' - path: '^1.8.0' + path: '^1.9.0' path_provider: '^2.1.3' pref: '^2.8.0' prefs: '^4.1.0+3' + prompt_dialog: '^1.0.16' provider: '^6.1.2' scrollable_positioned_list: '^0.3.8' - share_plus: '^9.0.0' - soundpool: '^2.4.1' + share_plus: '^11.1.0' url_launcher: '^6.2.6' uuid: '^4.4.0' wakelock_plus: '^1.2.5' dev_dependencies: build_runner: '^2.4.11' - flutter_launcher_icons: '^0.13.1' - flutter_lints: '^4.0.0' + flutter_launcher_icons: '^0.14.4' + flutter_lints: '^6.0.0' flutter_oss_licenses: '^3.0.2' intl_utils: '^2.8.7' json_serializable: '^6.8.0'