diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..334c003d --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: blockbasti +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 12269554..b444d651 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -13,20 +13,24 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 with: - java-version: '14.x' + java-version: "14.x" - uses: subosito/flutter-action@v1 with: - channel: 'stable' + channel: "stable" + - uses: actions/cache@v2 + with: + path: /opt/hostedtoolcache/flutter + key: flutter-install-cache - name: Setup Flutter run: | flutter config --no-analytics flutter pub get sh ./scripts/generate_code.sh - + - name: Build APKs run: flutter build apk --build-number $(printf '%(%Y%m%d)T\n' -1) --debug - + - name: Upload build artifacts uses: actions/upload-artifact@v2.2.2 with: diff --git a/README.md b/README.md index 40ecdfbc..4856ddf2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url] [![MIT License][license-shield]][license-url] - +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/X8X8827HU) diff --git a/android/build.gradle b/android/build.gradle index 5f4af1d7..fab60052 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.5.31' + ext.kotlin_version = '1.6.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.3' + classpath 'com.android.tools.build:gradle:7.0.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index e79a72d2..bf9add3a 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip -distributionSha256Sum=a8da5b02437a60819cad23e10fc7e9cf32bcb57029d9cb277e26eeff76ce014b \ No newline at end of file +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip +distributionSha256Sum=c9490e938b221daf0094982288e4038deed954a3f12fb54cbf270ddf4e37d879 \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 94aff15a..95b44fed 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -64,6 +64,9 @@ "tts": "Text-zu-Sprache (TTS)", "ttsLang": "TTS Sprache", "ttsLangDesc": "Wähle eine Sprache aus\n(nur bei aktiviertem TTS)", + "ttsVoice": "TTS Stimme (experimentell)", + "ttsVoiceDesc": "Wähle eine Stimme für TTS", + "voice": "Stimme", "useSound": "Töne nutzen", "useSoundDesc": "Übungsbeginn und -ende mit einfachen Tönen ankündigen", "useTTS": "Text-zu-Sprache nutzen", diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 30a4ba2d..9717ba5c 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -61,6 +61,9 @@ "tts": "Text-to-Speech (TTS)", "ttsLang": "TTS Language", "ttsLangDesc": "Select a language\n(only when TTS is enabled)", + "ttsVoice": "TTS Voice (experimental)", + "ttsVoiceDesc": "Select a voice for TTS", + "voice": "Voice", "useSound": "Use sound effects", "useSoundDesc": "Use simple sounds to indicate starts and endings of exercises", "useTTS": "Use Text-to-Speech", diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index b55a83ff..499ca608 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -64,6 +64,9 @@ "tts": "Synthèse vocale (TTS)", "ttsLang": "Langue du TTS", "ttsLangDesc": "Choisir une langue\n(quand TTS est activé seulement)", + "ttsVoice": "Voix du TTS (expérimental)", + "ttsVoiceDesc": "Sélectionnez une voix pour TTS", + "voice": "Voix", "useSound": "Utiliser les sons", "useSoundDesc": "Utiliser des sons simples pour indiquer le début et la fin des exercices", "useTTS": "Utiliser la synthèse vocale", diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 2fd4da51..81122e9b 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -64,6 +64,9 @@ "tts": "Sintesi vocale (TTS)", "ttsLang": "Lingua TTS", "ttsLangDesc": "Scegli una lingua\n(Solo se TTS è attivo)", + "ttsVoice": "TTS Voce (sperimentale)", + "ttsVoiceDesc": "Selezionare una voce per TTS", + "voice": "Voce", "useSound": "Segnale sonoro", "useSoundDesc": "Un segnale sonoro indicherà l'inizio e la fine degli esercizi", "useTTS": "Usa la sintesi vocale Text-To-Speech (TTS)", diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 74061de6..c35a74b1 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -64,6 +64,9 @@ "tts": "Text-to-Speech (TTS)", "ttsLang": "TTS Язык", "ttsLangDesc": "Выберите язык\n(только когда TTS включен)", + "ttsVoice": "TTS голос (экспериментальный)", + "ttsVoiceDesc": "Выберите голос для TTS", + "voice": "голос", "useSound": "Использовать звуковые эффекты", "useSoundDesc": "Использовать простые звуки, чтобы анонсировать начало и конец упражнения.", "useTTS": "Использовать Text-to-Speech", diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb new file mode 100644 index 00000000..c117822b --- /dev/null +++ b/lib/l10n/intl_tr.arb @@ -0,0 +1,85 @@ +{ + "@@locale": "tr", + "addExercise": "Egzersiz ekle", + "addRest": "Dinlenme ekle", + "addSet": "Set ekle", + "addWorkout": "Program ekle", + "announceUpcomingExercise": "Sıradaki egzersizi bildir", + "AnnounceUpcomingExerciseDesc": "TTS etkin olduğunda, sıradaki egzersizi bildir", + "backup": "Yedekleme", + "cancel": "İptal", + "countRepetitions": "{count} tekrar", + "currentSet": "Şu anki set", + "delete": "Sil", + "deleteConfirmation": "\"{title}\" programını silmek ister misiniz?", + "deleteExercise": "Egzersizi sil", + "deleteSet": "Seti sil", + "deleteWorkout": "Programı sil", + "duplicate": "Çoğalt", + "durationLeft": "Kalan süre: {timeLeft}-{timeTotal}", + "durationWithTime": "Süre: {formattedTime}", + "editWorkout": "Programı düzenle", + "enterWorkoutName": "Lütfen program için bir isim giriniz!", + "exercise": "Egzersiz", + "exerciseOf": "Egzersiz {total}-{currentIndex}", + "exitCheck": "Çıkmak istediğinizden emin misiniz?", + "export": "Bütün programları dışarı aktar", + "firstExercise": "İlk: {name}", + "general": "Genel", + "halfwayDone": "Yarısı bitti", + "import": "Bir yedeği içe aktar", + "importedCount": "{count} program içe aktarıldı", + "keepScreenAwake": "Ekranı açık tut", + "language": "Dil", + "licenses": "Lisanslar", + "moveExerciseDown": "Egzersizi aşağı taşı", + "moveExerciseUp": "Egzersizi yukarı taşı", + "moveSetDown": "Seti aşağı taşı", + "moveSetUp": "Seti yukarı taşı", + "name": "İsim", + "nextExercise": "Sırada: {name}", + "nextSet": "Sıradaki set", + "no": "Hayır", + "noSound": "Ses efekti yok", + "noSoundDesc": "Bütün ses çıkışlarını sessize al", + "ossLicenses": "Açık Kaynak Lisansları", + "overwriteExistingWorkout": "Var olan programın üzerine yazılsın mı?", + "playTickEverySecond": "Her saniye tik sesi oynat", + "repetitions": "Tekrar:", + "repOf": "Tekrar {currentIndex}-{total}", + "reportIssuesOrRequestAFeature": "Sorun bildir ya da bir özellik iste", + "rest": "Dinlenme", + "saved": "Kaydedildi", + "saveWorkout": "Programı kaydet", + "setIndex": "Set {number}", + "setOf": "Set {currentIndex}-{total}", + "settingHalfway": "Programın yarısında ses çal ya da bildirim yap", + "settings": "Ayarlar", + "soundOutput": "Ses çıkışı", + "startWorkout": "Programı başlat", + "title": "Just Another Workout Timer", + "tts": "Metinden konuşmaya (TTS)", + "ttsLang": "TTS Dili", + "ttsLangDesc": "Bir dil seç\n(yalnızca TTS etkin olduğunda)", + "ttsVoice": "TTS Ses (deneysel)", + "ttsVoiceDesc": "TTS için bir ses seçin", + "voice": "Ses", + "useSound": "Ses efektleri kullan", + "useSoundDesc": "Egzersizlerin başlangıcını ve bitişini bildirmek için basit sesler kullan", + "useTTS": "Metinden-konuşmaya kullan", + "useTTSDesc": "Şu anki ve sıradaki egzersizi bildir", + "viewLicense": "Lisansı göster", + "viewOnGithub": "GitHub'da göster", + "viewOSSLicenses": "Açık kaynak lisanslarını göster", + "workoutComplete": "Program tamamlandı", + "workouts": "Programlar", + "yes": "Evet", + "yesExit": "Evet, çık", + "expanded_setlist": "Genişletilmiş set listesi", + "expanded_setlist_info": "Her zaman setin tamamını göster", + "seconds": "Saniyeler", + "theme": "Tema", + "theme_dark": "Koyu", + "theme_light": "Açık", + "theme_system": "Sistem" +} \ No newline at end of file diff --git a/lib/languages.dart b/lib/languages.dart new file mode 100644 index 00000000..164812c3 --- /dev/null +++ b/lib/languages.dart @@ -0,0 +1,26 @@ +import 'dart:core'; + +class AppLanguage { + String displayName; + String localeCode; + String languageCode; + + AppLanguage(this.displayName, this.localeCode, this.languageCode); +} + +class Languages { + static final List languages = [ + AppLanguage("English", "en", "en-US"), + AppLanguage("Deutsch", "de", "de-DE"), + AppLanguage("Français", "fr", "fr-FR"), + AppLanguage("Italiano", "it", "it-IT"), + AppLanguage("Русский", "ru", "ru-RU"), + AppLanguage("Türkçe", "tr", "tr-TR") + ]; + + static List get languageCodes => + languages.map((lang) => lang.languageCode).toList(); + + static AppLanguage fromLocaleCode(String localeCode) => languages + .firstWhere((lang) => lang.localeCode == localeCode, orElse: null); +} diff --git a/lib/main.dart b/lib/main.dart index e1b8375d..6357c14a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -90,7 +90,8 @@ class JAWTApp extends StatelessWidget { } for (var locale in locales!) { - if (supportedLocales.contains(locale)) { + if (supportedLocales + .any((element) => element.languageCode == locale.languageCode)) { PrefService.of(context).set('lang', locale.languageCode); return locale; } diff --git a/lib/number_stepper.dart b/lib/number_stepper.dart index 8486ebc5..6c555c67 100644 --- a/lib/number_stepper.dart +++ b/lib/number_stepper.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/painting.dart'; import 'package:flutter/services.dart'; import 'generated/l10n.dart'; diff --git a/lib/settings_page.dart b/lib/settings_page.dart index 55d4ce06..2a404c4e 100644 --- a/lib/settings_page.dart +++ b/lib/settings_page.dart @@ -2,7 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_phoenix/flutter_phoenix.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:just_another_workout_timer/languages.dart'; import 'package:pref/pref.dart'; +import 'package:prefs/prefs.dart'; import 'package:url_launcher/url_launcher.dart'; import 'generated/l10n.dart'; @@ -43,19 +45,15 @@ class _SettingsPageState extends State { ), PrefDropdown( title: Text(S.of(context).language), - items: [ - DropdownMenuItem( - child: Text('English'), - value: 'en', - ), - DropdownMenuItem(child: Text('Deutsch'), value: 'de'), - DropdownMenuItem(child: Text('Italiano'), value: 'it'), - DropdownMenuItem(child: Text('Français'), value: 'fr'), - DropdownMenuItem(child: Text('Русский'), value: 'ru'), - ], + items: Languages.languages + .map((lang) => DropdownMenuItem( + child: Text(lang.displayName), value: lang.localeCode)) + .toList(), onChange: (String value) { + var lang = Languages.fromLocaleCode(value); setState(() { - S.load(Locale(value)); + S.load(Locale(lang.localeCode)); + TTSHelper.setLanguage(lang.languageCode); }); }, pref: 'lang', @@ -141,22 +139,26 @@ class _SettingsPageState extends State { Text(S.of(context).tts, style: TextStyle(color: Colors.blue)), ), PrefDropdown( - title: Text(S.of(context).ttsLang), - pref: 'tts_lang', - subtitle: Text(S.of(context).ttsLangDesc), - items: [ - DropdownMenuItem( - child: Text('English'), - value: 'en-US', - ), - DropdownMenuItem(child: Text('Deutsch'), value: 'de-DE'), - DropdownMenuItem(child: Text('Italiano'), value: 'it-IT'), - DropdownMenuItem(child: Text('Français'), value: 'fr-FR'), - DropdownMenuItem(child: Text('Русский'), value: 'ru-RU'), - ], + title: Text(S.of(context).ttsVoice), + pref: 'tts_voice', + subtitle: Text(S.of(context).ttsVoiceDesc), + items: TTSHelper.voices + .where((voice) => + voice.locale == Prefs.getString('tts_lang', 'en-US')) + .toList() + .asMap() + .entries + .map((voice) => DropdownMenuItem( + child: Text( + '${S.of(context).voice} ${voice.key + 1} (${voice.value.name})'), + value: voice.value.name)) + .toList(), disabled: !TTSHelper.available, onChange: (String value) { - TTSHelper.flutterTts.setLanguage(value); + TTSHelper.flutterTts.setVoice({ + "name": value, + "locale": Prefs.getString('tts_lang', 'en-US') + }); }, ), PrefSwitch( diff --git a/lib/tts_helper.dart b/lib/tts_helper.dart index 852863bd..1ac1ba7e 100644 --- a/lib/tts_helper.dart +++ b/lib/tts_helper.dart @@ -3,10 +3,23 @@ import 'dart:async'; import 'package:flutter_tts/flutter_tts.dart'; import 'package:prefs/prefs.dart'; +import 'languages.dart'; + +class TTSVoice { + String name; + String locale; + + TTSVoice(this.name, this.locale); + + @override + String toString() => '{name: $name, locale: $locale}'; +} + /// handles everything related to TTS class TTSHelper { static FlutterTts flutterTts = FlutterTts(); + /// TTS is available? static bool available = true; /// enable/disable TTS output @@ -14,14 +27,33 @@ class TTSHelper { static bool isTalking = false; + /// list of all available voices for TTS + static List voices = []; + static Future init() async { flutterTts = FlutterTts(); + // populate the list of available TTS voices + List allVoices = await flutterTts.getVoices; + voices = allVoices.map((element) { + Map e = element; + var voice = TTSVoice(e.entries.first.value, e.entries.last.value); + return voice; + }).toList(growable: true); + voices + .retainWhere((voice) => Languages.languageCodes.contains(voice.locale)); + useTTS = Prefs.getString('sound') == 'tts'; var ttsLang = Prefs.getString('tts_lang', 'en-US'); await Prefs.setString('tts_lang', ttsLang); + var ttsVoice = Prefs.getString('tts_voice', ""); + if (ttsVoice == "") { + ttsVoice = voices.firstWhere((voice) => voice.locale == ttsLang).name; + await Prefs.setString('tts_voice', ttsVoice); + } + flutterTts.setStartHandler(() { isTalking = true; }); @@ -35,6 +67,7 @@ class TTSHelper { .timeout(Duration(seconds: 1)) .then((_) async { await flutterTts.setVolume(1.0); + await flutterTts.setVoice({"name": ttsVoice, "locale": ttsLang}); }); } on TimeoutException { available = false; @@ -44,6 +77,17 @@ class TTSHelper { } } + static void setLanguage(String languageCode) async { + if (!available) return; + Prefs.setString("tts_lang", languageCode); + await flutterTts.setLanguage(languageCode); + + var ttsVoice = + voices.firstWhere((voice) => voice.locale == languageCode).name; + await Prefs.setString('tts_voice', ttsVoice); + await flutterTts.setVoice({"name": ttsVoice, "locale": languageCode}); + } + static void speak(String text) async { if (!useTTS) return; await flutterTts.speak(text); diff --git a/lib/workout_runner.dart b/lib/workout_runner.dart index f529adbe..076128d6 100644 --- a/lib/workout_runner.dart +++ b/lib/workout_runner.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'dart:collection'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:prefs/prefs.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:wakelock/wakelock.dart'; @@ -308,6 +307,7 @@ class _WorkoutPageState extends State { itemCount: set.exercises.length, itemScrollController: _itemScrollController, itemPositionsListener: _itemPositionsListener, + shrinkWrap: true, ); if (!Prefs.getBool('expanded_setlist', false)) { @@ -316,10 +316,7 @@ class _WorkoutPageState extends State { child: list, ); } else { - return SizedBox( - height: 72 * set.exercises.length + 1, - child: list, - ); + return list; } } diff --git a/pubspec.lock b/pubspec.lock index 9cee6107..cce10cec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,21 +7,21 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "30.0.0" + version: "34.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "2.7.0" + version: "3.2.0" archive: dependency: transitive description: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.1.6" + version: "3.1.9" args: dependency: transitive description: @@ -42,7 +42,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.2.1" build_config: dependency: transitive description: @@ -63,21 +63,21 @@ packages: name: build_resolvers url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.6" build_runner: dependency: "direct dev" description: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" + version: "2.1.7" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.2.2" + version: "7.2.3" built_collection: dependency: transitive description: @@ -91,14 +91,14 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.3" + version: "8.1.4" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" charcode: dependency: transitive description: @@ -168,7 +168,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "2.2.1" effective_dart: dependency: "direct dev" description: @@ -227,7 +227,7 @@ packages: name: flutter_native_splash url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.3.3" flutter_oss_licenses: dependency: "direct dev" description: @@ -248,7 +248,7 @@ packages: name: flutter_tts url: "https://pub.dartlang.org" source: hosted - version: "3.2.2" + version: "3.3.3" flutter_web_plugins: dependency: transitive description: flutter @@ -309,7 +309,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.0.8" + version: "3.1.1" intl: dependency: transitive description: @@ -323,7 +323,7 @@ packages: name: intl_utils url: "https://pub.dartlang.org" source: hosted - version: "2.5.1" + version: "2.6.1" io: dependency: transitive description: @@ -344,14 +344,14 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.3.0" + version: "4.4.0" json_serializable: dependency: "direct dev" description: name: json_serializable url: "https://pub.dartlang.org" source: hosted - version: "6.0.1" + version: "6.1.4" logging: dependency: transitive description: @@ -400,35 +400,49 @@ packages: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.6" + version: "2.0.8" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + path_provider_ios: + dependency: transitive + description: + name: path_provider_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.7" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.5" path_provider_macos: dependency: transitive description: name: path_provider_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.5" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.3" path_provider_windows: dependency: transitive description: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.5" petitparser: dependency: transitive description: @@ -442,14 +456,14 @@ packages: name: platform url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.2" pool: dependency: transitive description: @@ -470,7 +484,7 @@ packages: name: prefs url: "https://pub.dartlang.org" source: hosted - version: "3.3.0" + version: "3.4.0+01" process: dependency: transitive description: @@ -491,28 +505,42 @@ packages: name: pubspec_parse url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.2.0" scrollable_positioned_list: dependency: "direct main" description: name: scrollable_positioned_list url: "https://pub.dartlang.org" source: hosted - version: "0.2.2" + version: "0.2.3" shared_preferences: dependency: transitive description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.0.12" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.10" + shared_preferences_ios: + dependency: transitive + description: + name: shared_preferences_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.9" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.4" shared_preferences_macos: dependency: transitive description: @@ -533,14 +561,14 @@ packages: name: shared_preferences_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.3" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.4" shelf: dependency: transitive description: @@ -594,21 +622,21 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.2.1" source_helper: dependency: transitive description: name: source_helper url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" stack_trace: dependency: transitive description: @@ -671,35 +699,49 @@ packages: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.0.12" + version: "6.0.18" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.14" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.14" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.3" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.3" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.5" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.6" url_launcher_windows: dependency: transitive description: @@ -720,14 +762,14 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" wakelock: dependency: "direct main" description: name: wakelock url: "https://pub.dartlang.org" source: hosted - version: "0.5.6" + version: "0.6.1" wakelock_macos: dependency: transitive description: @@ -776,7 +818,7 @@ packages: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.3.8" xdg_directories: dependency: transitive description: @@ -799,5 +841,5 @@ packages: source: hosted version: "3.1.0" sdks: - dart: ">=2.14.0 <3.0.0" + dart: ">=2.15.1 <3.0.0" flutter: ">=2.5.0" diff --git a/pubspec.yaml b/pubspec.yaml index 145da7d6..04feb098 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,24 +4,24 @@ description: Just Another Workout Timer version: 1.9.1+20211114 environment: - sdk: ">=2.13.0 <3.0.0" + sdk: ">=2.15.1 <3.0.0" dependencies: flutter: sdk: flutter - flutter_tts: 3.2.2 - path_provider: 2.0.6 + flutter_tts: 3.3.3 + path_provider: 2.0.8 flutter_file_dialog: 2.3.0 pref: 2.4.0 fluttertoast: 8.0.8 - prefs: 3.3.0 - url_launcher: 6.0.12 - wakelock: 0.5.6 + prefs: 3.4.0+01 + url_launcher: 6.0.18 + wakelock: 0.6.1 soundpool: 2.2.0 - intl_utils: 2.5.1 - json_annotation: 4.3.0 + intl_utils: 2.6.1 + json_annotation: 4.4.0 flutter_phoenix: 1.0.0 - scrollable_positioned_list: 0.2.2 + scrollable_positioned_list: 0.2.3 flutter_localizations: sdk: flutter uuid: 3.0.5 @@ -29,10 +29,10 @@ dependencies: dev_dependencies: flutter_launcher_icons: 0.9.2 flutter_oss_licenses: 1.1.1 - flutter_native_splash: 1.3.1 + flutter_native_splash: 1.3.3 effective_dart: 1.3.2 - json_serializable: 6.0.1 - build_runner: 2.1.5 + json_serializable: 6.1.4 + build_runner: 2.1.7 flutter: uses-material-design: true