refactor(theme): the look comes from halkyon_ui
The theme, Noto Sans, the window sizes and the widgets every screen is built of move to halkyon_ui (halkyon_shared), pinned to a signed commit as the sync fork is, so Halkyon's other apps share them. Learn keeps its own colours (the FSRS ratings, a starred star) as LearnColors beside the theme, the CJK fonts with their licences, and its launch screen's word and icon. Nothing on screen changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
642c1c7e9f
commit
f43b92e4db
219 changed files with 451 additions and 4755 deletions
10
AGENTS.md
10
AGENTS.md
File diff suppressed because one or more lines are too long
|
|
@ -1,17 +1,18 @@
|
||||||
# Fonts
|
# Fonts
|
||||||
|
|
||||||
The app brings its fonts with it and never fetches any: text looks the same on
|
The app brings its fonts with it and never fetches any: text looks the same on
|
||||||
every device, whatever fonts it has.
|
every device, whatever fonts it has. Noto Sans, its font, comes with halkyon_ui
|
||||||
|
(halkyon_shared), which bundles it with its licence and registers it; the fonts
|
||||||
|
for Japanese, Chinese and Korean are the app's own, here.
|
||||||
|
|
||||||
| File | Font | Source | Licence |
|
| File | Font | Source | Licence |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `NotoSans-Variable.ttf`, `NotoSans-Italic-Variable.ttf` | Noto Sans (Latin, Greek incl. polytonic, Cyrillic), every weight | [notofonts/latin-greek-cyrillic](https://github.com/notofonts/latin-greek-cyrillic) release NotoSans-v2.015, `unhinted/slim-variable-ttf` | SIL Open Font License 1.1, `OFL-NotoSans.txt` |
|
|
||||||
| `NotoSansJP-Variable.otf`, `NotoSansSC-Variable.otf`, `NotoSansTC-Variable.otf`, `NotoSansKR-Variable.otf` | Noto Sans JP, SC, TC, KR (Japanese, Simplified and Traditional Chinese, Korean), every weight | [notofonts/noto-cjk](https://github.com/notofonts/noto-cjk) `Sans/Variable/OTF/Subset/NotoSans{JP,SC,TC,KR}-VF.otf`, commit f8d157532fbf (2026-10-08) | SIL Open Font License 1.1, `OFL-NotoSansCJK.txt` |
|
| `NotoSansJP-Variable.otf`, `NotoSansSC-Variable.otf`, `NotoSansTC-Variable.otf`, `NotoSansKR-Variable.otf` | Noto Sans JP, SC, TC, KR (Japanese, Simplified and Traditional Chinese, Korean), every weight | [notofonts/noto-cjk](https://github.com/notofonts/noto-cjk) `Sans/Variable/OTF/Subset/NotoSans{JP,SC,TC,KR}-VF.otf`, commit f8d157532fbf (2026-10-08) | SIL Open Font License 1.1, `OFL-NotoSansCJK.txt` |
|
||||||
|
|
||||||
Noto Sans is the app's font; the CJK fonts fill in the glyphs it lacks, the
|
Noto Sans is the app's font; the CJK fonts fill in the glyphs it lacks, the
|
||||||
one matching a studyset's language first, Japanese otherwise
|
one matching a studyset's language first, Japanese otherwise (halkyon_ui's
|
||||||
(`lib/src/core/theme/app_fonts.dart`): they share most Han characters but draw
|
`appFontFallbackFor`, which names them by the families `pubspec.yaml`
|
||||||
them differently. Noto Sans JP alone would not do as the app's font: it has
|
declares): they share most Han characters but draw them differently. Noto Sans JP alone would not do as the app's font: it has
|
||||||
no accented or polytonic Greek. Scripts none of them covers (Arabic, Hebrew,
|
no accented or polytonic Greek. Scripts none of them covers (Arabic, Hebrew,
|
||||||
Thai, Devanagari, …) come from the device's own fonts. The files are renamed
|
Thai, Devanagari, …) come from the device's own fonts. The files are renamed
|
||||||
only; their glyphs are unchanged. The licences are shown in the app's licence
|
only; their glyphs are unchanged. The licences are shown in the app's licence
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -1,93 +0,0 @@
|
||||||
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic)
|
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
||||||
This license is copied below, and is also available with a FAQ at:
|
|
||||||
https://scripts.sil.org/OFL
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------
|
|
||||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
||||||
-----------------------------------------------------------
|
|
||||||
|
|
||||||
PREAMBLE
|
|
||||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
||||||
development of collaborative font projects, to support the font creation
|
|
||||||
efforts of academic and linguistic communities, and to provide a free and
|
|
||||||
open framework in which fonts may be shared and improved in partnership
|
|
||||||
with others.
|
|
||||||
|
|
||||||
The OFL allows the licensed fonts to be used, studied, modified and
|
|
||||||
redistributed freely as long as they are not sold by themselves. The
|
|
||||||
fonts, including any derivative works, can be bundled, embedded,
|
|
||||||
redistributed and/or sold with any software provided that any reserved
|
|
||||||
names are not used by derivative works. The fonts and derivatives,
|
|
||||||
however, cannot be released under any other type of license. The
|
|
||||||
requirement for fonts to remain under this license does not apply
|
|
||||||
to any document created using the fonts or their derivatives.
|
|
||||||
|
|
||||||
DEFINITIONS
|
|
||||||
"Font Software" refers to the set of files released by the Copyright
|
|
||||||
Holder(s) under this license and clearly marked as such. This may
|
|
||||||
include source files, build scripts and documentation.
|
|
||||||
|
|
||||||
"Reserved Font Name" refers to any names specified as such after the
|
|
||||||
copyright statement(s).
|
|
||||||
|
|
||||||
"Original Version" refers to the collection of Font Software components as
|
|
||||||
distributed by the Copyright Holder(s).
|
|
||||||
|
|
||||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
||||||
or substituting -- in part or in whole -- any of the components of the
|
|
||||||
Original Version, by changing formats or by porting the Font Software to a
|
|
||||||
new environment.
|
|
||||||
|
|
||||||
"Author" refers to any designer, engineer, programmer, technical
|
|
||||||
writer or other person who contributed to the Font Software.
|
|
||||||
|
|
||||||
PERMISSION & CONDITIONS
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
||||||
redistribute, and sell modified and unmodified copies of the Font
|
|
||||||
Software, subject to the following conditions:
|
|
||||||
|
|
||||||
1) Neither the Font Software nor any of its individual components,
|
|
||||||
in Original or Modified Versions, may be sold by itself.
|
|
||||||
|
|
||||||
2) Original or Modified Versions of the Font Software may be bundled,
|
|
||||||
redistributed and/or sold with any software, provided that each copy
|
|
||||||
contains the above copyright notice and this license. These can be
|
|
||||||
included either as stand-alone text files, human-readable headers or
|
|
||||||
in the appropriate machine-readable metadata fields within text or
|
|
||||||
binary files as long as those fields can be easily viewed by the user.
|
|
||||||
|
|
||||||
3) No Modified Version of the Font Software may use the Reserved Font
|
|
||||||
Name(s) unless explicit written permission is granted by the corresponding
|
|
||||||
Copyright Holder. This restriction only applies to the primary font name as
|
|
||||||
presented to the users.
|
|
||||||
|
|
||||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
||||||
Software shall not be used to promote, endorse or advertise any
|
|
||||||
Modified Version, except to acknowledge the contribution(s) of the
|
|
||||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
||||||
permission.
|
|
||||||
|
|
||||||
5) The Font Software, modified or unmodified, in part or in whole,
|
|
||||||
must be distributed entirely under this license, and must not be
|
|
||||||
distributed under any other license. The requirement for fonts to
|
|
||||||
remain under this license does not apply to any document created
|
|
||||||
using the Font Software.
|
|
||||||
|
|
||||||
TERMINATION
|
|
||||||
This license becomes null and void if any of the above conditions are
|
|
||||||
not met.
|
|
||||||
|
|
||||||
DISCLAIMER
|
|
||||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
||||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
||||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
||||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
"@@locale": "de",
|
"@@locale": "de",
|
||||||
|
|
||||||
"appTitle": "Halkyon Learn",
|
"appTitle": "Halkyon Learn",
|
||||||
"launchBrand": "Halkyon",
|
|
||||||
"launchProduct": "Learn",
|
"launchProduct": "Learn",
|
||||||
|
|
||||||
"shellTabHome": "Startseite",
|
"shellTabHome": "Startseite",
|
||||||
|
|
@ -50,8 +49,6 @@
|
||||||
"studysetSheetDiscardMessage": "Du hast ungespeicherte Änderungen an diesem Lernset. Verwerfen und das Formular schließen?",
|
"studysetSheetDiscardMessage": "Du hast ungespeicherte Änderungen an diesem Lernset. Verwerfen und das Formular schließen?",
|
||||||
"studysetSheetDiscardConfirm": "Verwerfen",
|
"studysetSheetDiscardConfirm": "Verwerfen",
|
||||||
|
|
||||||
"paletteColorName": "{name, select, carrot{Karotte} cerise{Kirschrot} cobalt{Kobalt} copper{Kupfer} enzian{Enzian} fern{Farn} forest{Wald} ocean{Ozean} olive{Olive} pacific{Pazifik} pickle{Essiggurke} pine{Kiefer} pink{Rosa} plum{Pflaume} purple{Lila} reef{Riff} sahara{Sahara} slateblue{Schieferblau} soil{Erde} strawberry{Erdbeere} other{{name}}}",
|
|
||||||
"colorPickerLabel": "Farbe: {color}",
|
|
||||||
|
|
||||||
"studysetCountFlashcards": "{count, plural, =1{1 Karteikarte} other{{count} Karteikarten}}",
|
"studysetCountFlashcards": "{count, plural, =1{1 Karteikarte} other{{count} Karteikarten}}",
|
||||||
"studysetCountNotes": "{count, plural, =1{1 Notiz} other{{count} Notizen}}",
|
"studysetCountNotes": "{count, plural, =1{1 Notiz} other{{count} Notizen}}",
|
||||||
|
|
@ -446,7 +443,6 @@
|
||||||
"languageChineseSimplified": "Chinesisch (vereinfacht)",
|
"languageChineseSimplified": "Chinesisch (vereinfacht)",
|
||||||
"languageChineseTraditional": "Chinesisch (traditionell)",
|
"languageChineseTraditional": "Chinesisch (traditionell)",
|
||||||
"fieldRequired": "Pflichtfeld",
|
"fieldRequired": "Pflichtfeld",
|
||||||
"fieldRequiredHelper": "Pflichtfeld",
|
|
||||||
|
|
||||||
"exploreTitle": "Entdecken",
|
"exploreTitle": "Entdecken",
|
||||||
"exploreEmpty": "Lernsets, die andere teilen, erscheinen hier.",
|
"exploreEmpty": "Lernsets, die andere teilen, erscheinen hier.",
|
||||||
|
|
@ -1090,9 +1086,6 @@
|
||||||
"studySortOldestFirst": "Älteste zuerst",
|
"studySortOldestFirst": "Älteste zuerst",
|
||||||
"studySortRandom": "Zufällig",
|
"studySortRandom": "Zufällig",
|
||||||
"studySortNewestFirst": "Neueste zuerst",
|
"studySortNewestFirst": "Neueste zuerst",
|
||||||
"studyFewer": "Verringern",
|
|
||||||
"studyMore": "Erhöhen",
|
|
||||||
"countStepperType": "Zahl eingeben",
|
|
||||||
"studyLimitNewPerDay": "Neue Karten pro Tag begrenzen",
|
"studyLimitNewPerDay": "Neue Karten pro Tag begrenzen",
|
||||||
"studyLimitReviewsPerDay": "Wiederholungen pro Tag begrenzen",
|
"studyLimitReviewsPerDay": "Wiederholungen pro Tag begrenzen",
|
||||||
|
|
||||||
|
|
@ -1190,7 +1183,6 @@
|
||||||
"commonCancel": "Abbrechen",
|
"commonCancel": "Abbrechen",
|
||||||
"commonSave": "Speichern",
|
"commonSave": "Speichern",
|
||||||
"commonClose": "Schließen",
|
"commonClose": "Schließen",
|
||||||
"commonUndo": "Rückgängig",
|
|
||||||
"moreInfo": "Weitere Informationen",
|
"moreInfo": "Weitere Informationen",
|
||||||
"moreInfoCreated": "Erstellt",
|
"moreInfoCreated": "Erstellt",
|
||||||
"moreInfoModified": "Zuletzt geändert",
|
"moreInfoModified": "Zuletzt geändert",
|
||||||
|
|
@ -1202,8 +1194,6 @@
|
||||||
"moreInfoReviews": "Wiederholungen",
|
"moreInfoReviews": "Wiederholungen",
|
||||||
"moreInfoReviewCount": "Anzahl Wiederholungen",
|
"moreInfoReviewCount": "Anzahl Wiederholungen",
|
||||||
"moreInfoLastReviewed": "Zuletzt wiederholt",
|
"moreInfoLastReviewed": "Zuletzt wiederholt",
|
||||||
"moreInfoCopy": "Kopieren",
|
|
||||||
"copiedToClipboard": "In die Zwischenablage kopiert",
|
|
||||||
"commonTryAgain": "Erneut versuchen",
|
"commonTryAgain": "Erneut versuchen",
|
||||||
"personDataFailed": "Die Daten dieses Geräts konnten nicht geöffnet werden.",
|
"personDataFailed": "Die Daten dieses Geräts konnten nicht geöffnet werden.",
|
||||||
"sessionUnreachable": "Der Server war nicht erreichbar.",
|
"sessionUnreachable": "Der Server war nicht erreichbar.",
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
"@@locale": "en",
|
"@@locale": "en",
|
||||||
|
|
||||||
"appTitle": "Halkyon Learn",
|
"appTitle": "Halkyon Learn",
|
||||||
"launchBrand": "Halkyon",
|
|
||||||
"launchProduct": "Learn",
|
"launchProduct": "Learn",
|
||||||
"@appTitle": {"description": "The app's name, e.g. in the window title and the rail's logo."},
|
"@appTitle": {"description": "The app's name, e.g. in the window title and the rail's logo."},
|
||||||
|
|
||||||
|
|
@ -65,10 +64,6 @@
|
||||||
"studysetSheetDiscardMessage": "You have unsaved changes to this studyset. Discard them and close the form?",
|
"studysetSheetDiscardMessage": "You have unsaved changes to this studyset. Discard them and close the form?",
|
||||||
"studysetSheetDiscardConfirm": "Discard",
|
"studysetSheetDiscardConfirm": "Discard",
|
||||||
|
|
||||||
"paletteColorName": "{name, select, carrot{Carrot} cerise{Cerise} cobalt{Cobalt} copper{Copper} enzian{Enzian} fern{Fern} forest{Forest} ocean{Ocean} olive{Olive} pacific{Pacific} pickle{Pickle} pine{Pine} pink{Pink} plum{Plum} purple{Purple} reef{Reef} sahara{Sahara} slateblue{Slate blue} soil{Soil} strawberry{Strawberry} other{{name}}}",
|
|
||||||
"@paletteColorName": {"description": "A colour of the palette content can take, by its stored name.", "placeholders": {"name": {"type": "String"}}},
|
|
||||||
"colorPickerLabel": "Colour: {color}",
|
|
||||||
"@colorPickerLabel": {"placeholders": {"color": {"type": "String"}}},
|
|
||||||
|
|
||||||
"studysetCountFlashcards": "{count, plural, =1{1 flashcard} other{{count} flashcards}}",
|
"studysetCountFlashcards": "{count, plural, =1{1 flashcard} other{{count} flashcards}}",
|
||||||
"@studysetCountFlashcards": {"placeholders": {"count": {"type": "int"}}},
|
"@studysetCountFlashcards": {"placeholders": {"count": {"type": "int"}}},
|
||||||
|
|
@ -505,7 +500,6 @@
|
||||||
"languageChineseSimplified": "Chinese (Simplified)",
|
"languageChineseSimplified": "Chinese (Simplified)",
|
||||||
"languageChineseTraditional": "Chinese (Traditional)",
|
"languageChineseTraditional": "Chinese (Traditional)",
|
||||||
"fieldRequired": "required",
|
"fieldRequired": "required",
|
||||||
"fieldRequiredHelper": "Required",
|
|
||||||
|
|
||||||
"exploreTitle": "Explore",
|
"exploreTitle": "Explore",
|
||||||
"exploreEmpty": "Studysets that others share will appear here.",
|
"exploreEmpty": "Studysets that others share will appear here.",
|
||||||
|
|
@ -1240,9 +1234,6 @@
|
||||||
"studySortOldestFirst": "Oldest first",
|
"studySortOldestFirst": "Oldest first",
|
||||||
"studySortRandom": "Random",
|
"studySortRandom": "Random",
|
||||||
"studySortNewestFirst": "Newest first",
|
"studySortNewestFirst": "Newest first",
|
||||||
"studyFewer": "Decrease",
|
|
||||||
"studyMore": "Increase",
|
|
||||||
"countStepperType": "Type a number",
|
|
||||||
"studyLimitNewPerDay": "Limit new cards per day",
|
"studyLimitNewPerDay": "Limit new cards per day",
|
||||||
"studyLimitReviewsPerDay": "Limit reviews per day",
|
"studyLimitReviewsPerDay": "Limit reviews per day",
|
||||||
|
|
||||||
|
|
@ -1350,7 +1341,6 @@
|
||||||
"commonCancel": "Cancel",
|
"commonCancel": "Cancel",
|
||||||
"commonSave": "Save",
|
"commonSave": "Save",
|
||||||
"commonClose": "Close",
|
"commonClose": "Close",
|
||||||
"commonUndo": "Undo",
|
|
||||||
"moreInfo": "More info",
|
"moreInfo": "More info",
|
||||||
"moreInfoCreated": "Created",
|
"moreInfoCreated": "Created",
|
||||||
"moreInfoModified": "Last modified",
|
"moreInfoModified": "Last modified",
|
||||||
|
|
@ -1362,8 +1352,6 @@
|
||||||
"moreInfoReviews": "Reviews",
|
"moreInfoReviews": "Reviews",
|
||||||
"moreInfoReviewCount": "Review count",
|
"moreInfoReviewCount": "Review count",
|
||||||
"moreInfoLastReviewed": "Last reviewed",
|
"moreInfoLastReviewed": "Last reviewed",
|
||||||
"moreInfoCopy": "Copy",
|
|
||||||
"copiedToClipboard": "Copied to clipboard",
|
|
||||||
"commonTryAgain": "Try again",
|
"commonTryAgain": "Try again",
|
||||||
"personDataFailed": "Couldn't open this device's data.",
|
"personDataFailed": "Couldn't open this device's data.",
|
||||||
"sessionUnreachable": "Couldn't reach the server.",
|
"sessionUnreachable": "Couldn't reach the server.",
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
"@@locale": "en_US",
|
"@@locale": "en_US",
|
||||||
|
|
||||||
"studysetSheetColor": "Color",
|
"studysetSheetColor": "Color",
|
||||||
"colorPickerLabel": "Color: {color}",
|
|
||||||
"tagSheetColor": "Color",
|
"tagSheetColor": "Color",
|
||||||
"formatAlignCenter": "Center",
|
"formatAlignCenter": "Center",
|
||||||
"homeCustomise": "Customize",
|
"homeCustomise": "Customize",
|
||||||
|
|
|
||||||
|
|
@ -106,12 +106,6 @@ abstract class AppLocalizations {
|
||||||
/// **'Halkyon Learn'**
|
/// **'Halkyon Learn'**
|
||||||
String get appTitle;
|
String get appTitle;
|
||||||
|
|
||||||
/// No description provided for @launchBrand.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Halkyon'**
|
|
||||||
String get launchBrand;
|
|
||||||
|
|
||||||
/// No description provided for @launchProduct.
|
/// No description provided for @launchProduct.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
@ -352,18 +346,6 @@ abstract class AppLocalizations {
|
||||||
/// **'Discard'**
|
/// **'Discard'**
|
||||||
String get studysetSheetDiscardConfirm;
|
String get studysetSheetDiscardConfirm;
|
||||||
|
|
||||||
/// A colour of the palette content can take, by its stored name.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'{name, select, carrot{Carrot} cerise{Cerise} cobalt{Cobalt} copper{Copper} enzian{Enzian} fern{Fern} forest{Forest} ocean{Ocean} olive{Olive} pacific{Pacific} pickle{Pickle} pine{Pine} pink{Pink} plum{Plum} purple{Purple} reef{Reef} sahara{Sahara} slateblue{Slate blue} soil{Soil} strawberry{Strawberry} other{{name}}}'**
|
|
||||||
String paletteColorName(String name);
|
|
||||||
|
|
||||||
/// No description provided for @colorPickerLabel.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Colour: {color}'**
|
|
||||||
String colorPickerLabel(String color);
|
|
||||||
|
|
||||||
/// No description provided for @studysetCountFlashcards.
|
/// No description provided for @studysetCountFlashcards.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
@ -2710,12 +2692,6 @@ abstract class AppLocalizations {
|
||||||
/// **'required'**
|
/// **'required'**
|
||||||
String get fieldRequired;
|
String get fieldRequired;
|
||||||
|
|
||||||
/// No description provided for @fieldRequiredHelper.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Required'**
|
|
||||||
String get fieldRequiredHelper;
|
|
||||||
|
|
||||||
/// No description provided for @exploreTitle.
|
/// No description provided for @exploreTitle.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
@ -6430,24 +6406,6 @@ abstract class AppLocalizations {
|
||||||
/// **'Newest first'**
|
/// **'Newest first'**
|
||||||
String get studySortNewestFirst;
|
String get studySortNewestFirst;
|
||||||
|
|
||||||
/// No description provided for @studyFewer.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Decrease'**
|
|
||||||
String get studyFewer;
|
|
||||||
|
|
||||||
/// No description provided for @studyMore.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Increase'**
|
|
||||||
String get studyMore;
|
|
||||||
|
|
||||||
/// No description provided for @countStepperType.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Type a number'**
|
|
||||||
String get countStepperType;
|
|
||||||
|
|
||||||
/// No description provided for @studyLimitNewPerDay.
|
/// No description provided for @studyLimitNewPerDay.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
@ -7006,12 +6964,6 @@ abstract class AppLocalizations {
|
||||||
/// **'Close'**
|
/// **'Close'**
|
||||||
String get commonClose;
|
String get commonClose;
|
||||||
|
|
||||||
/// No description provided for @commonUndo.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Undo'**
|
|
||||||
String get commonUndo;
|
|
||||||
|
|
||||||
/// No description provided for @moreInfo.
|
/// No description provided for @moreInfo.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
@ -7078,18 +7030,6 @@ abstract class AppLocalizations {
|
||||||
/// **'Last reviewed'**
|
/// **'Last reviewed'**
|
||||||
String get moreInfoLastReviewed;
|
String get moreInfoLastReviewed;
|
||||||
|
|
||||||
/// No description provided for @moreInfoCopy.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Copy'**
|
|
||||||
String get moreInfoCopy;
|
|
||||||
|
|
||||||
/// No description provided for @copiedToClipboard.
|
|
||||||
///
|
|
||||||
/// In en, this message translates to:
|
|
||||||
/// **'Copied to clipboard'**
|
|
||||||
String get copiedToClipboard;
|
|
||||||
|
|
||||||
/// No description provided for @commonTryAgain.
|
/// No description provided for @commonTryAgain.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get appTitle => 'Halkyon Learn';
|
String get appTitle => 'Halkyon Learn';
|
||||||
|
|
||||||
@override
|
|
||||||
String get launchBrand => 'Halkyon';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get launchProduct => 'Learn';
|
String get launchProduct => 'Learn';
|
||||||
|
|
||||||
|
|
@ -153,42 +150,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get studysetSheetDiscardConfirm => 'Verwerfen';
|
String get studysetSheetDiscardConfirm => 'Verwerfen';
|
||||||
|
|
||||||
@override
|
|
||||||
String paletteColorName(String name) {
|
|
||||||
String _temp0 = intl.Intl.selectLogic(
|
|
||||||
name,
|
|
||||||
{
|
|
||||||
'carrot': 'Karotte',
|
|
||||||
'cerise': 'Kirschrot',
|
|
||||||
'cobalt': 'Kobalt',
|
|
||||||
'copper': 'Kupfer',
|
|
||||||
'enzian': 'Enzian',
|
|
||||||
'fern': 'Farn',
|
|
||||||
'forest': 'Wald',
|
|
||||||
'ocean': 'Ozean',
|
|
||||||
'olive': 'Olive',
|
|
||||||
'pacific': 'Pazifik',
|
|
||||||
'pickle': 'Essiggurke',
|
|
||||||
'pine': 'Kiefer',
|
|
||||||
'pink': 'Rosa',
|
|
||||||
'plum': 'Pflaume',
|
|
||||||
'purple': 'Lila',
|
|
||||||
'reef': 'Riff',
|
|
||||||
'sahara': 'Sahara',
|
|
||||||
'slateblue': 'Schieferblau',
|
|
||||||
'soil': 'Erde',
|
|
||||||
'strawberry': 'Erdbeere',
|
|
||||||
'other': '$name',
|
|
||||||
},
|
|
||||||
);
|
|
||||||
return '$_temp0';
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
String colorPickerLabel(String color) {
|
|
||||||
return 'Farbe: $color';
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String studysetCountFlashcards(int count) {
|
String studysetCountFlashcards(int count) {
|
||||||
String _temp0 = intl.Intl.pluralLogic(
|
String _temp0 = intl.Intl.pluralLogic(
|
||||||
|
|
@ -1672,9 +1633,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get fieldRequired => 'Pflichtfeld';
|
String get fieldRequired => 'Pflichtfeld';
|
||||||
|
|
||||||
@override
|
|
||||||
String get fieldRequiredHelper => 'Pflichtfeld';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get exploreTitle => 'Entdecken';
|
String get exploreTitle => 'Entdecken';
|
||||||
|
|
||||||
|
|
@ -4029,15 +3987,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get studySortNewestFirst => 'Neueste zuerst';
|
String get studySortNewestFirst => 'Neueste zuerst';
|
||||||
|
|
||||||
@override
|
|
||||||
String get studyFewer => 'Verringern';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get studyMore => 'Erhöhen';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get countStepperType => 'Zahl eingeben';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get studyLimitNewPerDay => 'Neue Karten pro Tag begrenzen';
|
String get studyLimitNewPerDay => 'Neue Karten pro Tag begrenzen';
|
||||||
|
|
||||||
|
|
@ -4387,9 +4336,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get commonClose => 'Schließen';
|
String get commonClose => 'Schließen';
|
||||||
|
|
||||||
@override
|
|
||||||
String get commonUndo => 'Rückgängig';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get moreInfo => 'Weitere Informationen';
|
String get moreInfo => 'Weitere Informationen';
|
||||||
|
|
||||||
|
|
@ -4423,12 +4369,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get moreInfoLastReviewed => 'Zuletzt wiederholt';
|
String get moreInfoLastReviewed => 'Zuletzt wiederholt';
|
||||||
|
|
||||||
@override
|
|
||||||
String get moreInfoCopy => 'Kopieren';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get copiedToClipboard => 'In die Zwischenablage kopiert';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get commonTryAgain => 'Erneut versuchen';
|
String get commonTryAgain => 'Erneut versuchen';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get appTitle => 'Halkyon Learn';
|
String get appTitle => 'Halkyon Learn';
|
||||||
|
|
||||||
@override
|
|
||||||
String get launchBrand => 'Halkyon';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get launchProduct => 'Learn';
|
String get launchProduct => 'Learn';
|
||||||
|
|
||||||
|
|
@ -151,42 +148,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get studysetSheetDiscardConfirm => 'Discard';
|
String get studysetSheetDiscardConfirm => 'Discard';
|
||||||
|
|
||||||
@override
|
|
||||||
String paletteColorName(String name) {
|
|
||||||
String _temp0 = intl.Intl.selectLogic(
|
|
||||||
name,
|
|
||||||
{
|
|
||||||
'carrot': 'Carrot',
|
|
||||||
'cerise': 'Cerise',
|
|
||||||
'cobalt': 'Cobalt',
|
|
||||||
'copper': 'Copper',
|
|
||||||
'enzian': 'Enzian',
|
|
||||||
'fern': 'Fern',
|
|
||||||
'forest': 'Forest',
|
|
||||||
'ocean': 'Ocean',
|
|
||||||
'olive': 'Olive',
|
|
||||||
'pacific': 'Pacific',
|
|
||||||
'pickle': 'Pickle',
|
|
||||||
'pine': 'Pine',
|
|
||||||
'pink': 'Pink',
|
|
||||||
'plum': 'Plum',
|
|
||||||
'purple': 'Purple',
|
|
||||||
'reef': 'Reef',
|
|
||||||
'sahara': 'Sahara',
|
|
||||||
'slateblue': 'Slate blue',
|
|
||||||
'soil': 'Soil',
|
|
||||||
'strawberry': 'Strawberry',
|
|
||||||
'other': '$name',
|
|
||||||
},
|
|
||||||
);
|
|
||||||
return '$_temp0';
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
String colorPickerLabel(String color) {
|
|
||||||
return 'Colour: $color';
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String studysetCountFlashcards(int count) {
|
String studysetCountFlashcards(int count) {
|
||||||
String _temp0 = intl.Intl.pluralLogic(
|
String _temp0 = intl.Intl.pluralLogic(
|
||||||
|
|
@ -1657,9 +1618,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get fieldRequired => 'required';
|
String get fieldRequired => 'required';
|
||||||
|
|
||||||
@override
|
|
||||||
String get fieldRequiredHelper => 'Required';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get exploreTitle => 'Explore';
|
String get exploreTitle => 'Explore';
|
||||||
|
|
||||||
|
|
@ -3997,15 +3955,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get studySortNewestFirst => 'Newest first';
|
String get studySortNewestFirst => 'Newest first';
|
||||||
|
|
||||||
@override
|
|
||||||
String get studyFewer => 'Decrease';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get studyMore => 'Increase';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get countStepperType => 'Type a number';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get studyLimitNewPerDay => 'Limit new cards per day';
|
String get studyLimitNewPerDay => 'Limit new cards per day';
|
||||||
|
|
||||||
|
|
@ -4350,9 +4299,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get commonClose => 'Close';
|
String get commonClose => 'Close';
|
||||||
|
|
||||||
@override
|
|
||||||
String get commonUndo => 'Undo';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get moreInfo => 'More info';
|
String get moreInfo => 'More info';
|
||||||
|
|
||||||
|
|
@ -4386,12 +4332,6 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
@override
|
@override
|
||||||
String get moreInfoLastReviewed => 'Last reviewed';
|
String get moreInfoLastReviewed => 'Last reviewed';
|
||||||
|
|
||||||
@override
|
|
||||||
String get moreInfoCopy => 'Copy';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get copiedToClipboard => 'Copied to clipboard';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get commonTryAgain => 'Try again';
|
String get commonTryAgain => 'Try again';
|
||||||
|
|
||||||
|
|
@ -7826,11 +7766,6 @@ class AppLocalizationsEnUs extends AppLocalizationsEn {
|
||||||
@override
|
@override
|
||||||
String get studysetSheetColor => 'Color';
|
String get studysetSheetColor => 'Color';
|
||||||
|
|
||||||
@override
|
|
||||||
String colorPickerLabel(String color) {
|
|
||||||
return 'Color: $color';
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get studysetSheetLicense => 'License';
|
String get studysetSheetLicense => 'License';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,13 @@ import 'package:halkyon_learn_flutter/src/core/instance/instance.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_checker.dart';
|
import 'package:halkyon_learn_flutter/src/core/instance/instance_checker.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_choice.dart';
|
import 'package:halkyon_learn_flutter/src/core/instance/instance_choice.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_store.dart';
|
import 'package:halkyon_learn_flutter/src/core/instance/instance_store.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/theme/app_fonts.dart';
|
import 'package:halkyon_learn_flutter/src/core/theme/cjk_fonts.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/auth/widget/session_gate.dart';
|
import 'package:halkyon_learn_flutter/src/feature/auth/widget/session_gate.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/dictionary/data/mecab_license.dart';
|
import 'package:halkyon_learn_flutter/src/feature/dictionary/data/mecab_license.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/geo_map/data/cldr_license.dart';
|
import 'package:halkyon_learn_flutter/src/feature/geo_map/data/cldr_license.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/instance/data/flag_icons_license.dart';
|
import 'package:halkyon_learn_flutter/src/feature/instance/data/flag_icons_license.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/kanji/data/kanjivg_license.dart';
|
import 'package:halkyon_learn_flutter/src/feature/kanji/data/kanjivg_license.dart';
|
||||||
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
import 'package:serverpod_flutter/serverpod_flutter.dart';
|
import 'package:serverpod_flutter/serverpod_flutter.dart';
|
||||||
|
|
@ -23,7 +24,8 @@ import 'package:serverpod_flutter/serverpod_flutter.dart';
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
Bloc.observer = const AppBlocObserver();
|
Bloc.observer = const AppBlocObserver();
|
||||||
registerAppFontLicenses();
|
registerFontLicenses();
|
||||||
|
registerCjkFontLicenses();
|
||||||
registerKanjiVgLicense();
|
registerKanjiVgLicense();
|
||||||
registerFlagIconsLicense();
|
registerFlagIconsLicense();
|
||||||
registerCldrLicense();
|
registerCldrLicense();
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,6 @@ import 'package:halkyon_learn_flutter/src/core/dependencies/person_scope.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/router/app_shell.dart';
|
import 'package:halkyon_learn_flutter/src/core/router/app_shell.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
|
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/router/tab_visibility.dart';
|
import 'package:halkyon_learn_flutter/src/core/router/tab_visibility.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/theme/brand.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/core/theme/palette_color.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/found_by_id.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/screen_tint.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/tinted_frame.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/feature/assistant/widget/connect_claude_screen.dart';
|
import 'package:halkyon_learn_flutter/src/feature/assistant/widget/connect_claude_screen.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/auth/widget/profile_screen.dart';
|
import 'package:halkyon_learn_flutter/src/feature/auth/widget/profile_screen.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/card/bloc/card_composer_bloc.dart';
|
import 'package:halkyon_learn_flutter/src/feature/card/bloc/card_composer_bloc.dart';
|
||||||
|
|
@ -44,6 +39,7 @@ import 'package:halkyon_learn_flutter/src/feature/studyset/widget/library_screen
|
||||||
import 'package:halkyon_learn_flutter/src/feature/studyset/widget/studyset_language_scope.dart';
|
import 'package:halkyon_learn_flutter/src/feature/studyset/widget/studyset_language_scope.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/studyset/widget/studyset_screen.dart';
|
import 'package:halkyon_learn_flutter/src/feature/studyset/widget/studyset_screen.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/tag/bloc/jellyfin_tags_bloc.dart';
|
import 'package:halkyon_learn_flutter/src/feature/tag/bloc/jellyfin_tags_bloc.dart';
|
||||||
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
/// The router of one person's app: the four tabs in a shell, each with its own
|
/// The router of one person's app: the four tabs in a shell, each with its own
|
||||||
|
|
@ -406,7 +402,7 @@ Widget _studysetScreen(
|
||||||
StudysetScreen(studyset: studyset, all: all, importOnOpen: importOnOpen),
|
StudysetScreen(studyset: studyset, all: all, importOnOpen: importOnOpen),
|
||||||
wayBack: (
|
wayBack: (
|
||||||
label: AppLocalizations.of(context).studysetBackToLibrary,
|
label: AppLocalizations.of(context).studysetBackToLibrary,
|
||||||
location: RoutePaths.library,
|
onPressed: () => context.go(RoutePaths.library),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -417,7 +413,7 @@ Widget _inStudyset(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
String id,
|
String id,
|
||||||
Widget Function(Studyset studyset, List<Studyset> all) builder, {
|
Widget Function(Studyset studyset, List<Studyset> all) builder, {
|
||||||
({String label, String location})? wayBack,
|
({String label, VoidCallback onPressed})? wayBack,
|
||||||
}) => FoundById<Studyset>(
|
}) => FoundById<Studyset>(
|
||||||
id: id,
|
id: id,
|
||||||
items: PersonScope.of(context).studysets.watchAll,
|
items: PersonScope.of(context).studysets.watchAll,
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ import 'package:halkyon_learn_flutter/src/core/instance/instance_checker.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_choice.dart';
|
import 'package:halkyon_learn_flutter/src/core/instance/instance_choice.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/instance/instance_scope.dart';
|
import 'package:halkyon_learn_flutter/src/core/instance/instance_scope.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/l10n/app_languages.dart';
|
import 'package:halkyon_learn_flutter/src/core/l10n/app_languages.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/theme/app_theme.dart';
|
import 'package:halkyon_learn_flutter/src/core/theme/learn_theme.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/launch_screen.dart';
|
import 'package:halkyon_learn_flutter/src/core/widget/app_launch_screen.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/instance/widget/first_start_screen.dart';
|
import 'package:halkyon_learn_flutter/src/feature/instance/widget/first_start_screen.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
|
|
@ -149,7 +149,7 @@ class _InstanceGateState() extends State<InstanceGate> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// Opening, or closing the one before.
|
// Opening, or closing the one before.
|
||||||
_ => _PlainApp(look: _look, home: const LaunchScreen()),
|
_ => _PlainApp(look: _look, home: const AppLaunchScreen()),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -163,8 +163,8 @@ class const _PlainApp({
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) => MaterialApp(
|
Widget build(BuildContext context) => MaterialApp(
|
||||||
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
||||||
theme: appTheme(Brightness.light),
|
theme: learnTheme(Brightness.light),
|
||||||
darkTheme: appTheme(Brightness.dark),
|
darkTheme: learnTheme(Brightness.dark),
|
||||||
themeMode: look.themeMode,
|
themeMode: look.themeMode,
|
||||||
locale: look.locale,
|
locale: look.locale,
|
||||||
localeListResolutionCallback: resolveAppLocale,
|
localeListResolutionCallback: resolveAppLocale,
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,14 @@ import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/l10n/app_languages.dart';
|
import 'package:halkyon_learn_flutter/src/core/l10n/app_languages.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
|
import 'package:halkyon_learn_flutter/src/core/router/route_paths.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/sync/bloc/sync_status_bloc.dart';
|
import 'package:halkyon_learn_flutter/src/core/sync/bloc/sync_status_bloc.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/theme/app_theme.dart';
|
import 'package:halkyon_learn_flutter/src/core/theme/learn_theme.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/keyboard_back_on_resume.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/feature/auth/bloc/session_bloc.dart';
|
import 'package:halkyon_learn_flutter/src/feature/auth/bloc/session_bloc.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/auth/model/auth_status.dart';
|
import 'package:halkyon_learn_flutter/src/feature/auth/model/auth_status.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/feedback/bloc/inbox_count_bloc.dart';
|
import 'package:halkyon_learn_flutter/src/feature/feedback/bloc/inbox_count_bloc.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/pomodoro/bloc/pomodoro_bloc.dart';
|
import 'package:halkyon_learn_flutter/src/feature/pomodoro/bloc/pomodoro_bloc.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/pomodoro/widget/pomodoro_presenter.dart';
|
import 'package:halkyon_learn_flutter/src/feature/pomodoro/widget/pomodoro_presenter.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/study/widget/study_button_block.dart';
|
import 'package:halkyon_learn_flutter/src/feature/study/widget/study_button_block.dart';
|
||||||
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
/// The blocks of the person's editors: the core's and the features'.
|
/// The blocks of the person's editors: the core's and the features'.
|
||||||
|
|
@ -65,8 +65,8 @@ class _PersonAppState() extends State<PersonApp> {
|
||||||
final settings = context.watch<DeviceSettingsBloc>().state;
|
final settings = context.watch<DeviceSettingsBloc>().state;
|
||||||
return MaterialApp.router(
|
return MaterialApp.router(
|
||||||
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
onGenerateTitle: (context) => AppLocalizations.of(context).appTitle,
|
||||||
theme: appTheme(Brightness.light),
|
theme: learnTheme(Brightness.light),
|
||||||
darkTheme: appTheme(Brightness.dark),
|
darkTheme: learnTheme(Brightness.dark),
|
||||||
themeMode: settings.themeMode,
|
themeMode: settings.themeMode,
|
||||||
locale: settings.locale,
|
locale: settings.locale,
|
||||||
localeListResolutionCallback: resolveAppLocale,
|
localeListResolutionCallback: resolveAppLocale,
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,7 @@ import 'package:halkyon_learn_flutter/src/core/citation/model/citation.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/citation/model/source.dart';
|
import 'package:halkyon_learn_flutter/src/core/citation/model/source.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/citation/widget/source_sheet.dart';
|
import 'package:halkyon_learn_flutter/src/core/citation/widget/source_sheet.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/citation/widget/source_view.dart';
|
import 'package:halkyon_learn_flutter/src/core/citation/widget/source_view.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/adaptive_sheet.dart';
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/undo_snack_bar.dart';
|
|
||||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/citation/model/source.dart';
|
import 'package:halkyon_learn_flutter/src/core/citation/model/source.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/video/youtube_videos.dart';
|
import 'package:halkyon_learn_flutter/src/core/video/youtube_videos.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/adaptive_sheet.dart';
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/confirm_dialog.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/field_label.dart';
|
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/text_limits.dart';
|
|
||||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import 'dart:async';
|
||||||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/dependencies/dependencies_scope.dart';
|
import 'package:halkyon_learn_flutter/src/core/dependencies/dependencies_scope.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/dependencies/person_dependencies.dart';
|
import 'package:halkyon_learn_flutter/src/core/dependencies/person_dependencies.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/launch_screen.dart';
|
import 'package:halkyon_learn_flutter/src/core/widget/app_launch_screen.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/feature/auth/model/auth_status.dart';
|
import 'package:halkyon_learn_flutter/src/feature/auth/model/auth_status.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
|
|
@ -77,7 +77,7 @@ class _PersonScopeState() extends State<PersonScope> {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
_ => const LaunchScreen(),
|
_ => const AppLaunchScreen(),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/adaptive_sheet.dart';
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
/// Lets the person choose one of [blocks] to insert, listed by their
|
/// Lets the person choose one of [blocks] to insert, listed by their
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
import 'package:halkyon_learn_flutter/l10n/app_localizations.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/content/content_blocks.dart';
|
import 'package:halkyon_learn_flutter/src/core/content/content_blocks.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
import 'package:halkyon_learn_flutter/src/core/editor/editor_blocks.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/theme/theme_extras.dart';
|
import 'package:halkyon_ui/halkyon_ui.dart';
|
||||||
import 'package:halkyon_learn_flutter/src/core/widget/text_limits.dart';
|
|
||||||
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
import 'package:lucide_icons_flutter/lucide_icons.dart';
|
||||||
import 'package:material_ui/material_ui.dart';
|
import 'package:material_ui/material_ui.dart';
|
||||||
|
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue