mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
opt.: close after saving (#684)
This commit is contained in:
@@ -238,6 +238,9 @@ class SettingStore extends HiveStore {
|
|||||||
/// Run foreground service on Android, if the SSH terminal is running
|
/// Run foreground service on Android, if the SSH terminal is running
|
||||||
late final fgService = propertyDefault('fgService', false);
|
late final fgService = propertyDefault('fgService', false);
|
||||||
|
|
||||||
|
/// Close the editor after saving
|
||||||
|
late final closeAfterSave = propertyDefault('closeAfterSave', false);
|
||||||
|
|
||||||
// Never show these settings for users
|
// Never show these settings for users
|
||||||
//
|
//
|
||||||
// ------BEGIN------
|
// ------BEGIN------
|
||||||
|
|||||||
@@ -212,6 +212,12 @@ abstract class AppLocalizations {
|
|||||||
/// **'This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".'**
|
/// **'This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".'**
|
||||||
String get bgRunTip;
|
String get bgRunTip;
|
||||||
|
|
||||||
|
/// No description provided for @closeAfterSave.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Save and close'**
|
||||||
|
String get closeAfterSave;
|
||||||
|
|
||||||
/// No description provided for @cmd.
|
/// No description provided for @cmd.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Dieser Schalter bedeutet nur, dass die App versuchen wird, im Hintergrund zu laufen. Ob sie im Hintergrund laufen kann, hängt davon ab, ob die Berechtigungen aktiviert sind oder nicht. Bei nativem Android deaktivieren Sie bitte \"Batterieoptimierung\" in dieser App, und bei miui ändern Sie bitte die Energiesparrichtlinie auf \"Unbegrenzt\".';
|
String get bgRunTip => 'Dieser Schalter bedeutet nur, dass die App versuchen wird, im Hintergrund zu laufen. Ob sie im Hintergrund laufen kann, hängt davon ab, ob die Berechtigungen aktiviert sind oder nicht. Bei nativem Android deaktivieren Sie bitte \"Batterieoptimierung\" in dieser App, und bei miui ändern Sie bitte die Energiesparrichtlinie auf \"Unbegrenzt\".';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Speichern und schließen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Command';
|
String get cmd => 'Command';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".';
|
String get bgRunTip => 'This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Save and close';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Command';
|
String get cmd => 'Command';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Este interruptor solo indica que la aplicación intentará correr en segundo plano, si puede hacerlo o no depende de si tiene el permiso correspondiente. En Android puro, por favor desactiva la “optimización de batería” para esta app, en MIUI por favor cambia la estrategia de ahorro de energía a “Sin restricciones”.';
|
String get bgRunTip => 'Este interruptor solo indica que la aplicación intentará correr en segundo plano, si puede hacerlo o no depende de si tiene el permiso correspondiente. En Android puro, por favor desactiva la “optimización de batería” para esta app, en MIUI por favor cambia la estrategia de ahorro de energía a “Sin restricciones”.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Guardar y cerrar';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Comando';
|
String get cmd => 'Comando';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Cette option signifie seulement que le programme essaiera de s\'exécuter en arrière-plan, que cela soit possible dépend de l\'autorisation activée ou non. Pour Android natif, veuillez désactiver l\'« Optimisation de la batterie » dans cette application, et pour MIUI, veuillez changer la politique d\'économie d\'énergie en « Illimité ».';
|
String get bgRunTip => 'Cette option signifie seulement que le programme essaiera de s\'exécuter en arrière-plan, que cela soit possible dépend de l\'autorisation activée ou non. Pour Android natif, veuillez désactiver l\'« Optimisation de la batterie » dans cette application, et pour MIUI, veuillez changer la politique d\'économie d\'énergie en « Illimité ».';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Enregistrer et fermer';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Commande';
|
String get cmd => 'Commande';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsId extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Sakelar ini hanya berarti aplikasi akan mencoba berjalan di latar belakang, apakah aplikasi dapat berjalan di latar belakang tergantung pada apakah izin diaktifkan atau tidak. Untuk Android asli, nonaktifkan \"Pengoptimalan Baterai\" di aplikasi ini, dan untuk miui, ubah kebijakan penghematan daya ke \"Tidak Terbatas\".';
|
String get bgRunTip => 'Sakelar ini hanya berarti aplikasi akan mencoba berjalan di latar belakang, apakah aplikasi dapat berjalan di latar belakang tergantung pada apakah izin diaktifkan atau tidak. Untuk Android asli, nonaktifkan \"Pengoptimalan Baterai\" di aplikasi ini, dan untuk miui, ubah kebijakan penghematan daya ke \"Tidak Terbatas\".';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Simpan dan tutup';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Memerintah';
|
String get cmd => 'Memerintah';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsJa extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'このスイッチはプログラムがバックグラウンドで実行を試みることを意味しますが、実際にバックグラウンドで実行できるかどうかは、権限が有効になっているかに依存します。AOSPベースのAndroid ROMでは、このアプリの「バッテリー最適化」をオフにしてください。MIUIでは、省エネモードを「無制限」に変更してください。';
|
String get bgRunTip => 'このスイッチはプログラムがバックグラウンドで実行を試みることを意味しますが、実際にバックグラウンドで実行できるかどうかは、権限が有効になっているかに依存します。AOSPベースのAndroid ROMでは、このアプリの「バッテリー最適化」をオフにしてください。MIUIでは、省エネモードを「無制限」に変更してください。';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => '保存して閉じる';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'コマンド';
|
String get cmd => 'コマンド';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Deze schakelaar betekent alleen dat het programma zal proberen op de achtergrond uit te voeren, of het in de achtergrond kan worden uitgevoerd, hangt af van of de toestemming is ingeschakeld of niet. Voor native Android, schakel \"Batterijoptimalisatie\" uit in deze app, en voor miui, wijzig de energiebesparingsbeleid naar \"Onbeperkt\".';
|
String get bgRunTip => 'Deze schakelaar betekent alleen dat het programma zal proberen op de achtergrond uit te voeren, of het in de achtergrond kan worden uitgevoerd, hangt af van of de toestemming is ingeschakeld of niet. Voor native Android, schakel \"Batterijoptimalisatie\" uit in deze app, en voor miui, wijzig de energiebesparingsbeleid naar \"Onbeperkt\".';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Opslaan en sluiten';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Opdracht';
|
String get cmd => 'Opdracht';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Este interruptor indica que o programa tentará rodar em segundo plano, mas a capacidade de fazer isso depende das permissões concedidas. No Android nativo, desative a \'Otimização de bateria\' para este app, no MIUI, altere a estratégia de economia de energia para \'Sem restrições\'.';
|
String get bgRunTip => 'Este interruptor indica que o programa tentará rodar em segundo plano, mas a capacidade de fazer isso depende das permissões concedidas. No Android nativo, desative a \'Otimização de bateria\' para este app, no MIUI, altere a estratégia de economia de energia para \'Sem restrições\'.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Salvar e fechar';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Comando';
|
String get cmd => 'Comando';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Этот переключатель означает, что программа будет пытаться работать в фоновом режиме, но фактическое выполнение зависит от того, включено ли разрешение. Для нативного Android отключите «Оптимизацию батареи» для этого приложения, для MIUI измените контроль активности на «Нет ограничений».';
|
String get bgRunTip => 'Этот переключатель означает, что программа будет пытаться работать в фоновом режиме, но фактическое выполнение зависит от того, включено ли разрешение. Для нативного Android отключите «Оптимизацию батареи» для этого приложения, для MIUI измените контроль активности на «Нет ограничений».';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Сохранить и закрыть';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Команда';
|
String get cmd => 'Команда';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsTr extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Bu anahtar yalnızca programın arka planda çalışmayı deneyeceğini ifade eder. Arka planda çalışıp çalışamayacağı, iznin etkinleştirilip etkinleştirilmediğine bağlıdır. AOSP tabanlı Android ROM\'larda, bu uygulamada \"Pil Optimizasyonunu\" devre dışı bırakın. MIUI / HyperOS için, güç tasarrufu politikasını \"Sınırsız\" olarak değiştirin.';
|
String get bgRunTip => 'Bu anahtar yalnızca programın arka planda çalışmayı deneyeceğini ifade eder. Arka planda çalışıp çalışamayacağı, iznin etkinleştirilip etkinleştirilmediğine bağlıdır. AOSP tabanlı Android ROM\'larda, bu uygulamada \"Pil Optimizasyonunu\" devre dışı bırakın. MIUI / HyperOS için, güç tasarrufu politikasını \"Sınırsız\" olarak değiştirin.';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Kaydet ve kapat';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Komut';
|
String get cmd => 'Komut';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => 'Цей перемикач лише вказує на те, що програма намагатиметься працювати у фоновому режимі. Чи може вона працювати у фоновому режимі, залежить від прав доступу. Для AOSP-орієнтованих Android ROM, будь ласка, вимкніть \"Оптимізацію акумулятора\" в цьому додатку. Для MIUI / HyperOS, будь ласка, змініть політику економії енергії на \"Нескінченна\".';
|
String get bgRunTip => 'Цей перемикач лише вказує на те, що програма намагатиметься працювати у фоновому режимі. Чи може вона працювати у фоновому режимі, залежить від прав доступу. Для AOSP-орієнтованих Android ROM, будь ласка, вимкніть \"Оптимізацію акумулятора\" в цьому додатку. Для MIUI / HyperOS, будь ласка, змініть політику економії енергії на \"Нескінченна\".';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => 'Зберегти та закрити';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => 'Команда';
|
String get cmd => 'Команда';
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,9 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => '此开关只代表程序会尝试在后台运行,具体能否后台运行取决于是否开启了权限。原生 Android 请关闭本 App 的“电池优化”,MIUI / HyperOS 请修改省电策略为“无限制”。';
|
String get bgRunTip => '此开关只代表程序会尝试在后台运行,具体能否后台运行取决于是否开启了权限。原生 Android 请关闭本 App 的“电池优化”,MIUI / HyperOS 请修改省电策略为“无限制”。';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => '保存后关闭';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => '命令';
|
String get cmd => '命令';
|
||||||
|
|
||||||
@@ -756,6 +759,9 @@ class AppLocalizationsZhTw extends AppLocalizationsZh {
|
|||||||
@override
|
@override
|
||||||
String get bgRunTip => '此開關只代表程式會嘗試在後台運行,具體能否在後臺運行取決於是否開啟了權限。 原生 Android 請關閉本 App 的“電池優化”,MIUI / HyperOS 請修改省電策略為“無限制”。';
|
String get bgRunTip => '此開關只代表程式會嘗試在後台運行,具體能否在後臺運行取決於是否開啟了權限。 原生 Android 請關閉本 App 的“電池優化”,MIUI / HyperOS 請修改省電策略為“無限制”。';
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get closeAfterSave => '儲存後關閉';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get cmd => '命令';
|
String get cmd => '命令';
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Batterie",
|
"battery": "Batterie",
|
||||||
"bgRun": "Hintergrundaktualisierung",
|
"bgRun": "Hintergrundaktualisierung",
|
||||||
"bgRunTip": "Dieser Schalter bedeutet nur, dass die App versuchen wird, im Hintergrund zu laufen. Ob sie im Hintergrund laufen kann, hängt davon ab, ob die Berechtigungen aktiviert sind oder nicht. Bei nativem Android deaktivieren Sie bitte \"Batterieoptimierung\" in dieser App, und bei miui ändern Sie bitte die Energiesparrichtlinie auf \"Unbegrenzt\".",
|
"bgRunTip": "Dieser Schalter bedeutet nur, dass die App versuchen wird, im Hintergrund zu laufen. Ob sie im Hintergrund laufen kann, hängt davon ab, ob die Berechtigungen aktiviert sind oder nicht. Bei nativem Android deaktivieren Sie bitte \"Batterieoptimierung\" in dieser App, und bei miui ändern Sie bitte die Energiesparrichtlinie auf \"Unbegrenzt\".",
|
||||||
|
"closeAfterSave": "Speichern und schließen",
|
||||||
"cmd": "Command",
|
"cmd": "Command",
|
||||||
"collapseUITip": "Ob lange Listen in der Benutzeroberfläche standardmäßig eingeklappt werden sollen oder nicht",
|
"collapseUITip": "Ob lange Listen in der Benutzeroberfläche standardmäßig eingeklappt werden sollen oder nicht",
|
||||||
"conn": "Verbindung",
|
"conn": "Verbindung",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Battery",
|
"battery": "Battery",
|
||||||
"bgRun": "Run in background",
|
"bgRun": "Run in background",
|
||||||
"bgRunTip": "This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".",
|
"bgRunTip": "This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".",
|
||||||
|
"closeAfterSave": "Save and close",
|
||||||
"cmd": "Command",
|
"cmd": "Command",
|
||||||
"collapseUITip": "Whether to collapse long lists present in the UI by default",
|
"collapseUITip": "Whether to collapse long lists present in the UI by default",
|
||||||
"conn": "Connection",
|
"conn": "Connection",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Batería",
|
"battery": "Batería",
|
||||||
"bgRun": "Ejecución en segundo plano",
|
"bgRun": "Ejecución en segundo plano",
|
||||||
"bgRunTip": "Este interruptor solo indica que la aplicación intentará correr en segundo plano, si puede hacerlo o no depende de si tiene el permiso correspondiente. En Android puro, por favor desactiva la “optimización de batería” para esta app, en MIUI por favor cambia la estrategia de ahorro de energía a “Sin restricciones”.",
|
"bgRunTip": "Este interruptor solo indica que la aplicación intentará correr en segundo plano, si puede hacerlo o no depende de si tiene el permiso correspondiente. En Android puro, por favor desactiva la “optimización de batería” para esta app, en MIUI por favor cambia la estrategia de ahorro de energía a “Sin restricciones”.",
|
||||||
|
"closeAfterSave": "Guardar y cerrar",
|
||||||
"cmd": "Comando",
|
"cmd": "Comando",
|
||||||
"collapseUITip": "¿Colapsar por defecto las listas largas en la UI?",
|
"collapseUITip": "¿Colapsar por defecto las listas largas en la UI?",
|
||||||
"conn": "Conectar",
|
"conn": "Conectar",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Batterie",
|
"battery": "Batterie",
|
||||||
"bgRun": "Exécution en arrière-plan",
|
"bgRun": "Exécution en arrière-plan",
|
||||||
"bgRunTip": "Cette option signifie seulement que le programme essaiera de s'exécuter en arrière-plan, que cela soit possible dépend de l'autorisation activée ou non. Pour Android natif, veuillez désactiver l'« Optimisation de la batterie » dans cette application, et pour MIUI, veuillez changer la politique d'économie d'énergie en « Illimité ».",
|
"bgRunTip": "Cette option signifie seulement que le programme essaiera de s'exécuter en arrière-plan, que cela soit possible dépend de l'autorisation activée ou non. Pour Android natif, veuillez désactiver l'« Optimisation de la batterie » dans cette application, et pour MIUI, veuillez changer la politique d'économie d'énergie en « Illimité ».",
|
||||||
|
"closeAfterSave": "Enregistrer et fermer",
|
||||||
"cmd": "Commande",
|
"cmd": "Commande",
|
||||||
"collapseUITip": "Indique si les longues listes présentées dans l'interface utilisateur doivent être réduites par défaut.",
|
"collapseUITip": "Indique si les longues listes présentées dans l'interface utilisateur doivent être réduites par défaut.",
|
||||||
"conn": "Connexion",
|
"conn": "Connexion",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Baterai",
|
"battery": "Baterai",
|
||||||
"bgRun": "Jalankan di Backgroud",
|
"bgRun": "Jalankan di Backgroud",
|
||||||
"bgRunTip": "Sakelar ini hanya berarti aplikasi akan mencoba berjalan di latar belakang, apakah aplikasi dapat berjalan di latar belakang tergantung pada apakah izin diaktifkan atau tidak. Untuk Android asli, nonaktifkan \"Pengoptimalan Baterai\" di aplikasi ini, dan untuk miui, ubah kebijakan penghematan daya ke \"Tidak Terbatas\".",
|
"bgRunTip": "Sakelar ini hanya berarti aplikasi akan mencoba berjalan di latar belakang, apakah aplikasi dapat berjalan di latar belakang tergantung pada apakah izin diaktifkan atau tidak. Untuk Android asli, nonaktifkan \"Pengoptimalan Baterai\" di aplikasi ini, dan untuk miui, ubah kebijakan penghematan daya ke \"Tidak Terbatas\".",
|
||||||
|
"closeAfterSave": "Simpan dan tutup",
|
||||||
"cmd": "Memerintah",
|
"cmd": "Memerintah",
|
||||||
"collapseUITip": "Apakah akan menciutkan daftar panjang yang ada di UI secara default atau tidak",
|
"collapseUITip": "Apakah akan menciutkan daftar panjang yang ada di UI secara default atau tidak",
|
||||||
"conn": "Koneksi",
|
"conn": "Koneksi",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "バッテリー",
|
"battery": "バッテリー",
|
||||||
"bgRun": "バックグラウンド実行",
|
"bgRun": "バックグラウンド実行",
|
||||||
"bgRunTip": "このスイッチはプログラムがバックグラウンドで実行を試みることを意味しますが、実際にバックグラウンドで実行できるかどうかは、権限が有効になっているかに依存します。AOSPベースのAndroid ROMでは、このアプリの「バッテリー最適化」をオフにしてください。MIUIでは、省エネモードを「無制限」に変更してください。",
|
"bgRunTip": "このスイッチはプログラムがバックグラウンドで実行を試みることを意味しますが、実際にバックグラウンドで実行できるかどうかは、権限が有効になっているかに依存します。AOSPベースのAndroid ROMでは、このアプリの「バッテリー最適化」をオフにしてください。MIUIでは、省エネモードを「無制限」に変更してください。",
|
||||||
|
"closeAfterSave": "保存して閉じる",
|
||||||
"cmd": "コマンド",
|
"cmd": "コマンド",
|
||||||
"collapseUITip": "UIの長いリストをデフォルトで折りたたむかどうか",
|
"collapseUITip": "UIの長いリストをデフォルトで折りたたむかどうか",
|
||||||
"conn": "接続",
|
"conn": "接続",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Batterij",
|
"battery": "Batterij",
|
||||||
"bgRun": "Uitvoeren op de achtergrond",
|
"bgRun": "Uitvoeren op de achtergrond",
|
||||||
"bgRunTip": "Deze schakelaar betekent alleen dat het programma zal proberen op de achtergrond uit te voeren, of het in de achtergrond kan worden uitgevoerd, hangt af van of de toestemming is ingeschakeld of niet. Voor native Android, schakel \"Batterijoptimalisatie\" uit in deze app, en voor miui, wijzig de energiebesparingsbeleid naar \"Onbeperkt\".",
|
"bgRunTip": "Deze schakelaar betekent alleen dat het programma zal proberen op de achtergrond uit te voeren, of het in de achtergrond kan worden uitgevoerd, hangt af van of de toestemming is ingeschakeld of niet. Voor native Android, schakel \"Batterijoptimalisatie\" uit in deze app, en voor miui, wijzig de energiebesparingsbeleid naar \"Onbeperkt\".",
|
||||||
|
"closeAfterSave": "Opslaan en sluiten",
|
||||||
"cmd": "Opdracht",
|
"cmd": "Opdracht",
|
||||||
"collapseUITip": "Of lange lijsten in de UI standaard moeten worden ingeklapt",
|
"collapseUITip": "Of lange lijsten in de UI standaard moeten worden ingeklapt",
|
||||||
"conn": "Verbinding",
|
"conn": "Verbinding",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Bateria",
|
"battery": "Bateria",
|
||||||
"bgRun": "Execução em segundo plano",
|
"bgRun": "Execução em segundo plano",
|
||||||
"bgRunTip": "Este interruptor indica que o programa tentará rodar em segundo plano, mas a capacidade de fazer isso depende das permissões concedidas. No Android nativo, desative a 'Otimização de bateria' para este app, no MIUI, altere a estratégia de economia de energia para 'Sem restrições'.",
|
"bgRunTip": "Este interruptor indica que o programa tentará rodar em segundo plano, mas a capacidade de fazer isso depende das permissões concedidas. No Android nativo, desative a 'Otimização de bateria' para este app, no MIUI, altere a estratégia de economia de energia para 'Sem restrições'.",
|
||||||
|
"closeAfterSave": "Salvar e fechar",
|
||||||
"cmd": "Comando",
|
"cmd": "Comando",
|
||||||
"collapseUITip": "Deve colapsar listas longas na UI por padrão?",
|
"collapseUITip": "Deve colapsar listas longas na UI por padrão?",
|
||||||
"conn": "Conectar",
|
"conn": "Conectar",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Батарея",
|
"battery": "Батарея",
|
||||||
"bgRun": "Работа в фоновом режиме",
|
"bgRun": "Работа в фоновом режиме",
|
||||||
"bgRunTip": "Этот переключатель означает, что программа будет пытаться работать в фоновом режиме, но фактическое выполнение зависит от того, включено ли разрешение. Для нативного Android отключите «Оптимизацию батареи» для этого приложения, для MIUI измените контроль активности на «Нет ограничений».",
|
"bgRunTip": "Этот переключатель означает, что программа будет пытаться работать в фоновом режиме, но фактическое выполнение зависит от того, включено ли разрешение. Для нативного Android отключите «Оптимизацию батареи» для этого приложения, для MIUI измените контроль активности на «Нет ограничений».",
|
||||||
|
"closeAfterSave": "Сохранить и закрыть",
|
||||||
"cmd": "Команда",
|
"cmd": "Команда",
|
||||||
"collapseUITip": "Свернуть длинные списки в UI по умолчанию",
|
"collapseUITip": "Свернуть длинные списки в UI по умолчанию",
|
||||||
"conn": "Подключение",
|
"conn": "Подключение",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Pil",
|
"battery": "Pil",
|
||||||
"bgRun": "Arka planda çalıştır",
|
"bgRun": "Arka planda çalıştır",
|
||||||
"bgRunTip": "Bu anahtar yalnızca programın arka planda çalışmayı deneyeceğini ifade eder. Arka planda çalışıp çalışamayacağı, iznin etkinleştirilip etkinleştirilmediğine bağlıdır. AOSP tabanlı Android ROM'larda, bu uygulamada \"Pil Optimizasyonunu\" devre dışı bırakın. MIUI / HyperOS için, güç tasarrufu politikasını \"Sınırsız\" olarak değiştirin.",
|
"bgRunTip": "Bu anahtar yalnızca programın arka planda çalışmayı deneyeceğini ifade eder. Arka planda çalışıp çalışamayacağı, iznin etkinleştirilip etkinleştirilmediğine bağlıdır. AOSP tabanlı Android ROM'larda, bu uygulamada \"Pil Optimizasyonunu\" devre dışı bırakın. MIUI / HyperOS için, güç tasarrufu politikasını \"Sınırsız\" olarak değiştirin.",
|
||||||
|
"closeAfterSave": "Kaydet ve kapat",
|
||||||
"cmd": "Komut",
|
"cmd": "Komut",
|
||||||
"collapseUITip": "UI'daki uzun listeleri varsayılan olarak gizleyip gizlememeyi belirler",
|
"collapseUITip": "UI'daki uzun listeleri varsayılan olarak gizleyip gizlememeyi belirler",
|
||||||
"conn": "Bağlantı",
|
"conn": "Bağlantı",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "Акумулятор",
|
"battery": "Акумулятор",
|
||||||
"bgRun": "Запуск у фоновому режимі",
|
"bgRun": "Запуск у фоновому режимі",
|
||||||
"bgRunTip": "Цей перемикач лише вказує на те, що програма намагатиметься працювати у фоновому режимі. Чи може вона працювати у фоновому режимі, залежить від прав доступу. Для AOSP-орієнтованих Android ROM, будь ласка, вимкніть \"Оптимізацію акумулятора\" в цьому додатку. Для MIUI / HyperOS, будь ласка, змініть політику економії енергії на \"Нескінченна\".",
|
"bgRunTip": "Цей перемикач лише вказує на те, що програма намагатиметься працювати у фоновому режимі. Чи може вона працювати у фоновому режимі, залежить від прав доступу. Для AOSP-орієнтованих Android ROM, будь ласка, вимкніть \"Оптимізацію акумулятора\" в цьому додатку. Для MIUI / HyperOS, будь ласка, змініть політику економії енергії на \"Нескінченна\".",
|
||||||
|
"closeAfterSave": "Зберегти та закрити",
|
||||||
"cmd": "Команда",
|
"cmd": "Команда",
|
||||||
"collapseUITip": "Сховати довгі списки, що є у UI за замовчуванням",
|
"collapseUITip": "Сховати довгі списки, що є у UI за замовчуванням",
|
||||||
"conn": "З'єднання",
|
"conn": "З'єднання",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "电池",
|
"battery": "电池",
|
||||||
"bgRun": "后台运行",
|
"bgRun": "后台运行",
|
||||||
"bgRunTip": "此开关只代表程序会尝试在后台运行,具体能否后台运行取决于是否开启了权限。原生 Android 请关闭本 App 的“电池优化”,MIUI / HyperOS 请修改省电策略为“无限制”。",
|
"bgRunTip": "此开关只代表程序会尝试在后台运行,具体能否后台运行取决于是否开启了权限。原生 Android 请关闭本 App 的“电池优化”,MIUI / HyperOS 请修改省电策略为“无限制”。",
|
||||||
|
"closeAfterSave": "保存后关闭",
|
||||||
"cmd": "命令",
|
"cmd": "命令",
|
||||||
"collapseUITip": "是否默认折叠 UI 中的长列表",
|
"collapseUITip": "是否默认折叠 UI 中的长列表",
|
||||||
"conn": "连接",
|
"conn": "连接",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"battery": "電池",
|
"battery": "電池",
|
||||||
"bgRun": "後台運行",
|
"bgRun": "後台運行",
|
||||||
"bgRunTip": "此開關只代表程式會嘗試在後台運行,具體能否在後臺運行取決於是否開啟了權限。 原生 Android 請關閉本 App 的“電池優化”,MIUI / HyperOS 請修改省電策略為“無限制”。",
|
"bgRunTip": "此開關只代表程式會嘗試在後台運行,具體能否在後臺運行取決於是否開啟了權限。 原生 Android 請關閉本 App 的“電池優化”,MIUI / HyperOS 請修改省電策略為“無限制”。",
|
||||||
|
"closeAfterSave": "儲存後關閉",
|
||||||
"cmd": "命令",
|
"cmd": "命令",
|
||||||
"collapseUITip": "是否預設折疊 UI 中存在的長列表",
|
"collapseUITip": "是否預設折疊 UI 中存在的長列表",
|
||||||
"conn": "連接",
|
"conn": "連接",
|
||||||
|
|||||||
@@ -11,17 +11,17 @@ import 'package:flutter_highlight/themes/monokai.dart';
|
|||||||
import 'package:server_box/core/extension/context/locale.dart';
|
import 'package:server_box/core/extension/context/locale.dart';
|
||||||
import 'package:server_box/data/res/highlight.dart';
|
import 'package:server_box/data/res/highlight.dart';
|
||||||
import 'package:server_box/data/res/store.dart';
|
import 'package:server_box/data/res/store.dart';
|
||||||
|
import 'package:server_box/data/store/setting.dart';
|
||||||
|
|
||||||
import 'package:server_box/view/widget/two_line_text.dart';
|
import 'package:server_box/view/widget/two_line_text.dart';
|
||||||
|
|
||||||
|
enum EditorPageRetType { path, text }
|
||||||
|
|
||||||
final class EditorPageRet {
|
final class EditorPageRet {
|
||||||
/// If edit text, this includes the edited result
|
final EditorPageRetType typ;
|
||||||
final String? result;
|
final String val;
|
||||||
|
|
||||||
/// Indicates whether it's ok to edit existing file
|
const EditorPageRet(this.typ, this.val);
|
||||||
final bool? editExistedOk;
|
|
||||||
|
|
||||||
const EditorPageRet({this.result, this.editExistedOk});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final class EditorPageArgs {
|
final class EditorPageArgs {
|
||||||
@@ -38,11 +38,14 @@ final class EditorPageArgs {
|
|||||||
|
|
||||||
final String? title;
|
final String? title;
|
||||||
|
|
||||||
|
final void Function(BuildContext, EditorPageRet) onSave;
|
||||||
|
|
||||||
const EditorPageArgs({
|
const EditorPageArgs({
|
||||||
this.path,
|
this.path,
|
||||||
this.text,
|
this.text,
|
||||||
this.langCode,
|
this.langCode,
|
||||||
this.title,
|
this.title,
|
||||||
|
required this.onSave,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +54,7 @@ class EditorPage extends StatefulWidget {
|
|||||||
|
|
||||||
const EditorPage({super.key, this.args});
|
const EditorPage({super.key, this.args});
|
||||||
|
|
||||||
static const route = AppRoute<EditorPageRet, EditorPageArgs>(
|
static const route = AppRoute<void, EditorPageArgs>(
|
||||||
page: EditorPage.new,
|
page: EditorPage.new,
|
||||||
path: '/editor',
|
path: '/editor',
|
||||||
);
|
);
|
||||||
@@ -69,6 +72,7 @@ class _EditorPageState extends State<EditorPage> {
|
|||||||
TextStyle(fontSize: Stores.setting.editorFontSize.fetch());
|
TextStyle(fontSize: Stores.setting.editorFontSize.fetch());
|
||||||
|
|
||||||
String? _langCode;
|
String? _langCode;
|
||||||
|
var _saved = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
@@ -99,10 +103,16 @@ class _EditorPageState extends State<EditorPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return PopScope(
|
||||||
backgroundColor: _codeTheme['root']?.backgroundColor,
|
canPop: false,
|
||||||
appBar: _buildAppBar(),
|
onPopInvokedWithResult: (didPop, result) {
|
||||||
body: _buildBody(),
|
_pop();
|
||||||
|
},
|
||||||
|
child: Scaffold(
|
||||||
|
backgroundColor: _codeTheme['root']?.backgroundColor,
|
||||||
|
appBar: _buildAppBar(),
|
||||||
|
body: _buildBody(),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,25 +146,7 @@ class _EditorPageState extends State<EditorPage> {
|
|||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.save),
|
icon: const Icon(Icons.save),
|
||||||
tooltip: l10n.save,
|
tooltip: l10n.save,
|
||||||
onPressed: () async {
|
onPressed: _onSave,
|
||||||
// If path is not null, then it's a file editor
|
|
||||||
// save the text and return true to pop the page
|
|
||||||
final path = widget.args?.path;
|
|
||||||
if (path != null) {
|
|
||||||
final (res, _) = await context.showLoadingDialog(
|
|
||||||
fn: () => File(path).writeAsString(_controller.text),
|
|
||||||
);
|
|
||||||
if (res == null) {
|
|
||||||
context.showSnackBar(libL10n.fail);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
context.pop(const EditorPageRet(editExistedOk: true));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// else it's a text editor
|
|
||||||
// return the text to the previous page
|
|
||||||
context.pop(EditorPageRet(result: _controller.text));
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@@ -210,4 +202,44 @@ extension on _EditorPageState {
|
|||||||
_controller.text = text;
|
_controller.text = text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _onSave() async {
|
||||||
|
// If path is not null, then it's a file editor
|
||||||
|
final path = widget.args?.path;
|
||||||
|
if (path != null) {
|
||||||
|
final (res, _) = await context.showLoadingDialog(
|
||||||
|
fn: () => File(path).writeAsString(_controller.text),
|
||||||
|
);
|
||||||
|
if (res == null) {
|
||||||
|
context.showSnackBar(libL10n.fail);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final ret = EditorPageRet(EditorPageRetType.path, path);
|
||||||
|
widget.args?.onSave(context, ret);
|
||||||
|
_saved = true;
|
||||||
|
|
||||||
|
final pop_ = SettingStore.instance.closeAfterSave.fetch();
|
||||||
|
if (pop_) _pop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// it's a text editor
|
||||||
|
final ret = EditorPageRet(EditorPageRetType.text, _controller.text);
|
||||||
|
widget.args?.onSave(context, ret);
|
||||||
|
_saved = true;
|
||||||
|
|
||||||
|
final pop_ = SettingStore.instance.closeAfterSave.fetch();
|
||||||
|
if (pop_) _pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _pop() async {
|
||||||
|
if (!_saved) {
|
||||||
|
final ret = await context.showRoundDialog(
|
||||||
|
title: libL10n.attention,
|
||||||
|
child: Text(libL10n.askContinue(libL10n.exit)),
|
||||||
|
actions: Btnx.cancelOk,
|
||||||
|
);
|
||||||
|
if (ret != true) return;
|
||||||
|
}
|
||||||
|
context.pop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -305,6 +305,7 @@ final class _AppSettingsPageState extends State<AppSettingsPage> {
|
|||||||
_buildEditorTheme(),
|
_buildEditorTheme(),
|
||||||
_buildEditorDarkTheme(),
|
_buildEditorDarkTheme(),
|
||||||
_buildEditorHighlight(),
|
_buildEditorHighlight(),
|
||||||
|
_buildEditorCloseAfterEdit(),
|
||||||
].map((e) => CardX(child: e)).toList(),
|
].map((e) => CardX(child: e)).toList(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1329,32 +1330,49 @@ final class _AppSettingsPageState extends State<AppSettingsPage> {
|
|||||||
final map = await Stores.setting.getAllMap(includeInternalKeys: true);
|
final map = await Stores.setting.getAllMap(includeInternalKeys: true);
|
||||||
final keys = map.keys;
|
final keys = map.keys;
|
||||||
|
|
||||||
|
void onSave(BuildContext context, EditorPageRet ret) {
|
||||||
|
if (ret.typ != EditorPageRetType.text) {
|
||||||
|
context.showRoundDialog(
|
||||||
|
title: libL10n.fail,
|
||||||
|
child: Text(l10n.invalid),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
final newSettings = json.decode(ret.val) as Map<String, dynamic>;
|
||||||
|
Stores.setting.box.putAll(newSettings);
|
||||||
|
final newKeys = newSettings.keys;
|
||||||
|
final removedKeys = keys.where((e) => !newKeys.contains(e));
|
||||||
|
for (final key in removedKeys) {
|
||||||
|
Stores.setting.box.delete(key);
|
||||||
|
}
|
||||||
|
} catch (e, trace) {
|
||||||
|
context.showRoundDialog(
|
||||||
|
title: libL10n.error,
|
||||||
|
child: Text('${l10n.save}:\n$e'),
|
||||||
|
);
|
||||||
|
Loggers.app.warning('Update json settings failed', e, trace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Encode [map] to String with indent `\t`
|
/// Encode [map] to String with indent `\t`
|
||||||
final text = jsonIndentEncoder.convert(map);
|
final text = jsonIndentEncoder.convert(map);
|
||||||
final ret = await EditorPage.route.go(
|
await EditorPage.route.go(
|
||||||
context,
|
context,
|
||||||
args: EditorPageArgs(
|
args: EditorPageArgs(
|
||||||
text: text,
|
text: text,
|
||||||
langCode: 'json',
|
langCode: 'json',
|
||||||
title: libL10n.setting,
|
title: libL10n.setting,
|
||||||
|
onSave: onSave,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
final result = ret?.result;
|
}
|
||||||
if (result == null) return;
|
|
||||||
try {
|
Widget _buildEditorCloseAfterEdit() {
|
||||||
final newSettings = json.decode(result) as Map<String, dynamic>;
|
return ListTile(
|
||||||
Stores.setting.box.putAll(newSettings);
|
leading: const Icon(MingCute.edit_fill),
|
||||||
final newKeys = newSettings.keys;
|
title: Text(l10n.closeAfterSave),
|
||||||
final removedKeys = keys.where((e) => !newKeys.contains(e));
|
trailing: StoreSwitch(prop: _setting.closeAfterSave),
|
||||||
for (final key in removedKeys) {
|
);
|
||||||
Stores.setting.box.delete(key);
|
|
||||||
}
|
|
||||||
} catch (e, trace) {
|
|
||||||
context.showRoundDialog(
|
|
||||||
title: libL10n.error,
|
|
||||||
child: Text('${l10n.save}:\n$e'),
|
|
||||||
);
|
|
||||||
Loggers.app.warning('Update json settings failed', e, trace);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -217,14 +217,17 @@ class _LocalFilePageState extends State<LocalFilePage>
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final ret = await EditorPage.route.go(
|
|
||||||
|
await EditorPage.route.go(
|
||||||
context,
|
context,
|
||||||
args: EditorPageArgs(path: file.absolute.path),
|
args: EditorPageArgs(
|
||||||
|
path: file.absolute.path,
|
||||||
|
onSave: (context, _) {
|
||||||
|
context.showSnackBar(l10n.saved);
|
||||||
|
setState(() {});
|
||||||
|
},
|
||||||
|
),
|
||||||
);
|
);
|
||||||
if (ret?.editExistedOk == true) {
|
|
||||||
context.showSnackBar(l10n.saved);
|
|
||||||
setState(() {});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Btn.tile(
|
Btn.tile(
|
||||||
|
|||||||
@@ -317,19 +317,21 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
|||||||
);
|
);
|
||||||
if (suc == null || err != null) return;
|
if (suc == null || err != null) return;
|
||||||
|
|
||||||
final ret = await EditorPage.route.go(
|
await EditorPage.route.go(
|
||||||
context,
|
context,
|
||||||
args: EditorPageArgs(path: localPath),
|
args: EditorPageArgs(
|
||||||
|
path: localPath,
|
||||||
|
onSave: (context, _) {
|
||||||
|
SftpProvider.add(SftpReq(
|
||||||
|
req.spi,
|
||||||
|
remotePath,
|
||||||
|
localPath,
|
||||||
|
SftpReqType.upload,
|
||||||
|
));
|
||||||
|
context.showSnackBar(l10n.added2List);
|
||||||
|
},
|
||||||
|
),
|
||||||
);
|
);
|
||||||
if (ret?.editExistedOk == true) {
|
|
||||||
SftpProvider.add(SftpReq(
|
|
||||||
req.spi,
|
|
||||||
remotePath,
|
|
||||||
localPath,
|
|
||||||
SftpReqType.upload,
|
|
||||||
));
|
|
||||||
context.showSnackBar(l10n.added2List);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _download(SftpName name) {
|
void _download(SftpName name) {
|
||||||
|
|||||||
Reference in New Issue
Block a user