mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
new: editor softWrap (#338)
This commit is contained in:
@@ -272,6 +272,8 @@ class SettingStore extends PersistentStore {
|
|||||||
/// 0 -> unset, 1 -> true, 2 -> false
|
/// 0 -> unset, 1 -> true, 2 -> false
|
||||||
late final inAppUpdate = property('inAppUpdate', 0);
|
late final inAppUpdate = property('inAppUpdate', 0);
|
||||||
|
|
||||||
|
late final editorSoftWrap = property('editorSoftWrap', isIOS);
|
||||||
|
|
||||||
// Never show these settings for users
|
// Never show these settings for users
|
||||||
//
|
//
|
||||||
// ------BEGIN------
|
// ------BEGIN------
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "Abschaltung",
|
"shutdown": "Abschaltung",
|
||||||
"size": "Größe",
|
"size": "Größe",
|
||||||
"snippet": "Snippet",
|
"snippet": "Snippet",
|
||||||
|
"softWrap": "Weicher Umbruch",
|
||||||
"speed": "Tempo",
|
"speed": "Tempo",
|
||||||
"spentTime": "Benötigte Zeit: {time}",
|
"spentTime": "Benötigte Zeit: {time}",
|
||||||
"sshTip": "Diese Funktion befindet sich jetzt in der Experimentierphase.\n\nBitte melde Bugs auf {url} oder mach mit bei der Entwicklung.",
|
"sshTip": "Diese Funktion befindet sich jetzt in der Experimentierphase.\n\nBitte melde Bugs auf {url} oder mach mit bei der Entwicklung.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "Shutdown",
|
"shutdown": "Shutdown",
|
||||||
"size": "Size",
|
"size": "Size",
|
||||||
"snippet": "Snippet",
|
"snippet": "Snippet",
|
||||||
|
"softWrap": "Soft wrap",
|
||||||
"speed": "Speed",
|
"speed": "Speed",
|
||||||
"spentTime": "Spent time: {time}",
|
"spentTime": "Spent time: {time}",
|
||||||
"sshTip": "This function is now in the experimental stage.\n\nPlease report bugs on {url} or join our development.",
|
"sshTip": "This function is now in the experimental stage.\n\nPlease report bugs on {url} or join our development.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "Apagar",
|
"shutdown": "Apagar",
|
||||||
"size": "Tamaño",
|
"size": "Tamaño",
|
||||||
"snippet": "Fragmento de código",
|
"snippet": "Fragmento de código",
|
||||||
|
"softWrap": "Salto de línea suave",
|
||||||
"speed": "Velocidad",
|
"speed": "Velocidad",
|
||||||
"spentTime": "Tiempo gastado: {time}",
|
"spentTime": "Tiempo gastado: {time}",
|
||||||
"sshTip": "Esta función está en fase de pruebas.\n\nPor favor, informa los problemas en {url}, o únete a nuestro desarrollo.",
|
"sshTip": "Esta función está en fase de pruebas.\n\nPor favor, informa los problemas en {url}, o únete a nuestro desarrollo.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "Éteindre",
|
"shutdown": "Éteindre",
|
||||||
"size": "Taille",
|
"size": "Taille",
|
||||||
"snippet": "Extrait",
|
"snippet": "Extrait",
|
||||||
|
"softWrap": "Retour à la ligne doux",
|
||||||
"speed": "Vitesse",
|
"speed": "Vitesse",
|
||||||
"spentTime": "Temps écoulé : {time}",
|
"spentTime": "Temps écoulé : {time}",
|
||||||
"sshTip": "Cette fonction est actuellement au stade expérimental.\n\n Veuillez signaler les bogues sur {url} ou rejoignez notre développement.",
|
"sshTip": "Cette fonction est actuellement au stade expérimental.\n\n Veuillez signaler les bogues sur {url} ou rejoignez notre développement.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "Matikan",
|
"shutdown": "Matikan",
|
||||||
"size": "Ukuran",
|
"size": "Ukuran",
|
||||||
"snippet": "Snippet",
|
"snippet": "Snippet",
|
||||||
|
"softWrap": "Pembungkus lembut",
|
||||||
"speed": "Kecepatan",
|
"speed": "Kecepatan",
|
||||||
"spentTime": "Menghabiskan waktu: {time}",
|
"spentTime": "Menghabiskan waktu: {time}",
|
||||||
"sshTip": "Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di {url} atau bergabunglah dengan pengembangan kami.",
|
"sshTip": "Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di {url} atau bergabunglah dengan pengembangan kami.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "シャットダウン",
|
"shutdown": "シャットダウン",
|
||||||
"size": "サイズ",
|
"size": "サイズ",
|
||||||
"snippet": "スニペット",
|
"snippet": "スニペット",
|
||||||
|
"softWrap": "ソフトラップ",
|
||||||
"speed": "速度",
|
"speed": "速度",
|
||||||
"spentTime": "時間を費やしました: {time}",
|
"spentTime": "時間を費やしました: {time}",
|
||||||
"sshTip": "この機能は現在テスト段階にあります。\n\n問題がある場合は、{url}でフィードバックしてください。",
|
"sshTip": "この機能は現在テスト段階にあります。\n\n問題がある場合は、{url}でフィードバックしてください。",
|
||||||
|
|||||||
@@ -256,6 +256,7 @@
|
|||||||
"shutdown": "Afsluiten",
|
"shutdown": "Afsluiten",
|
||||||
"size": "Grootte",
|
"size": "Grootte",
|
||||||
"snippet": "Fragment",
|
"snippet": "Fragment",
|
||||||
|
"softWrap": "Zachte wrap",
|
||||||
"speed": "Snelheid",
|
"speed": "Snelheid",
|
||||||
"spentTime": "Gebruikte tijd: {time}",
|
"spentTime": "Gebruikte tijd: {time}",
|
||||||
"sshTip": "Deze functie bevindt zich momenteel in de experimentele fase.\n\nMeld alstublieft bugs op {url} of sluit je aan bij onze ontwikkeling.",
|
"sshTip": "Deze functie bevindt zich momenteel in de experimentele fase.\n\nMeld alstublieft bugs op {url} of sluit je aan bij onze ontwikkeling.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "Desligar",
|
"shutdown": "Desligar",
|
||||||
"size": "Tamanho",
|
"size": "Tamanho",
|
||||||
"snippet": "Snippet",
|
"snippet": "Snippet",
|
||||||
|
"softWrap": "Quebra de linha suave",
|
||||||
"speed": "Velocidade",
|
"speed": "Velocidade",
|
||||||
"spentTime": "Tempo gasto: {time}",
|
"spentTime": "Tempo gasto: {time}",
|
||||||
"sshTip": "Esta funcionalidade está em fase de teste.\n\nPor favor, reporte problemas em {url} ou junte-se a nós no desenvolvimento.",
|
"sshTip": "Esta funcionalidade está em fase de teste.\n\nPor favor, reporte problemas em {url} ou junte-se a nós no desenvolvimento.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "выключение",
|
"shutdown": "выключение",
|
||||||
"size": "размер",
|
"size": "размер",
|
||||||
"snippet": "фрагмент",
|
"snippet": "фрагмент",
|
||||||
|
"softWrap": "Мягкий перенос",
|
||||||
"speed": "скорость",
|
"speed": "скорость",
|
||||||
"spentTime": "Затрачено времени: {time}",
|
"spentTime": "Затрачено времени: {time}",
|
||||||
"sshTip": "Эта функция находится в стадии тестирования.\n\nПожалуйста, отправляйте отчеты о проблемах на {url} или присоединяйтесь к нашей разработке.",
|
"sshTip": "Эта функция находится в стадии тестирования.\n\nПожалуйста, отправляйте отчеты о проблемах на {url} или присоединяйтесь к нашей разработке.",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "关机",
|
"shutdown": "关机",
|
||||||
"size": "大小",
|
"size": "大小",
|
||||||
"snippet": "代码片段",
|
"snippet": "代码片段",
|
||||||
|
"softWrap": "自动换行",
|
||||||
"speed": "速度",
|
"speed": "速度",
|
||||||
"spentTime": "耗时: {time}",
|
"spentTime": "耗时: {time}",
|
||||||
"sshTip": "该功能目前处于测试阶段。\n\n请在 {url} 反馈问题,或者加入我们开发。",
|
"sshTip": "该功能目前处于测试阶段。\n\n请在 {url} 反馈问题,或者加入我们开发。",
|
||||||
|
|||||||
@@ -257,6 +257,7 @@
|
|||||||
"shutdown": "关机",
|
"shutdown": "关机",
|
||||||
"size": "大小",
|
"size": "大小",
|
||||||
"snippet": "程式片段",
|
"snippet": "程式片段",
|
||||||
|
"softWrap": "軟換行",
|
||||||
"speed": "速度",
|
"speed": "速度",
|
||||||
"spentTime": "耗時: {time}",
|
"spentTime": "耗時: {time}",
|
||||||
"sshTip": "該功能目前處於測試階段。\n\n請在 {url} 反饋問題,或者加入我們開發。",
|
"sshTip": "該功能目前處於測試階段。\n\n請在 {url} 反饋問題,或者加入我們開發。",
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ class _EditorPageState extends State<EditorPage> {
|
|||||||
styles: _codeTheme,
|
styles: _codeTheme,
|
||||||
),
|
),
|
||||||
child: CodeField(
|
child: CodeField(
|
||||||
|
wrap: Stores.setting.editorSoftWrap.fetch(),
|
||||||
focusNode: _focusNode,
|
focusNode: _focusNode,
|
||||||
controller: _controller,
|
controller: _controller,
|
||||||
textStyle: _textStyle,
|
textStyle: _textStyle,
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
Widget _buildEditor() {
|
Widget _buildEditor() {
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
|
_buildEditorWrap(),
|
||||||
_buildEditorFontSize(),
|
_buildEditorFontSize(),
|
||||||
_buildEditorTheme(),
|
_buildEditorTheme(),
|
||||||
_buildEditorDarkTheme(),
|
_buildEditorDarkTheme(),
|
||||||
@@ -1114,4 +1115,11 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildEditorWrap() {
|
||||||
|
return ListTile(
|
||||||
|
title: Text(l10n.softWrap),
|
||||||
|
trailing: StoreSwitch(prop: _setting.editorSoftWrap),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:toolbox/core/extension/context/common.dart';
|
|||||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||||
import 'package:toolbox/core/extension/context/locale.dart';
|
import 'package:toolbox/core/extension/context/locale.dart';
|
||||||
import 'package:toolbox/core/route.dart';
|
import 'package:toolbox/core/route.dart';
|
||||||
|
import 'package:toolbox/data/model/server/server_private_info.dart';
|
||||||
import 'package:toolbox/data/provider/server.dart';
|
import 'package:toolbox/data/provider/server.dart';
|
||||||
import 'package:toolbox/data/res/provider.dart';
|
import 'package:toolbox/data/res/provider.dart';
|
||||||
import 'package:toolbox/data/res/ui.dart';
|
import 'package:toolbox/data/res/ui.dart';
|
||||||
@@ -14,7 +15,7 @@ class SSHTabPage extends StatefulWidget {
|
|||||||
const SSHTabPage({super.key});
|
const SSHTabPage({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_SSHTabPageState createState() => _SSHTabPageState();
|
State<SSHTabPage> createState() => _SSHTabPageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _SSHTabPageState extends State<SSHTabPage>
|
class _SSHTabPageState extends State<SSHTabPage>
|
||||||
@@ -84,7 +85,6 @@ class _SSHTabPageState extends State<SSHTabPage>
|
|||||||
if (confirm != true) {
|
if (confirm != true) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// debugPrint("Removing a tab whose tabId = $e");
|
|
||||||
_tabIds.remove(e);
|
_tabIds.remove(e);
|
||||||
_refreshTabs();
|
_refreshTabs();
|
||||||
},
|
},
|
||||||
@@ -115,30 +115,7 @@ class _SSHTabPageState extends State<SSHTabPage>
|
|||||||
title: Text(spi.name),
|
title: Text(spi.name),
|
||||||
subtitle: Text(spi.id, style: UIs.textGrey),
|
subtitle: Text(spi.id, style: UIs.textGrey),
|
||||||
trailing: const Icon(Icons.chevron_right),
|
trailing: const Icon(Icons.chevron_right),
|
||||||
onTap: () {
|
onTap: () => _onTapInitCard(spi),
|
||||||
final name = () {
|
|
||||||
if (_tabIds.containsKey(spi.name)) {
|
|
||||||
return '${spi.name}(${_tabIds.length + 1})';
|
|
||||||
}
|
|
||||||
return spi.name;
|
|
||||||
}();
|
|
||||||
final key = GlobalKey(debugLabel: 'sshTabPage_$name');
|
|
||||||
_tabIds[name] = SSHPage(
|
|
||||||
key: key,
|
|
||||||
spi: spi,
|
|
||||||
notFromTab: false,
|
|
||||||
onSessionEnd: () {
|
|
||||||
// debugPrint("Session done received on page whose tabId = $name");
|
|
||||||
// debugPrint("key = $key");
|
|
||||||
_tabIds.remove(name);
|
|
||||||
_refreshTabs();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
_refreshTabs();
|
|
||||||
final idx = _tabIds.length - 1;
|
|
||||||
_tabController.animateTo(idx);
|
|
||||||
_fabRN.value = idx;
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -156,6 +133,31 @@ class _SSHTabPageState extends State<SSHTabPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _onTapInitCard(ServerPrivateInfo spi) {
|
||||||
|
final name = () {
|
||||||
|
if (_tabIds.containsKey(spi.name)) {
|
||||||
|
return '${spi.name}(${_tabIds.length + 1})';
|
||||||
|
}
|
||||||
|
return spi.name;
|
||||||
|
}();
|
||||||
|
final key = GlobalKey<State<SSHPage>>(debugLabel: 'sshTabPage_$name');
|
||||||
|
_tabIds[name] = SSHPage(
|
||||||
|
key: key,
|
||||||
|
spi: spi,
|
||||||
|
notFromTab: false,
|
||||||
|
onSessionEnd: () {
|
||||||
|
// debugPrint("Session done received on page whose tabId = $name");
|
||||||
|
// debugPrint("key = $key");
|
||||||
|
_tabIds.remove(name);
|
||||||
|
_refreshTabs();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
_refreshTabs();
|
||||||
|
final idx = _tabIds.length - 1;
|
||||||
|
_tabController.animateTo(idx);
|
||||||
|
_fabRN.value = idx;
|
||||||
|
}
|
||||||
|
|
||||||
void _refreshTabs() {
|
void _refreshTabs() {
|
||||||
_tabController = TabController(
|
_tabController = TabController(
|
||||||
length: _tabIds.length,
|
length: _tabIds.length,
|
||||||
|
|||||||
Reference in New Issue
Block a user