diff --git a/.gitignore b/.gitignore index 13c88ec..ae5458c 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ doc/api/ android/key.properties android/local.properties *.log +.flutter-plugins +.flutter-plugins-dependencies diff --git a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java index d007606..e2a3095 100644 --- a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java +++ b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -1,6 +1,7 @@ package io.flutter.plugins; import io.flutter.plugin.common.PluginRegistry; +import io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin; /** * Generated file. Do not edit. @@ -10,6 +11,7 @@ public static void registerWith(PluginRegistry registry) { if (alreadyRegisteredWith(registry)) { return; } + SharedPreferencesPlugin.registerWith(registry.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin")); } private static boolean alreadyRegisteredWith(PluginRegistry registry) { diff --git a/assets/LICENSES.txt b/assets/LICENSES.txt index 8d41afa..5fe38b2 100644 --- a/assets/LICENSES.txt +++ b/assets/LICENSES.txt @@ -1,3 +1,20 @@ +Nihonoari +Copyright (C) 2020 Naval Alcalá + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + THE FOLLOWING SETS FORTH ATTRIBUTION NOTICES FOR THIRD PARTY SOFTWARE THAT MAY BE CONTAINED IN THIS APPLICATION. @@ -6,8 +23,6 @@ THE FOLLOWING SETS FORTH ATTRIBUTION NOTICES FOR THIRD PARTY SOFTWARE THAT MAY B -The following software may be included in this application: - kana (https://github.com/paulorobertocruz/kana) @@ -40,9 +55,7 @@ SOFTWARE. ===== - -The following software may be included in this application: font_awesome_flutter (https://github.com/brianegan/font_awesome_flutter) @@ -55,4 +68,38 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +===== + + + + +shared_preferences (https://pub.dev/packages/shared_preferences) + +Copyright 2017 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fastlane/metadata/android/en-US/changelogs/7.txt b/fastlane/metadata/android/en-US/changelogs/7.txt new file mode 100644 index 0000000..e0f91a4 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/7.txt @@ -0,0 +1,2 @@ +* The selected Kana sets are remembered +* Added UI translation \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png index 49aa478..5512fa9 100644 Binary files a/fastlane/metadata/android/en-US/images/icon.png and b/fastlane/metadata/android/en-US/images/icon.png differ diff --git a/fastlane/metadata/android/es/changelogs/7.txt b/fastlane/metadata/android/es/changelogs/7.txt new file mode 100644 index 0000000..d7f6eba --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/7.txt @@ -0,0 +1,2 @@ +* Se recuerda el conjunto de Kanas seleccionados +* Se incorpora traducción a la interfaz \ No newline at end of file diff --git a/fastlane/metadata/android/es/images/icon.png b/fastlane/metadata/android/es/images/icon.png index 49aa478..5512fa9 100644 Binary files a/fastlane/metadata/android/es/images/icon.png and b/fastlane/metadata/android/es/images/icon.png differ diff --git a/fastlane/metadata/android/fr/changelogs/4.txt b/fastlane/metadata/android/fr/changelogs/4.txt new file mode 100644 index 0000000..f2e7c42 --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/4.txt @@ -0,0 +1 @@ +Correction des erreurs diff --git a/fastlane/metadata/android/fr/changelogs/5.txt b/fastlane/metadata/android/fr/changelogs/5.txt new file mode 100644 index 0000000..6de71dd --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/5.txt @@ -0,0 +1,4 @@ +* Ajouter par groupe Hiragana et Katakana +* Algorithme de question amélioré +* Réparé le Katakana "ri" +* Thème sombre amélioré diff --git a/fastlane/metadata/android/fr/changelogs/6.txt b/fastlane/metadata/android/fr/changelogs/6.txt new file mode 100644 index 0000000..5841ce4 --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/6.txt @@ -0,0 +1,2 @@ +* Algorithme de répétition espacée +* Le clavier ne se cache pas quand l'utilisateur accepte diff --git a/fastlane/metadata/android/fr/changelogs/7.txt b/fastlane/metadata/android/fr/changelogs/7.txt new file mode 100644 index 0000000..20c36c7 --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/7.txt @@ -0,0 +1,2 @@ +* Les ensembles Kana sélectionnés sont mémorisés +* Traduction de l'UI ajoutée \ No newline at end of file diff --git a/fastlane/metadata/android/fr/full_description.txt b/fastlane/metadata/android/fr/full_description.txt new file mode 100644 index 0000000..8b3d148 --- /dev/null +++ b/fastlane/metadata/android/fr/full_description.txt @@ -0,0 +1,4 @@ +Nihonoari est un projet Open Source créé pour offrir à la communauté une application simple pour mémoriser et pratiquer l'alphabet Hiragana et Katakana sans publicité, paiements et fonctions inutiles, le plus simple est le mieux. + +Veux tu collaborer avec le projet ou reporter un erreur? +https://github.com/aeri/Nihonoari-App diff --git a/fastlane/metadata/android/fr/images/icon.png b/fastlane/metadata/android/fr/images/icon.png new file mode 100644 index 0000000..5512fa9 Binary files /dev/null and b/fastlane/metadata/android/fr/images/icon.png differ diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/1.png b/fastlane/metadata/android/fr/images/phoneScreenshots/1.png new file mode 100644 index 0000000..adb4923 Binary files /dev/null and b/fastlane/metadata/android/fr/images/phoneScreenshots/1.png differ diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/2.png b/fastlane/metadata/android/fr/images/phoneScreenshots/2.png new file mode 100644 index 0000000..7de0cd0 Binary files /dev/null and b/fastlane/metadata/android/fr/images/phoneScreenshots/2.png differ diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/3.png b/fastlane/metadata/android/fr/images/phoneScreenshots/3.png new file mode 100644 index 0000000..1ed14be Binary files /dev/null and b/fastlane/metadata/android/fr/images/phoneScreenshots/3.png differ diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/4.png b/fastlane/metadata/android/fr/images/phoneScreenshots/4.png new file mode 100644 index 0000000..37e38fc Binary files /dev/null and b/fastlane/metadata/android/fr/images/phoneScreenshots/4.png differ diff --git a/fastlane/metadata/android/fr/images/phoneScreenshots/5.png b/fastlane/metadata/android/fr/images/phoneScreenshots/5.png new file mode 100644 index 0000000..3edbc1f Binary files /dev/null and b/fastlane/metadata/android/fr/images/phoneScreenshots/5.png differ diff --git a/fastlane/metadata/android/fr/short_description.txt b/fastlane/metadata/android/fr/short_description.txt new file mode 100644 index 0000000..27920eb --- /dev/null +++ b/fastlane/metadata/android/fr/short_description.txt @@ -0,0 +1 @@ +Une app petite et minimaliste pour pratiquer les Kana japonais diff --git a/fastlane/metadata/android/fr/title.txt b/fastlane/metadata/android/fr/title.txt new file mode 100644 index 0000000..bb4e37b --- /dev/null +++ b/fastlane/metadata/android/fr/title.txt @@ -0,0 +1 @@ +Nihonoari: Hiragana & Katakana \ No newline at end of file diff --git a/fastlane/metadata/android/ru/changelogs/4.txt b/fastlane/metadata/android/ru/changelogs/4.txt new file mode 100644 index 0000000..3280303 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/4.txt @@ -0,0 +1 @@ +Fix some errors. \ No newline at end of file diff --git a/fastlane/metadata/android/ru/changelogs/5.txt b/fastlane/metadata/android/ru/changelogs/5.txt new file mode 100644 index 0000000..30a47bb --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/5.txt @@ -0,0 +1,4 @@ +* Set selection in Hiragana and Katakana +* Improved quiz core +* Fixed "ri" Katakana +* Improved dark style \ No newline at end of file diff --git a/fastlane/metadata/android/ru/changelogs/6.txt b/fastlane/metadata/android/ru/changelogs/6.txt new file mode 100644 index 0000000..2b55d9f --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/6.txt @@ -0,0 +1,2 @@ +* Spaced repetition algorithm +* The keyboard does not close after submit \ No newline at end of file diff --git a/fastlane/metadata/android/ru/changelogs/7.txt b/fastlane/metadata/android/ru/changelogs/7.txt new file mode 100644 index 0000000..e0f91a4 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/7.txt @@ -0,0 +1,2 @@ +* The selected Kana sets are remembered +* Added UI translation \ No newline at end of file diff --git a/fastlane/metadata/android/ru/full_description.txt b/fastlane/metadata/android/ru/full_description.txt new file mode 100644 index 0000000..828c6e2 --- /dev/null +++ b/fastlane/metadata/android/ru/full_description.txt @@ -0,0 +1,4 @@ +Нихоноари - это проект с открытым исходным кодом, что предоставляет обществу простое приложение для запоминания и практикования алфавитов Хираганы и Катаканы без реклам, внутренних покупок и бесполезных функцый. Чем проще - тем лучше. + +Хотите сотрудничать с проектом или известить о некоторых ошибках? +https://github.com/aeri/Nihonoari-App diff --git a/fastlane/metadata/android/ru/images/icon.png b/fastlane/metadata/android/ru/images/icon.png new file mode 100644 index 0000000..5512fa9 Binary files /dev/null and b/fastlane/metadata/android/ru/images/icon.png differ diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/1.png b/fastlane/metadata/android/ru/images/phoneScreenshots/1.png new file mode 100644 index 0000000..adb4923 Binary files /dev/null and b/fastlane/metadata/android/ru/images/phoneScreenshots/1.png differ diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/2.png b/fastlane/metadata/android/ru/images/phoneScreenshots/2.png new file mode 100644 index 0000000..7de0cd0 Binary files /dev/null and b/fastlane/metadata/android/ru/images/phoneScreenshots/2.png differ diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/3.png b/fastlane/metadata/android/ru/images/phoneScreenshots/3.png new file mode 100644 index 0000000..1ed14be Binary files /dev/null and b/fastlane/metadata/android/ru/images/phoneScreenshots/3.png differ diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/4.png b/fastlane/metadata/android/ru/images/phoneScreenshots/4.png new file mode 100644 index 0000000..37e38fc Binary files /dev/null and b/fastlane/metadata/android/ru/images/phoneScreenshots/4.png differ diff --git a/fastlane/metadata/android/ru/images/phoneScreenshots/5.png b/fastlane/metadata/android/ru/images/phoneScreenshots/5.png new file mode 100644 index 0000000..3edbc1f Binary files /dev/null and b/fastlane/metadata/android/ru/images/phoneScreenshots/5.png differ diff --git a/fastlane/metadata/android/ru/short_description.txt b/fastlane/metadata/android/ru/short_description.txt new file mode 100644 index 0000000..64ca210 --- /dev/null +++ b/fastlane/metadata/android/ru/short_description.txt @@ -0,0 +1 @@ +Небольшой да простой тренер японских кан diff --git a/fastlane/metadata/android/ru/title.txt b/fastlane/metadata/android/ru/title.txt new file mode 100644 index 0000000..36b0010 --- /dev/null +++ b/fastlane/metadata/android/ru/title.txt @@ -0,0 +1 @@ +Нихоноари: Хирагана и Катакана diff --git a/fastlane/metadata/android/uk/changelogs/4.txt b/fastlane/metadata/android/uk/changelogs/4.txt new file mode 100644 index 0000000..3280303 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/4.txt @@ -0,0 +1 @@ +Fix some errors. \ No newline at end of file diff --git a/fastlane/metadata/android/uk/changelogs/5.txt b/fastlane/metadata/android/uk/changelogs/5.txt new file mode 100644 index 0000000..30a47bb --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/5.txt @@ -0,0 +1,4 @@ +* Set selection in Hiragana and Katakana +* Improved quiz core +* Fixed "ri" Katakana +* Improved dark style \ No newline at end of file diff --git a/fastlane/metadata/android/uk/changelogs/6.txt b/fastlane/metadata/android/uk/changelogs/6.txt new file mode 100644 index 0000000..2b55d9f --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/6.txt @@ -0,0 +1,2 @@ +* Spaced repetition algorithm +* The keyboard does not close after submit \ No newline at end of file diff --git a/fastlane/metadata/android/uk/changelogs/7.txt b/fastlane/metadata/android/uk/changelogs/7.txt new file mode 100644 index 0000000..e0f91a4 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/7.txt @@ -0,0 +1,2 @@ +* The selected Kana sets are remembered +* Added UI translation \ No newline at end of file diff --git a/fastlane/metadata/android/uk/full_description.txt b/fastlane/metadata/android/uk/full_description.txt new file mode 100644 index 0000000..1cf83d6 --- /dev/null +++ b/fastlane/metadata/android/uk/full_description.txt @@ -0,0 +1,4 @@ +Ніхоноарі - це проект з відкритим кодом, що надає спільноті простий застосунок для запам'ятовування та практикування абеток Хіраґани та Катакани без реклам, купівель, чи безтолкових функцій. Чим простіше - тим краще. + +Хочете співпрацювати з проектом, або повідомити кілька помилок? +https://github.com/aeri/Nihonoari-App diff --git a/fastlane/metadata/android/uk/images/icon.png b/fastlane/metadata/android/uk/images/icon.png new file mode 100644 index 0000000..5512fa9 Binary files /dev/null and b/fastlane/metadata/android/uk/images/icon.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/1.png b/fastlane/metadata/android/uk/images/phoneScreenshots/1.png new file mode 100644 index 0000000..adb4923 Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/1.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/2.png b/fastlane/metadata/android/uk/images/phoneScreenshots/2.png new file mode 100644 index 0000000..7de0cd0 Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/2.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/3.png b/fastlane/metadata/android/uk/images/phoneScreenshots/3.png new file mode 100644 index 0000000..1ed14be Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/3.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/4.png b/fastlane/metadata/android/uk/images/phoneScreenshots/4.png new file mode 100644 index 0000000..37e38fc Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/4.png differ diff --git a/fastlane/metadata/android/uk/images/phoneScreenshots/5.png b/fastlane/metadata/android/uk/images/phoneScreenshots/5.png new file mode 100644 index 0000000..3edbc1f Binary files /dev/null and b/fastlane/metadata/android/uk/images/phoneScreenshots/5.png differ diff --git a/fastlane/metadata/android/uk/short_description.txt b/fastlane/metadata/android/uk/short_description.txt new file mode 100644 index 0000000..8b55a3c --- /dev/null +++ b/fastlane/metadata/android/uk/short_description.txt @@ -0,0 +1 @@ +Невеличкий та простий тренер японських кан diff --git a/fastlane/metadata/android/uk/title.txt b/fastlane/metadata/android/uk/title.txt new file mode 100644 index 0000000..9744ccf --- /dev/null +++ b/fastlane/metadata/android/uk/title.txt @@ -0,0 +1 @@ +Ніхоноарі: Хіраґана та Катакана diff --git a/i18n/en.json b/i18n/en.json new file mode 100644 index 0000000..c994fd0 --- /dev/null +++ b/i18n/en.json @@ -0,0 +1,14 @@ +{ + "main_licenses": "LICENSES", + "main_hiragana" : "Include Hiragana syllabary", + "main_katakana" : "Include Katakana syllabary", + "main_select": "Select one", + "main_start": "Start", + "quiz_stats": "Statistics", + "quiz_total": "Total", + "quiz_passed": "Passed", + "quiz_failed": "Failed", + "quiz_rate": "Success rate", + "quiz_enter": "Enter rōmaji", + "quiz_correct": "Correct answer" +} \ No newline at end of file diff --git a/i18n/es.json b/i18n/es.json new file mode 100644 index 0000000..923453a --- /dev/null +++ b/i18n/es.json @@ -0,0 +1,14 @@ +{ + "main_licenses": "LICENCIAS", + "main_hiragana" : "Incluir silabario Hiragana", + "main_katakana" : "Incluir silabario Katakana", + "main_select": "Selecciona", + "main_start": "Inciar", + "quiz_stats": "Estadísticas", + "quiz_total": "Total", + "quiz_passed": "Aciertos", + "quiz_failed": "Fallos", + "quiz_rate": "Tasa de acierto", + "quiz_enter": "Escribe rōmaji", + "quiz_correct": "Respuesta correcta" +} \ No newline at end of file diff --git a/i18n/fr.json b/i18n/fr.json new file mode 100644 index 0000000..a37c87d --- /dev/null +++ b/i18n/fr.json @@ -0,0 +1,14 @@ +{ + "main_licenses": "LICENCES", + "main_hiragana" : "Incorporer syllabaire Hiragana", + "main_katakana" : "Incorporer syllabaire Katakana", + "main_select": "Choisis", + "main_start": "Commencer", + "quiz_stats": "Statistiques", + "quiz_total": "Total", + "quiz_passed": "Coups", + "quiz_failed": "Ratés", + "quiz_rate": "Taux de succès", + "quiz_enter": "Écris rōmaji", + "quiz_correct": "Réponse correcte" +} diff --git a/i18n/ru.json b/i18n/ru.json new file mode 100644 index 0000000..2022537 --- /dev/null +++ b/i18n/ru.json @@ -0,0 +1,14 @@ +{ + "main_licenses": "ЛИЦЕНЗИИ", + "main_hiragana" : "Включить слоги Хираганы", + "main_katakana" : "Включить слоги Катаканы", + "main_select": "Выберите что-то", + "main_start": "Начать", + "quiz_stats": "Статистика", + "quiz_total": "Всего", + "quiz_passed": "Пройдено", + "quiz_failed": "Провалено", + "quiz_rate": "Процент успеха", + "quiz_enter": "Введите ромадзи", + "quiz_correct": "Ответ верный" +} diff --git a/i18n/uk.json b/i18n/uk.json new file mode 100644 index 0000000..3449ee2 --- /dev/null +++ b/i18n/uk.json @@ -0,0 +1,14 @@ +{ + "main_licenses": "ЛІЦЕНЗІЇ", + "main_hiragana" : "Включити склади Хіраґани", + "main_katakana" : "Включити склади Катакани", + "main_select": "Виберіть щось", + "main_start": "Почати", + "quiz_stats": "Статистика", + "quiz_total": "Всього", + "quiz_passed": "Правильних", + "quiz_failed": "Помилкових", + "quiz_rate": "Відсоток успіху", + "quiz_enter": "Введіть ромадзі", + "quiz_correct": "Відповідь вірна" +} diff --git a/ios/Flutter/Generated.xcconfig b/ios/Flutter/Generated.xcconfig index 2d61f67..321eed9 100644 --- a/ios/Flutter/Generated.xcconfig +++ b/ios/Flutter/Generated.xcconfig @@ -6,5 +6,5 @@ FLUTTER_BUILD_DIR=build SYMROOT=${SOURCE_ROOT}/../build\ios OTHER_LDFLAGS=$(inherited) -framework Flutter FLUTTER_FRAMEWORK_DIR=C:\src\flutter\bin\cache\artifacts\engine\ios -FLUTTER_BUILD_NAME=1.3.0 -FLUTTER_BUILD_NUMBER=5 +FLUTTER_BUILD_NAME=1.5.0 +FLUTTER_BUILD_NUMBER=7 diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh new file mode 100644 index 0000000..1da9d0d --- /dev/null +++ b/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=C:\src\flutter" +export "FLUTTER_APPLICATION_PATH=D:\Documentos\Nihonoari-App" +export "FLUTTER_TARGET=lib\main.dart" +export "FLUTTER_BUILD_DIR=build" +export "SYMROOT=${SOURCE_ROOT}/../build\ios" +export "OTHER_LDFLAGS=$(inherited) -framework Flutter" +export "FLUTTER_FRAMEWORK_DIR=C:\src\flutter\bin\cache\artifacts\engine\ios" +export "FLUTTER_BUILD_NAME=1.5.0" +export "FLUTTER_BUILD_NUMBER=7" diff --git a/ios/Runner/GeneratedPluginRegistrant.m b/ios/Runner/GeneratedPluginRegistrant.m index 60dfa42..429aa2a 100644 --- a/ios/Runner/GeneratedPluginRegistrant.m +++ b/ios/Runner/GeneratedPluginRegistrant.m @@ -4,9 +4,16 @@ #import "GeneratedPluginRegistrant.h" +#if __has_include() +#import +#else +@import shared_preferences; +#endif + @implementation GeneratedPluginRegistrant + (void)registerWithRegistry:(NSObject*)registry { + [FLTSharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTSharedPreferencesPlugin"]]; } @end diff --git a/lib/Question.dart b/lib/Question.dart index 2301161..25aea59 100644 --- a/lib/Question.dart +++ b/lib/Question.dart @@ -1,3 +1,22 @@ +/* + Copyright (C) 2020 Naval Alcalá + + This file is part of Nihonoari. + + Nihonoari is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Nihonoari is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nihonoari. If not, see . + */ + class Question{ String question; diff --git a/lib/localizations.dart b/lib/localizations.dart new file mode 100644 index 0000000..4bc3b4e --- /dev/null +++ b/lib/localizations.dart @@ -0,0 +1,85 @@ +/* + Copyright (C) 2020 Naval Alcalá + + This file is part of Nihonoari. + + Nihonoari is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Nihonoari is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nihonoari. If not, see . + */ + +import 'dart:async'; +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class AppLocalizations { + final Locale locale; + + AppLocalizations(this.locale); + + // Helper method to keep the code in the widgets concise + // Localizations are accessed using an InheritedWidget "of" syntax + static AppLocalizations of(BuildContext context) { + return Localizations.of(context, AppLocalizations); + } + + // Static member to have a simple access to the delegate from the MaterialApp + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); + + Map _localizedStrings; + + Future load() async { + // Load the language JSON file from the "lang" folder + String jsonString = + await rootBundle.loadString('i18n/${locale.languageCode}.json'); + Map jsonMap = json.decode(jsonString); + + _localizedStrings = jsonMap.map((key, value) { + return MapEntry(key, value.toString()); + }); + + return true; + } + + // This method will be called from every widget which needs a localized text + String translate(String key) { + return _localizedStrings[key]; + } +} + +class _AppLocalizationsDelegate + extends LocalizationsDelegate { + // This delegate instance will never change (it doesn't even have fields!) + // It can provide a constant constructor. + const _AppLocalizationsDelegate(); + + @override + bool isSupported(Locale locale) { + // Supported language codes here + return ['en', 'es', 'fr', 'uk', 'ru'].contains(locale.languageCode); + + } + + @override + Future load(Locale locale) async { + // AppLocalizations class is where the JSON loading actually runs + AppLocalizations localizations = new AppLocalizations(locale); + await localizations.load(); + return localizations; + } + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} diff --git a/lib/main.dart b/lib/main.dart index f443ebc..51d520e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,32 @@ +/* + Copyright (C) 2020 Naval Alcalá + + This file is part of Nihonoari. + + Nihonoari is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Nihonoari is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nihonoari. If not, see . + */ + +import 'dart:convert'; + +import 'preferences.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; import 'party.dart'; import 'package:flutter/gestures.dart'; +import 'localizations.dart'; + import 'dart:async' show Future; import 'package:flutter/services.dart' show rootBundle; @@ -9,8 +34,26 @@ Future loadAsset() async { return await rootBundle.loadString('assets/LICENSES.txt'); } -void main() { + +Map _hirasol = new Map(); + +Map _katasol = new Map(); + +Future main() async { + runApp(new MaterialApp( + supportedLocales: [ + Locale('en', 'US'), + Locale('es', ''), + Locale('fr', ''), + Locale('uk', ''), + Locale('ru', ''), + ], + localizationsDelegates: [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], home: new MyApp(), )); } @@ -30,34 +73,6 @@ class kataDialog extends StatefulWidget { _kataDialogState createState() => _kataDialogState(); } -Map _hirasol = { - 'あ い う え お': true, - 'か き く け こ': true, - 'さ し す せ そ': true, - 'た ち つ て と': true, - 'な に ぬ ね の': true, - 'は ひ ふ へ ほ': true, - 'ま み む め も': true, - 'や ゆ よ': true, - 'ら り る れ ろ': true, - 'わ を': true, - 'ん': true -}; - -Map _katasol = { - 'ア イ ウ エ オ': true, - 'カ キ ク ケ コ': true, - 'サ シ ス セ ソ': true, - 'タ チ ツ テ ト': true, - 'ナ ニ ヌ ネ ノ': true, - 'ハ ヒ フ ヘ ホ': true, - 'マ ミ ム メ モ': true, - 'ヤ ユ ヨ': true, - 'ラ リ ル レ ロ': true, - 'ワ ヲ': true, - 'ン': true, -}; - class _hiraDialogState extends State { @override Widget build(BuildContext context) { @@ -167,6 +182,19 @@ class _State extends State { bool _katakana = false; bool _hiragana = false; + + @override + void initState() { + super.initState(); + readData(); + } + + Future readData() async { + await SharedKanaPreferences.init(); + _hirasol = json.decode(SharedKanaPreferences.getHiraganaSet()); + _katasol = json.decode(SharedKanaPreferences.getKatakanaSet()); + } + bool _isButtonDisabled = true; //we omitted the brackets '{}' and are using fat arrow '=>' instead, this is dart syntax @@ -186,7 +214,7 @@ class _State extends State { builder: (BuildContext context) { // return object of type Dialog return AlertDialog( - title: new Text("Licenses"), + title: Text("Licenses"), content: new SingleChildScrollView( child: Text(data), ), @@ -246,7 +274,7 @@ class _State extends State { padding: EdgeInsets.all(5), child: RichText( text: TextSpan( - text: 'LICENSES', + text: AppLocalizations.of(context).translate('main_licenses'), recognizer: TapGestureRecognizer() ..onTap = () { _showLicense(); @@ -291,7 +319,7 @@ class _State extends State { ), controlAffinity: ListTileControlAffinity.leading, subtitle: new Text( - 'Include Hiragana syllabary', + (AppLocalizations.of(context).translate('main_hiragana')), style: TextStyle( color: Colors.white, ), @@ -329,7 +357,7 @@ class _State extends State { ), controlAffinity: ListTileControlAffinity.leading, subtitle: new Text( - 'Include Katakana syllabary', + (AppLocalizations.of(context).translate('main_katakana')), style: TextStyle( color: Colors.white, ), @@ -366,7 +394,10 @@ class _State extends State { ); }, child: new Text( - _isButtonDisabled ? "Select one" : "Start"), + _isButtonDisabled ? + (AppLocalizations.of(context).translate('main_select')) + : + (AppLocalizations.of(context).translate('main_start'))), ), ), ), diff --git a/lib/party.dart b/lib/party.dart index a9b0599..5581b8f 100644 --- a/lib/party.dart +++ b/lib/party.dart @@ -1,4 +1,26 @@ +/* + Copyright (C) 2020 Naval Alcalá + + This file is part of Nihonoari. + + Nihonoari is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Nihonoari is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nihonoari. If not, see . + */ + +import 'package:Nihonoari/preferences.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'localizations.dart'; import 'quiz_brain.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'table.dart'; @@ -8,26 +30,43 @@ import 'table.dart'; Color _result = Colors.white; class Party extends StatefulWidget { - final bool h, k; - final Map hv, kv; + final Map hv, kv; - Party({@required this.h, @required this.hv, @required this.k, @required this.kv}); + Party( + {@required this.h, + @required this.hv, + @required this.k, + @required this.kv}); @override _Party createState() => _Party(h, hv, k, kv); } class _Party extends State { - _Party(h, hv, k, kv) { + SharedKanaPreferences.setHiraganaSet(hv); + SharedKanaPreferences.setKatakanaSet(kv); + QuizBrain.setList(h, hv, k, kv); } @override Widget build(BuildContext context) { return MaterialApp( + supportedLocales: [ + Locale('en', 'US'), + Locale('es', ''), + Locale('fr', ''), + Locale('uk', ''), + Locale('ru', ''), + ], + localizationsDelegates: [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], home: Scaffold( backgroundColor: Colors.grey.shade900, body: SafeArea( @@ -47,7 +86,6 @@ class QuizPage extends StatefulWidget { } class _QuizPageState extends State { - FocusNode _focusNode = FocusNode(); bool _ignore = false; @@ -71,7 +109,7 @@ class _QuizPageState extends State { }); } - void _showDialog() async{ + void _showDialog() async { // flutter defined function Scaffold.of(context).hideCurrentSnackBar(); showDialog( @@ -80,18 +118,18 @@ class _QuizPageState extends State { // return object of type Dialog return AlertDialog( backgroundColor: Colors.black, - title: new Text("Statistics", + title: new Text(AppLocalizations.of(context).translate('quiz_stats'), style: TextStyle( color: Colors.white, )), - content: new Text("Total: $total\n" - "Passed: $accepted\n" - "Failed: $rejected\n" - "Success rate: ${ratio.toStringAsFixed(2)}%", + content: new Text( + "${AppLocalizations.of(context).translate('quiz_total')}: $total\n" + "${AppLocalizations.of(context).translate('quiz_passed')}: $accepted\n" + "${AppLocalizations.of(context).translate('quiz_failed')}: $rejected\n" + "${AppLocalizations.of(context).translate('quiz_rate')}: ${ratio.toStringAsFixed(2)}%", style: TextStyle( color: Colors.white, )), - actions: [ // usually buttons at the bottom of the dialog new FlatButton( @@ -116,38 +154,33 @@ class _QuizPageState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( - flex: 0, - child: Row( - children: [ - Expanded( - child: IconButton( - // Use the FontAwesomeIcons class for the IconData - icon: new Icon( - FontAwesomeIcons.language, - color: Colors.white), - onPressed: () { - FocusScope.of(context).requestFocus(new FocusNode()); - Navigator.push( - context, - MaterialPageRoute(builder: (context) => BasicGridView()), - ); } - ) - ), - Expanded( - child: IconButton( - // Use the FontAwesomeIcons class for the IconData - icon: new Icon( - FontAwesomeIcons.chartBar, - color: Colors.white), - onPressed: () { - FocusScope.of(context).requestFocus(new FocusNode()); - _showDialog(); } - ) - ), - - ], - ) - ), + flex: 0, + child: Row( + children: [ + Expanded( + child: IconButton( + // Use the FontAwesomeIcons class for the IconData + icon: new Icon(FontAwesomeIcons.language, + color: Colors.white), + onPressed: () { + FocusScope.of(context).requestFocus(new FocusNode()); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BasicGridView()), + ); + })), + Expanded( + child: IconButton( + // Use the FontAwesomeIcons class for the IconData + icon: new Icon(FontAwesomeIcons.chartBar, + color: Colors.white), + onPressed: () { + FocusScope.of(context).requestFocus(new FocusNode()); + _showDialog(); + })), + ], + )), Expanded( flex: 4, child: Padding( @@ -167,104 +200,85 @@ class _QuizPageState extends State { ), Expanded( child: Padding( - padding: EdgeInsets.all(15.0), - child: TextField( - textInputAction: TextInputAction.done, - controller: _controller, - focusNode: _focusNode, - autofocus: true, - textAlign: TextAlign.center , - cursorColor: Colors.white, - decoration: InputDecoration( - hoverColor: Colors.white, - fillColor: Colors.white, - focusColor: Colors.white, + padding: EdgeInsets.all(15.0), + child: TextField( + textInputAction: TextInputAction.done, + controller: _controller, + focusNode: _focusNode, + autofocus: true, + textAlign: TextAlign.center, + cursorColor: Colors.white, + decoration: InputDecoration( + hoverColor: Colors.white, + fillColor: Colors.white, + focusColor: Colors.white, border: InputBorder.none, - hintText: 'Enter rōmaji', - hintStyle: TextStyle(color: Colors.grey), - - ), - style: TextStyle( - fontSize: 20, - color: Colors.white, - ), - onSubmitted: (value) { - - if (_ignore || value.length < 1){ - return; - } - _ignore = true; - - int control = 0; - bool passed; - - - _controller.clear(); - - String result = QuizBrain.currentQuestion.answer; - - ++total; - - setState(() { - if (result == value.toLowerCase()) { - control = 500; - print("OK"); - _result = Colors.green; - ++accepted; - passed = true; - } - else{ - control = 2000; - print ("NO"); - _result = Colors.red; - ++rejected; - passed = false; - - final snackBar = SnackBar( - elevation: 10, - duration: Duration(milliseconds: control) , - content: Text('Correct answer: $result', - style: TextStyle( - fontSize: 20, - color: Colors.white, - fontWeight: FontWeight.bold), - textAlign: TextAlign.center, - ), - - - ); - - Scaffold.of(context).showSnackBar(snackBar); - + hintText: + AppLocalizations.of(context).translate('quiz_enter'), + hintStyle: TextStyle(color: Colors.grey), + ), + style: TextStyle( + fontSize: 20, + color: Colors.white, + ), + onSubmitted: (value) { + if (_ignore || value.length < 1) { + return; } - }); + _ignore = true; + int control = 0; + bool passed; + _controller.clear(); - ratio = (accepted/total)*100; - - - - Future.delayed(Duration(milliseconds: control), () { + String result = QuizBrain.currentQuestion.answer; + ++total; setState(() { - _result = Colors.white; - QuizBrain.nextQuestion(passed); - _ignore = false; + if (result == value.toLowerCase()) { + control = 500; + print("OK"); + _result = Colors.green; + ++accepted; + passed = true; + } else { + control = 2000; + print("NO"); + _result = Colors.red; + ++rejected; + passed = false; + + final snackBar = SnackBar( + elevation: 10, + duration: Duration(milliseconds: control), + content: Text( + '${AppLocalizations.of(context).translate('quiz_correct')}: $result', + style: TextStyle( + fontSize: 20, + color: Colors.white, + fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + ); + + Scaffold.of(context).showSnackBar(snackBar); + } }); - }); - - - + ratio = (accepted / total) * 100; - }, - ) - - ), + Future.delayed(Duration(milliseconds: control), () { + setState(() { + _result = Colors.white; + QuizBrain.nextQuestion(passed); + _ignore = false; + }); + }); + }, + )), ), - Expanded( child: Row( children: scoreKeeper, diff --git a/lib/preferences.dart b/lib/preferences.dart new file mode 100644 index 0000000..c70e8a5 --- /dev/null +++ b/lib/preferences.dart @@ -0,0 +1,94 @@ +/* + Copyright (C) 2020 Naval Alcalá + + This file is part of Nihonoari. + + Nihonoari is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Nihonoari is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nihonoari. If not, see . + */ +import 'package:shared_preferences/shared_preferences.dart'; +import 'dart:convert'; + +class SharedKanaPreferences { + static Future get _instance async => + _prefsInstance ??= await SharedPreferences.getInstance(); + static SharedPreferences _prefsInstance; + + static Future init() async { + _prefsInstance = await _instance; + return _prefsInstance; + } + + static Map _defaultHiraganaSet = { + 'あ い う え お': true, + 'か き く け こ': true, + 'さ し す せ そ': true, + 'た ち つ て と': true, + 'な に ぬ ね の': true, + 'は ひ ふ へ ほ': true, + 'ま み む め も': true, + 'や ゆ よ': true, + 'ら り る れ ろ': true, + 'わ を': true, + 'ん': true + }; + + static Map _defaultKatakanaSet = { + 'ア イ ウ エ オ': true, + 'カ キ ク ケ コ': true, + 'サ シ ス セ ソ': true, + 'タ チ ツ テ ト': true, + 'ナ ニ ヌ ネ ノ': true, + 'ハ ヒ フ ヘ ホ': true, + 'マ ミ ム メ モ': true, + 'ヤ ユ ヨ': true, + 'ラ リ ル レ ロ': true, + 'ワ ヲ': true, + 'ン': true, + }; + + static final String _hirasolSet = "hiragana"; + static final String _katasolSet = "katakana"; + + static String getHiraganaSet() { + var hiraganaData = _prefsInstance.getString(_hirasolSet); + + if (hiraganaData == null) { + print("EMPTY HIRAGANA"); + return json.encode(_defaultHiraganaSet); + } else { + print("EXISTS HIRAGANA"); + return hiraganaData; + } + } + + static Future setHiraganaSet(Map value) async { + return _prefsInstance.setString(_hirasolSet, json.encode(value)); + } + + static String getKatakanaSet() { + var katakanaData = _prefsInstance.getString(_katasolSet); + + if (katakanaData == null) { + print("EMPTY KATAKANA"); + return json.encode(_defaultKatakanaSet); + } else { + print("EXISTS KATAKANA"); + return katakanaData; + } + } + + static Future setKatakanaSet(Map value) async { + return _prefsInstance.setString(_katasolSet, json.encode(value)); + } +} diff --git a/lib/quiz_brain.dart b/lib/quiz_brain.dart index 5a661de..a4604a2 100644 --- a/lib/quiz_brain.dart +++ b/lib/quiz_brain.dart @@ -1,3 +1,22 @@ +/* + Copyright (C) 2020 Naval Alcalá + + This file is part of Nihonoari. + + Nihonoari is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Nihonoari is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nihonoari. If not, see . + */ + import 'Question.dart'; import 'dart:math'; @@ -201,26 +220,22 @@ class QuizBrain { }; static void nextQuestion(bool passed) { - - if (passed){ - _passed.add (currentQuestion); + if (passed) { + _passed.add(currentQuestion); _quiz.remove(currentQuestion); - } - else{ - _failed.add (currentQuestion); + } else { + _failed.add(currentQuestion); _quiz.remove(currentQuestion); } - if (_quiz.length == 0){ - if (_failed.length == 0){ + if (_quiz.length == 0) { + if (_failed.length == 0) { _quiz.addAll(_passed); _passed.clear(); - } - else{ + } else { _quiz.addAll(_failed); _failed.clear(); } - } int _questionNumber = rng.nextInt(_quiz.length); currentQuestion = _quiz[_questionNumber]; @@ -229,11 +244,10 @@ class QuizBrain { static void firstQuestion() { int _questionNumber = rng.nextInt(_quiz.length); currentQuestion = _quiz[_questionNumber]; - } static void setList( - bool h, Map hv, bool k, Map kv) { + bool h, Map hv, bool k, Map kv) { QuizBrain.h = h; QuizBrain.k = k; diff --git a/lib/table.dart b/lib/table.dart index d978710..051cb67 100644 --- a/lib/table.dart +++ b/lib/table.dart @@ -1,3 +1,22 @@ +/* + Copyright (C) 2020 Naval Alcalá + + This file is part of Nihonoari. + + Nihonoari is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Nihonoari is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Nihonoari. If not, see . + */ + import 'package:flutter/material.dart'; import 'package:kana/kana.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 40faa5c..971bbf6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,7 @@ description: A little Japanese Kana training # build by specifying --build-name and --build-number, respectively. # Read more about versioning at semver.org. -version: 1.4.0+6 +version: 1.5.0+7 environment: sdk: ">=2.0.0-dev.68.0 <3.0.0" @@ -16,8 +16,11 @@ environment: dependencies: kana: ^1.0.0 font_awesome_flutter: ^8.5.0 + shared_preferences: ^0.5.12 flutter: sdk: flutter + flutter_localizations: + sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. @@ -41,6 +44,11 @@ flutter: - asset: assets/apple-tp_text.ttf assets: - assets/LICENSES.txt + - i18n/es.json + - i18n/en.json + - i18n/fr.json + - i18n/uk.json + - i18n/ru.json # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in