diff --git a/.gitmodules b/.gitmodules index 56e043b0..4cbe8e47 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,7 +9,7 @@ [submodule "fl_lib"] path = packages/fl_lib url = https://github.com/lollipopkit/fl_lib - branch = main + branch = before-sqlite [submodule "fl_build"] path = packages/fl_build url = https://github.com/lppcg/fl_build.git diff --git a/lib/data/res/github_id.dart b/lib/data/res/github_id.dart index a46ea8e3..703dfa45 100644 --- a/lib/data/res/github_id.dart +++ b/lib/data/res/github_id.dart @@ -149,6 +149,7 @@ abstract final class GithubIds { 'jjyou-github', 'yeluonight', 'Yinhono', + 'kuvaldini', }; } diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index 0b2dc088..d765913d 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -78,6 +78,8 @@ class SettingStore extends HiveStore { late final editorFontSize = propertyDefault('editorFontSize', 12.5); + late final editorFontFamily = propertyDefault('editorFontFamily', ''); + /// Trusted SSH host key fingerprints keyed by `serverId::keyType`. late final sshKnownHostFingerprints = propertyDefault>( 'sshKnownHostFingerprints', diff --git a/lib/view/page/setting/entries/app.dart b/lib/view/page/setting/entries/app.dart index d7a0cae2..0acd4be4 100644 --- a/lib/view/page/setting/entries/app.dart +++ b/lib/view/page/setting/entries/app.dart @@ -465,6 +465,7 @@ extension _App on _AppSettingsPageState { /// Encode [map] to String with indent `\t` final text = jsonIndentEncoder.convert(mapForEditor); + final editorFont = _setting.editorFontFamily.fetch(); await EditorPage.route.go( context, args: EditorPageArgs( @@ -472,9 +473,10 @@ extension _App on _AppSettingsPageState { lang: ProgLang.json, title: libL10n.setting, onSave: onSave, - closeAfterSave: SettingStore.instance.closeAfterSave.fetch(), - softWrap: SettingStore.instance.editorSoftWrap.fetch(), - enableHighlight: SettingStore.instance.editorHighlight.fetch(), + closeAfterSave: _setting.closeAfterSave.fetch(), + softWrap: _setting.editorSoftWrap.fetch(), + enableHighlight: _setting.editorHighlight.fetch(), + fontFamily: editorFont.isEmpty ? null : editorFont, ), ); } diff --git a/lib/view/page/setting/entries/editor.dart b/lib/view/page/setting/entries/editor.dart index 3f2dc806..7d05c489 100644 --- a/lib/view/page/setting/entries/editor.dart +++ b/lib/view/page/setting/entries/editor.dart @@ -5,6 +5,7 @@ extension _Editor on _AppSettingsPageState { return Column( children: [ _buildEditorWrap(), + _buildEditorFontFamily(), _buildEditorFontSize(), _buildEditorTheme(), _buildEditorDarkTheme(), @@ -96,6 +97,43 @@ extension _Editor on _AppSettingsPageState { ); } + Widget _buildEditorFontFamily() { + return ListTile( + leading: const Icon(MingCute.font_fill), + title: Text(libL10n.font), + trailing: ValBuilder( + listenable: _setting.editorFontFamily.listenable(), + builder: (val) => Text( + val.isEmpty ? libL10n.auto.toLowerCase() : val, + style: UIs.text15, + ), + ), + onTap: () => _showFontFamilyDialog(_setting.editorFontFamily), + ); + } + + void _showFontFamilyDialog(HiveProp property) { + final ctrl = TextEditingController(text: property.fetch()); + void onSave() { + context.pop(); + property.put(ctrl.text.trim()); + } + + context.showRoundDialog( + title: libL10n.font, + child: Input( + controller: ctrl, + autoFocus: true, + type: TextInputType.text, + icon: Icons.font_download, + hint: 'monospace / Consolas / Fira Code ...', + suggestion: false, + onSubmitted: (_) => onSave(), + ), + actions: Btn.ok(onTap: onSave).toList, + ); + } + void _showFontSizeDialog(HiveProp property) { final ctrl = TextEditingController(text: property.fetch().toString()); void onSave() { diff --git a/lib/view/page/setting/entries/ssh.dart b/lib/view/page/setting/entries/ssh.dart index 77ca07f7..d5f67528 100644 --- a/lib/view/page/setting/entries/ssh.dart +++ b/lib/view/page/setting/entries/ssh.dart @@ -69,10 +69,12 @@ extension _SSH on _AppSettingsPageState { // iOS can't copy file to app dir, so we need to use the original path if (isIOS) { _setting.fontPath.put(path); + await FontUtils.loadFrom(path); } else { final fontFile = File(path); await fontFile.copy(Paths.font); _setting.fontPath.put(Paths.font); + await FontUtils.loadFrom(Paths.font); } context.pop(); diff --git a/lib/view/page/storage/local.dart b/lib/view/page/storage/local.dart index c3b75f83..c991751e 100644 --- a/lib/view/page/storage/local.dart +++ b/lib/view/page/storage/local.dart @@ -11,7 +11,7 @@ import 'package:server_box/data/model/sftp/worker.dart'; import 'package:server_box/data/provider/server/all.dart'; import 'package:server_box/data/provider/sftp.dart'; import 'package:server_box/data/res/misc.dart'; -import 'package:server_box/data/store/setting.dart'; +import 'package:server_box/data/res/store.dart'; import 'package:server_box/view/page/storage/sftp.dart'; import 'package:server_box/view/page/storage/sftp_mission.dart'; @@ -366,9 +366,13 @@ extension _OnTapFile on _LocalFilePageState { context.showSnackBar(libL10n.saved); setStateSafe(() {}); }, - closeAfterSave: SettingStore.instance.closeAfterSave.fetch(), - softWrap: SettingStore.instance.editorSoftWrap.fetch(), - enableHighlight: SettingStore.instance.editorHighlight.fetch(), + closeAfterSave: Stores.setting.closeAfterSave.fetch(), + softWrap: Stores.setting.editorSoftWrap.fetch(), + enableHighlight: Stores.setting.editorHighlight.fetch(), + fontFamily: () { + final font = Stores.setting.editorFontFamily.fetch(); + return font.isEmpty ? null : font; + }(), ), ); } diff --git a/lib/view/page/storage/sftp.dart b/lib/view/page/storage/sftp.dart index 18f49575..583dc82a 100644 --- a/lib/view/page/storage/sftp.dart +++ b/lib/view/page/storage/sftp.dart @@ -17,7 +17,6 @@ import 'package:server_box/data/provider/server/single.dart'; import 'package:server_box/data/provider/sftp.dart'; import 'package:server_box/data/res/misc.dart'; import 'package:server_box/data/res/store.dart'; -import 'package:server_box/data/store/setting.dart'; import 'package:server_box/view/page/ssh/page/page.dart'; import 'package:server_box/view/page/storage/local.dart'; import 'package:server_box/view/page/storage/sftp_mission.dart'; @@ -360,9 +359,13 @@ extension _Actions on _SftpPageState { .add(SftpReq(req.spi, remotePath, localPath, SftpReqType.upload)); context.showSnackBar(l10n.added2List); }, - closeAfterSave: SettingStore.instance.closeAfterSave.fetch(), - softWrap: SettingStore.instance.editorSoftWrap.fetch(), - enableHighlight: SettingStore.instance.editorHighlight.fetch(), + closeAfterSave: Stores.setting.closeAfterSave.fetch(), + softWrap: Stores.setting.editorSoftWrap.fetch(), + enableHighlight: Stores.setting.editorHighlight.fetch(), + fontFamily: () { + final font = Stores.setting.editorFontFamily.fetch(); + return font.isEmpty ? null : font; + }(), ), ); } diff --git a/packages/fl_lib b/packages/fl_lib index c1d32f89..ffb12c86 160000 --- a/packages/fl_lib +++ b/packages/fl_lib @@ -1 +1 @@ -Subproject commit c1d32f89cd3f4bd7291d948226dda59674cadbe7 +Subproject commit ffb12c8672b57546736a6b35951a868449b85cb3