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'