From 6dabb9c9772226744bdfbba443ebb8623141a598 Mon Sep 17 00:00:00 2001 From: Rene Kievits Date: Tue, 28 Oct 2025 05:44:14 +0100 Subject: [PATCH] added sound --- assets/sfx/confirm.mp3 | Bin 0 -> 32600 bytes lib/src/screens/home_screen.dart | 72 +++++++++++------- lib/src/screens/vocab_screen.dart | 16 ++-- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 72 ++++++++++++++++++ pubspec.yaml | 3 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 10 files changed, 139 insertions(+), 35 deletions(-) create mode 100644 assets/sfx/confirm.mp3 diff --git a/assets/sfx/confirm.mp3 b/assets/sfx/confirm.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..7cfc0a862fe1bda5cdf23decc5218a74836b2c00 GIT binary patch literal 32600 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�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 K1^WN?$NvX0((R%E literal 0 HcmV?d00001 diff --git a/lib/src/screens/home_screen.dart b/lib/src/screens/home_screen.dart index 0a90d4e..0fac4c4 100644 --- a/lib/src/screens/home_screen.dart +++ b/lib/src/screens/home_screen.dart @@ -6,6 +6,8 @@ import '../services/deck_repository.dart'; import '../services/distractor_generator.dart'; import '../widgets/kanji_card.dart'; import '../widgets/options_grid.dart'; +import 'package:audioplayers/audioplayers.dart'; + import 'settings_screen.dart'; class _ReadingInfo { @@ -28,6 +30,7 @@ class _HomeScreenState extends State { String _status = 'Loading deck...'; final DistractorGenerator _dg = DistractorGenerator(); final Random _random = Random(); + final _audioPlayer = AudioPlayer(); QuizMode _mode = QuizMode.kanjiToEnglish; KanjiItem? _current; @@ -109,14 +112,20 @@ class _HomeScreenState extends State { void _nextQuestion() { _deck.sort((a, b) { - final aSrsItem = a.srsItems[_mode.toString()] ?? SrsItem(kanjiId: a.id, quizMode: _mode); - final bSrsItem = b.srsItems[_mode.toString()] ?? SrsItem(kanjiId: b.id, quizMode: _mode); + final aSrsItem = a.srsItems[_mode.toString()]; + final bSrsItem = b.srsItems[_mode.toString()]; - final stageComparison = aSrsItem.srsStage.compareTo(bSrsItem.srsStage); - if (stageComparison != 0) { - return stageComparison; + final aStage = aSrsItem?.srsStage ?? 0; + final bStage = bSrsItem?.srsStage ?? 0; + + if (aStage != bStage) { + return aStage.compareTo(bStage); } - return aSrsItem.lastAsked.compareTo(bSrsItem.lastAsked); + + final aLastAsked = aSrsItem?.lastAsked ?? DateTime.fromMillisecondsSinceEpoch(0); + final bLastAsked = bSrsItem?.lastAsked ?? DateTime.fromMillisecondsSinceEpoch(0); + + return aLastAsked.compareTo(bLastAsked); }); _current = _deck.first; @@ -128,16 +137,19 @@ class _HomeScreenState extends State { switch (_mode) { case QuizMode.kanjiToEnglish: _correctAnswers = [_current!.meanings.first]; - _options = [_correctAnswers.first, ..._dg.generateMeanings(_current!, _deck, 3)] - .map(_toTitleCase) - .toList() + _options = [ + _correctAnswers.first, + ..._dg.generateMeanings(_current!, _deck, 3) + ].map(_toTitleCase).toList() ..shuffle(); break; case QuizMode.englishToKanji: _correctAnswers = [_current!.characters]; - _options = [_correctAnswers.first, ..._dg.generateKanji(_current!, _deck, 3)] - ..shuffle(); + _options = [ + _correctAnswers.first, + ..._dg.generateKanji(_current!, _deck, 3) + ]..shuffle(); break; case QuizMode.reading: @@ -149,10 +161,15 @@ class _HomeScreenState extends State { ? _deck.expand((k) => k.onyomi) : _deck.expand((k) => k.kunyomi); - final distractors = - readingsSource.where((r) => !_correctAnswers.contains(r)).toSet().toList() + final distractors = readingsSource + .where((r) => !_correctAnswers.contains(r)) + .toSet() + .toList() ..shuffle(); - _options = ([_correctAnswers[_random.nextInt(_correctAnswers.length)], ...distractors.take(3)]) + _options = ([ + _correctAnswers[_random.nextInt(_correctAnswers.length)], + ...distractors.take(3) + ]) ..shuffle(); break; } @@ -176,29 +193,31 @@ class _HomeScreenState extends State { var srsItem = current.srsItems[srsKey]; final isNew = srsItem == null; - srsItem ??= SrsItem(kanjiId: current.id, quizMode: _mode, readingType: readingType); - + final srsItemForUpdate = srsItem ??= + SrsItem(kanjiId: current.id, quizMode: _mode, readingType: readingType); setState(() { _asked += 1; if (isCorrect) { _score += 1; - srsItem!.srsStage += 1; + _audioPlayer.play(AssetSource('sfx/confirm.mp3')); } else { - srsItem!.srsStage = max(0, srsItem.srsStage - 1); + srsItemForUpdate.srsStage = max(0, srsItemForUpdate.srsStage - 1); } - srsItem.lastAsked = DateTime.now(); - current.srsItems[srsKey] = srsItem; + srsItemForUpdate.lastAsked = DateTime.now(); + current.srsItems[srsKey] = srsItemForUpdate; }); if (isNew) { - await repo.insertSrsItem(srsItem); + await repo.insertSrsItem(srsItemForUpdate); } else { - await repo.updateSrsItem(srsItem); + await repo.updateSrsItem(srsItemForUpdate); } final correctDisplay = (_mode == QuizMode.kanjiToEnglish) ? _toTitleCase(_correctAnswers.first) - : (_mode == QuizMode.reading ? _correctAnswers.join(', ') : _correctAnswers.first); + : (_mode == QuizMode.reading + ? _correctAnswers.join(', ') + : _correctAnswers.first); final snack = SnackBar( content: Text( @@ -271,7 +290,6 @@ class _HomeScreenState extends State { ], ), const SizedBox(height: 12), - Wrap( spacing: 6, runSpacing: 4, @@ -282,9 +300,7 @@ class _HomeScreenState extends State { _buildChoiceChip('Reading', QuizMode.reading), ], ), - const SizedBox(height: 18), - Expanded( flex: 3, child: Center( @@ -303,9 +319,7 @@ class _HomeScreenState extends State { ), ), ), - const SizedBox(height: 12), - SafeArea( top: false, child: Column( @@ -346,4 +360,4 @@ class _HomeScreenState extends State { backgroundColor: const Color(0xFF1E1E1E), ); } -} \ No newline at end of file +} diff --git a/lib/src/screens/vocab_screen.dart b/lib/src/screens/vocab_screen.dart index 1f53898..33cbb1e 100644 --- a/lib/src/screens/vocab_screen.dart +++ b/lib/src/screens/vocab_screen.dart @@ -6,11 +6,13 @@ import '../services/deck_repository.dart'; import '../services/distractor_generator.dart'; import '../widgets/kanji_card.dart'; import '../widgets/options_grid.dart'; +import 'package:audioplayers/audioplayers.dart'; import 'settings_screen.dart'; class VocabScreen extends StatefulWidget { const VocabScreen({super.key}); + @override State createState() => _VocabScreenState(); } @@ -19,7 +21,7 @@ class _VocabScreenState extends State { bool _loading = false; String _status = 'Loading deck...'; final DistractorGenerator _dg = DistractorGenerator(); - final Random _random = Random(); + final _audioPlayer = AudioPlayer(); VocabQuizMode _mode = VocabQuizMode.vocabToEnglish; VocabularyItem? _current; @@ -138,17 +140,19 @@ class _VocabScreenState extends State { final srsKey = _mode.toString(); - var srsItem = current.srsItems[srsKey]; - final isNew = srsItem == null; - srsItem ??= VocabSrsItem(vocabId: current.id, quizMode: _mode); + var srsItemNullable = current.srsItems[srsKey]; + final isNew = srsItemNullable == null; + final srsItem = + srsItemNullable ?? VocabSrsItem(vocabId: current.id, quizMode: _mode); setState(() { _asked += 1; if (isCorrect) { _score += 1; - srsItem!.srsStage += 1; + _audioPlayer.play(AssetSource('sfx/confirm.mp3')); + srsItem.srsStage += 1; } else { - srsItem!.srsStage = max(0, srsItem.srsStage - 1); + srsItem.srsStage = max(0, srsItem.srsStage - 1); } srsItem.lastAsked = DateTime.now(); current.srsItems[srsKey] = srsItem; diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..1830e5c 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin"); + audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2e1de87..e9abb91 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + audioplayers_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index d0e7d18..2a8f994 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,11 +5,13 @@ import FlutterMacOS import Foundation +import audioplayers_darwin import path_provider_foundation import shared_preferences_foundation import sqflite_darwin func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) diff --git a/pubspec.lock b/pubspec.lock index 37097cf..df4bfef 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -41,6 +41,62 @@ packages: url: "https://pub.dev" source: hosted version: "2.13.0" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: "5441fa0ceb8807a5ad701199806510e56afde2b4913d9d17c2f19f2902cf0ae4" + url: "https://pub.dev" + source: hosted + version: "6.5.1" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: "60a6728277228413a85755bd3ffd6fab98f6555608923813ce383b190a360605" + url: "https://pub.dev" + source: hosted + version: "5.2.1" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: "0811d6924904ca13f9ef90d19081e4a87f7297ddc19fc3d31f60af1aaafee333" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: f75bce1ce864170ef5e6a2c6a61cd3339e1a17ce11e99a25bae4474ea491d001 + url: "https://pub.dev" + source: hosted + version: "4.2.1" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "0e2f6a919ab56d0fec272e801abc07b26ae7f31980f912f24af4748763e5a656" + url: "https://pub.dev" + source: hosted + version: "7.1.1" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "1c0f17cec68455556775f1e50ca85c40c05c714a99c5eb1d2d57cc17ba5522d7" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "4048797865105b26d47628e6abb49231ea5de84884160229251f37dfcbe52fd7" + url: "https://pub.dev" + source: hosted + version: "4.2.1" boolean_selector: dependency: transitive description: @@ -693,6 +749,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.10.1" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" sqflite: dependency: "direct main" description: @@ -821,6 +885,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" + uuid: + dependency: transitive + description: + name: uuid + sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff + url: "https://pub.dev" + source: hosted + version: "4.5.1" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 14cf507..6efbdf4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: path: ^1.9.1 provider: ^6.1.5+1 http: ^1.5.0 + audioplayers: ^6.0.0 dev_dependencies: flutter_test: @@ -28,3 +29,5 @@ flutter_icons: flutter: uses-material-design: true + assets: + - assets/sfx/confirm.mp3 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 8b6d468..09e8e2c 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + AudioplayersWindowsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index b93c4c3..375535c 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + audioplayers_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST