feat: disable letter cache (#446)

Fixes #445
This commit is contained in:
lollipopkit🏳️‍⚧️
2024-07-03 19:55:33 +08:00
committed by GitHub
parent 4430045550
commit 6e428c91d1
18 changed files with 103 additions and 69 deletions

View File

@@ -80,37 +80,22 @@ class MyApp extends StatelessWidget {
themeMode: themeMode,
theme: light,
darkTheme: tMode < 3 ? dark : dark.toAmoled,
home: _buildAppContent(ctx),
home: Builder(
builder: (context) {
context.setLibL10n();
final appL10n = AppLocalizations.of(context);
if (appL10n != null) l10n = appL10n;
final intros = _IntroPage.builders;
if (intros.isNotEmpty) {
return _IntroPage(intros);
}
return const HomePage();
},
),
);
}
Widget _buildAppContent(BuildContext ctx) {
//if (Pros.app.isWearOS) return const WearHome();
return const _AppContent(
intro: _IntroPage(),
child: HomePage(),
);
}
}
/// It's used for init settings related to [BuildContext]
final class _AppContent extends StatelessWidget {
final Widget child;
final Widget intro;
const _AppContent({required this.child, required this.intro});
@override
Widget build(BuildContext context) {
context.setLibL10n();
final appL10n = AppLocalizations.of(context);
if (appL10n != null) l10n = appL10n;
final showIntro = Stores.setting.showIntro.fetch();
if (showIntro) return intro;
return child;
}
}
void _setup(BuildContext context) async {

View File

@@ -280,7 +280,9 @@ class SettingStore extends PersistentStore {
/// Format: {width}x{height}
late final windowSize = property('windowSize', '');
late final showIntro = property('showIntro', true);
late final introVer = property('introVer', 0);
late final letterCache = property('letterCache', false);
// Never show these settings for users
//

View File

@@ -1,24 +1,26 @@
part of 'app.dart';
final class _IntroPage extends StatelessWidget {
const _IntroPage();
final List<IntroPageBuilder> pages;
static final _setting = Stores.setting;
static const _kIconSize = 23.0;
static const _introListPad = EdgeInsets.symmetric(horizontal: 17);
const _IntroPage(this.pages);
static const _builders = {
1: _buildAppSettings,
2: _buildRecommended,
1006: _buildTermLetterCache,
};
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, cons) {
final padTop = cons.maxHeight * .2;
final padTop = cons.maxHeight * .16;
final pages_ = pages.map((e) => e(context, padTop)).toList();
return IntroPage(
pages: [
_buildAppSettings(context, padTop),
_buildRecommended(context, padTop),
],
pages: pages_,
onDone: (ctx) {
Stores.setting.showIntro.put(false);
Stores.setting.introVer.put(BuildData.build);
Navigator.of(ctx).pushReplacement(
MaterialPageRoute(builder: (_) => const HomePage()),
);
@@ -28,12 +30,29 @@ final class _IntroPage extends StatelessWidget {
);
}
Widget _buildRecommended(BuildContext context, double padTop) {
static Widget _buildTermLetterCache(BuildContext context, double padTop) {
return ListView(
padding: _introListPad,
children: [
SizedBox(height: padTop),
const Icon(Bootstrap.stars, size: 35),
IntroPage.title(icon: BoxIcons.bxs_terminal, big: true),
SizedBox(height: padTop),
ListTile(
leading: const Icon(Bootstrap.input_cursor),
title: Text(l10n.letterCache),
subtitle: Text(l10n.letterCacheTip, style: UIs.textGrey),
trailing: StoreSwitch(prop: _setting.letterCache),
).cardx,
],
);
}
static Widget _buildRecommended(BuildContext context, double padTop) {
return ListView(
padding: _introListPad,
children: [
SizedBox(height: padTop),
IntroPage.title(icon: Bootstrap.stars, big: true),
SizedBox(height: padTop),
ListTile(
leading: const Icon(MingCute.delete_2_fill),
@@ -57,12 +76,12 @@ final class _IntroPage extends StatelessWidget {
);
}
Widget _buildAppSettings(BuildContext ctx, double padTop) {
static Widget _buildAppSettings(BuildContext ctx, double padTop) {
return ListView(
padding: _introListPad,
children: [
SizedBox(height: padTop),
_buildTitle(l10n.init, big: true),
IntroPage.title(text: l10n.init, big: true),
SizedBox(height: padTop),
ListTile(
leading: const Icon(IonIcons.language),
@@ -94,14 +113,15 @@ final class _IntroPage extends StatelessWidget {
);
}
Widget _buildTitle(String text, {bool big = false}) {
return Center(
child: Text(
text,
style: big
? const TextStyle(fontSize: 41, fontWeight: FontWeight.w500)
: UIs.textGrey,
),
);
static List<IntroPageBuilder> get builders {
final storedVer = _setting.introVer.fetch();
return _builders.entries
.where((e) => e.key > storedVer)
.map((e) => e.value)
.toList();
}
static final _setting = Stores.setting;
static const _kIconSize = 23.0;
static const _introListPad = EdgeInsets.symmetric(horizontal: 17);
}

View File

@@ -67,7 +67,6 @@
"decode": "Decode",
"decompress": "Dekomprimieren",
"delete": "Löschen",
"deleteScripts": "Gleichzeitiges Löschen von Server-Skripten",
"deleteServers": "Batch-Löschung von Servern",
"deviceName": "Gerätename",
"dirEmpty": "Stelle sicher, dass der Ordner leer ist.",
@@ -154,6 +153,8 @@
"languageName": "Deutsch",
"lastTry": "Letzter Versuch",
"launchPage": "Startseite",
"letterCache": "Buchstaben-Caching",
"letterCacheTip": "Empfohlen zu aktivieren, aber die Aktivierung verhindert die Eingabe von CJK (Chinesisch, Japanisch, Koreanisch) Zeichen",
"license": "Lizenzen",
"light": "Hell",
"loadingFiles": "Lädt Dateien...",

View File

@@ -67,7 +67,6 @@
"decode": "Decode",
"decompress": "Decompress",
"delete": "Delete",
"deleteScripts": "Delete server scripts at the same time",
"deleteServers": "Batch delete servers",
"deviceName": "Device name",
"dirEmpty": "Make sure the folder is empty.",
@@ -154,6 +153,8 @@
"languageName": "English",
"lastTry": "Last try",
"launchPage": "Launch page",
"letterCache": "Letter caching",
"letterCacheTip": "Recommended to enable, but enabling it prevents the input of CJK (Chinese, Japanese, Korean) characters",
"license": "License",
"light": "Light",
"loadingFiles": "Loading files...",

View File

@@ -67,7 +67,6 @@
"decode": "Decodificar",
"decompress": "Descomprimir",
"delete": "Eliminar",
"deleteScripts": "Eliminar scripts del servidor simultáneamente",
"deleteServers": "Eliminar servidores en lote",
"deviceName": "Nombre del dispositivo",
"dirEmpty": "Asegúrate de que el directorio esté vacío",
@@ -154,6 +153,8 @@
"languageName": "Español",
"lastTry": "Último intento",
"launchPage": "Página de lanzamiento",
"letterCache": "Caché de letras",
"letterCacheTip": "Se recomienda activar, pero al activarlo se impide la introducción de caracteres CJK (chino, japonés, coreano)",
"license": "Licencia de código abierto",
"light": "Claro",
"loadingFiles": "Cargando directorio...",

View File

@@ -67,7 +67,6 @@
"decode": "Décoder",
"decompress": "Décompresser",
"delete": "Supprimer",
"deleteScripts": "Supprimer les scripts du serveur en même temps",
"deleteServers": "Supprimer des serveurs en lot",
"deviceName": "Nom de l'appareil",
"dirEmpty": "Assurez-vous que le répertoire est vide.",
@@ -154,6 +153,8 @@
"languageName": "Français",
"lastTry": "Dernière tentative",
"launchPage": "Page de lancement",
"letterCache": "Mise en cache des lettres",
"letterCacheTip": "Recommandé à activer, mais son activation empêche la saisie de caractères CJK (chinois, japonais, coréen)",
"license": "Licence",
"light": "Clair",
"loadingFiles": "Chargement des fichiers...",

View File

@@ -67,7 +67,6 @@
"decode": "Membaca sandi",
"decompress": "Dekompresi",
"delete": "Menghapus",
"deleteScripts": "Menghapus skrip server secara bersamaan",
"deleteServers": "Penghapusan server secara batch",
"deviceName": "Nama perangkat",
"dirEmpty": "Pastikan dir kosong.",
@@ -154,6 +153,8 @@
"languageName": "Indonesia",
"lastTry": "Percobaan terakhir",
"launchPage": "Halaman peluncuran",
"letterCache": "Caching huruf",
"letterCacheTip": "Disarankan untuk diaktifkan, tetapi mengaktifkannya mencegah input karakter CJK (Cina, Jepang, Korea)",
"license": "Lisensi",
"light": "Terang",
"loadingFiles": "Memuat file ...",

View File

@@ -67,7 +67,6 @@
"decode": "デコード",
"decompress": "解凍",
"delete": "削除",
"deleteScripts": "サーバースクリプトも削除",
"deleteServers": "サーバーを一括削除",
"deviceName": "デバイス名",
"dirEmpty": "フォルダーが空であることを確認してください",
@@ -154,6 +153,8 @@
"languageName": "日本語",
"lastTry": "最後の試み",
"launchPage": "起動ページ",
"letterCache": "文字キャッシング",
"letterCacheTip": "有効化を推奨しますが、有効にするとCJK中国語、日本語、韓国語の文字の入力ができなくなります",
"license": "オープンソースライセンス",
"light": "ライト",
"loadingFiles": "ディレクトリを読み込んでいます...",

View File

@@ -67,7 +67,6 @@
"decode": "Decoderen",
"decompress": "Decomprimeren",
"delete": "Verwijderen",
"deleteScripts": "Verwijder tegelijkertijd serverscripts",
"deleteServers": "Servers batchgewijs verwijderen",
"deviceName": "Apparaatnaam",
"dirEmpty": "Zorg ervoor dat de map leeg is.",
@@ -154,6 +153,8 @@
"languageName": "Nederlands",
"lastTry": "Laatste poging",
"launchPage": "Startpagina",
"letterCache": "Lettercaching",
"letterCacheTip": "Aanbevolen om in te schakelen, maar bij inschakeling wordt de invoer van CJK (Chinees, Japans, Koreaans) tekens voorkomen",
"license": "Licentie",
"light": "Licht",
"loadingFiles": "Bestanden laden...",

View File

@@ -67,7 +67,6 @@
"decode": "Decodificar",
"decompress": "Descomprimir",
"delete": "Excluir",
"deleteScripts": "Excluir scripts do servidor simultaneamente",
"deleteServers": "Excluir servidores em lote",
"deviceName": "Nome do dispositivo",
"dirEmpty": "Certifique-se de que a pasta está vazia",
@@ -154,6 +153,8 @@
"languageName": "Português",
"lastTry": "Última tentativa",
"launchPage": "Página de lançamento",
"letterCache": "Cache de letras",
"letterCacheTip": "Recomendado para ativar, mas a ativação impede a entrada de caracteres CJK (chinês, japonês, coreano)",
"license": "Licença de código aberto",
"light": "Claro",
"loadingFiles": "Carregando diretórios...",

View File

@@ -67,7 +67,6 @@
"decode": "декодировать",
"decompress": "разархивировать",
"delete": "удалить",
"deleteScripts": "удалить скрипты с сервера",
"deleteServers": "удалить серверы пакетно",
"deviceName": "Название устройства",
"dirEmpty": "Пожалуйста, убедитесь, что папка пуста",
@@ -154,6 +153,8 @@
"languageName": "Русский",
"lastTry": "последняя попытка",
"launchPage": "стартовая страница",
"letterCache": "Кэширование букв",
"letterCacheTip": "Рекомендуется включить, но его активация препятствует вводу символов CJK (китайский, японский, корейский)",
"license": "лицензия",
"light": "светлая",
"loadingFiles": "Загрузка файлов...",

View File

@@ -67,7 +67,6 @@
"decode": "解码",
"decompress": "解压缩",
"delete": "删除",
"deleteScripts": "同时删除服务器脚本",
"deleteServers": "批量删除服务器",
"deviceName": "设备名",
"dirEmpty": "请确保文件夹为空",
@@ -154,6 +153,8 @@
"languageName": "简体中文",
"lastTry": "最后尝试",
"launchPage": "启动页",
"letterCache": "输入法字符缓存",
"letterCacheTip": "推荐开启,但是开启后无法输入 CJK 等文字",
"license": "开源许可证",
"light": "亮",
"loadingFiles": "正在加载目录。。。",

View File

@@ -67,7 +67,6 @@
"decode": "解碼",
"decompress": "解壓縮",
"delete": "刪除",
"deleteScripts": "同時刪除伺服器腳本",
"deleteServers": "批量刪除伺服器",
"deviceName": "設備名",
"dirEmpty": "請確保資料夾為空",
@@ -154,6 +153,8 @@
"languageName": "繁體中文",
"lastTry": "最後嘗試",
"launchPage": "啓動頁",
"letterCache": "输入法字符緩存",
"letterCacheTip": "推薦開啟但是開啟後無法輸入CJK中文、日文、韓文等文字",
"license": "開源許可證",
"light": "亮",
"loadingFiles": "正在加載目錄...",

View File

@@ -156,6 +156,7 @@ class _SettingPageState extends State<SettingPage> {
Widget _buildSSH() {
return Column(
children: [
_buildLetterCache(),
_buildSSHWakeLock(),
_buildTermTheme(),
_buildFont(),
@@ -1178,4 +1179,16 @@ class _SettingPageState extends State<SettingPage> {
trailing: StoreSwitch(prop: _setting.betaTest),
);
}
Widget _buildLetterCache() {
return ListTile(
leading: const Icon(Bootstrap.input_cursor),
title: Text(l10n.letterCache),
subtitle: Text(
'${l10n.letterCacheTip}\n${l10n.needRestart}',
style: UIs.textGrey,
),
trailing: StoreSwitch(prop: _setting.letterCache),
);
}
}

View File

@@ -129,6 +129,7 @@ class SSHPageState extends State<SSHPage>
}
Widget _buildBody() {
final letterCache = Stores.setting.letterCache.fetch();
return SizedBox(
height: _media.size.height -
_virtKeysHeight -
@@ -144,8 +145,10 @@ class SSHPageState extends State<SSHPage>
_terminal,
key: _termKey,
controller: _terminalController,
keyboardType: TextInputType.text,
enableSuggestions: true,
keyboardType: letterCache
? TextInputType.text
: TextInputType.visiblePassword,
enableSuggestions: !letterCache,
textStyle: _terminalStyle,
theme: _terminalTheme,
deleteDetection: isMobile,

View File

@@ -385,8 +385,8 @@ packages:
dependency: "direct main"
description:
path: "."
ref: "v1.0.59"
resolved-ref: aaca37cb7052e301bbd723615f6827371ad7f2b8
ref: "v1.0.60"
resolved-ref: "5a88f7c6901e8f2c556a1d79ceaf7be9fb518233"
url: "https://github.com/lppcg/fl_lib"
source: git
version: "0.0.1"

View File

@@ -58,7 +58,7 @@ dependencies:
fl_lib:
git:
url: https://github.com/lppcg/fl_lib
ref: v1.0.59
ref: v1.0.60
dependency_overrides:
# dartssh2: