new: webdav sync test

This commit is contained in:
lollipopkit
2023-12-04 14:21:20 +08:00
parent 2dc86a9da2
commit 38cdef9458
18 changed files with 109 additions and 50 deletions

View File

@@ -1406,6 +1406,12 @@ abstract class S {
/// **'Terminal'** /// **'Terminal'**
String get terminal; String get terminal;
/// No description provided for @test.
///
/// In en, this message translates to:
/// **'Test'**
String get test;
/// No description provided for @theme. /// No description provided for @theme.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View File

@@ -688,6 +688,9 @@ class SDe extends S {
@override @override
String get terminal => 'Terminal'; String get terminal => 'Terminal';
@override
String get test => 'Prüfung';
@override @override
String get theme => 'Themen'; String get theme => 'Themen';

View File

@@ -688,6 +688,9 @@ class SEn extends S {
@override @override
String get terminal => 'Terminal'; String get terminal => 'Terminal';
@override
String get test => 'Test';
@override @override
String get theme => 'Theme'; String get theme => 'Theme';

View File

@@ -688,6 +688,9 @@ class SId extends S {
@override @override
String get terminal => 'Terminal'; String get terminal => 'Terminal';
@override
String get test => 'pengujian';
@override @override
String get theme => ' Tema'; String get theme => ' Tema';

View File

@@ -688,6 +688,9 @@ class SZh extends S {
@override @override
String get terminal => '终端'; String get terminal => '终端';
@override
String get test => '测试';
@override @override
String get theme => '主题'; String get theme => '主题';
@@ -1477,6 +1480,9 @@ class SZhTw extends SZh {
@override @override
String get terminal => '终端機'; String get terminal => '终端機';
@override
String get test => '測試';
@override @override
String get theme => '主題'; String get theme => '主題';

View File

@@ -586,7 +586,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -596,7 +596,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -720,7 +720,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -730,7 +730,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -748,7 +748,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -758,7 +758,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -779,7 +779,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -792,7 +792,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
@@ -818,7 +818,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -831,7 +831,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -854,7 +854,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
GCC_C_LANGUAGE_STANDARD = gnu11; GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
@@ -867,7 +867,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -890,7 +890,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -902,7 +902,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
@@ -931,7 +931,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -943,7 +943,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;
@@ -969,7 +969,7 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 654; CURRENT_PROJECT_VERSION = 660;
DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_ASSET_PATHS = "";
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
@@ -981,7 +981,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.654; MARKETING_VERSION = 1.0.660;
MTL_FAST_MATH = YES; MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd;
PRODUCT_NAME = ServerBox; PRODUCT_NAME = ServerBox;

View File

@@ -43,7 +43,6 @@ class PersistentStore {
//encryptionCipher: SecureStore._cipher, //encryptionCipher: SecureStore._cipher,
); );
/// Get all db filenames. /// Get all db filenames.
/// ///
/// - [suffixs] defaults to ['.hive'] /// - [suffixs] defaults to ['.hive']
@@ -69,7 +68,6 @@ class PersistentStore {
files.map((e) => e.path.replaceFirst('$docPath/', '')).toList(); files.map((e) => e.path.replaceFirst('$docPath/', '')).toList();
return paths; return paths;
} }
} }
extension BoxX on Box { extension BoxX on Box {

View File

@@ -16,6 +16,17 @@ abstract final class Webdav {
pwd: Stores.setting.webdavPwd.fetch(), pwd: Stores.setting.webdavPwd.fetch(),
); );
static Future<String?> test(String url, String user, String pwd) async {
final client = WebdavClient(url: url, user: user, pwd: pwd);
try {
await client.ping();
return null;
} catch (e, s) {
Loggers.app.warning('Webdav test failed', e, s);
return e.toString();
}
}
static Future<WebdavErr?> upload({ static Future<WebdavErr?> upload({
required String relativePath, required String relativePath,
String? localPath, String? localPath,

View File

@@ -6,7 +6,8 @@ enum ErrFrom {
ssh, ssh,
status, status,
icloud, icloud,
webdav,; webdav,
;
} }
abstract class Err<T> { abstract class Err<T> {
@@ -73,7 +74,8 @@ class ICloudErr extends Err<ICloudErrType> {
enum WebdavErrType { enum WebdavErrType {
generic, generic,
notFound,; notFound,
;
} }
class WebdavErr extends Err<WebdavErrType> { class WebdavErr extends Err<WebdavErrType> {

View File

@@ -1,13 +0,0 @@
abstract class RemoteStorage {
Future<Error> upload({
required String relativePath,
String? localPath
});
Future<Error> download({
required String relativePath,
String? localPath
});
Future<Error> delete(String relativePath);
}

View File

@@ -2,9 +2,9 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 654; static const int build = 660;
static const String engine = "3.16.2"; static const String engine = "3.16.2";
static const String buildAt = "2023-12-02 00:21:29"; static const String buildAt = "2023-12-04 13:43:20";
static const int modifications = 2; static const int modifications = 11;
static const int script = 31; static const int script = 31;
} }

View File

@@ -218,6 +218,7 @@
"tag": "Tags", "tag": "Tags",
"temperature": "Temperatur", "temperature": "Temperatur",
"terminal": "Terminal", "terminal": "Terminal",
"test": "Prüfung",
"theme": "Themen", "theme": "Themen",
"themeMode": "Themen-Modus", "themeMode": "Themen-Modus",
"times": "x", "times": "x",

View File

@@ -218,6 +218,7 @@
"tag": "Tags", "tag": "Tags",
"temperature": "Temperature", "temperature": "Temperature",
"terminal": "Terminal", "terminal": "Terminal",
"test": "Test",
"theme": "Theme", "theme": "Theme",
"themeMode": "Theme mode", "themeMode": "Theme mode",
"times": "Times", "times": "Times",

View File

@@ -218,6 +218,7 @@
"tag": "Tag", "tag": "Tag",
"temperature": "Suhu", "temperature": "Suhu",
"terminal": "Terminal", "terminal": "Terminal",
"test": "pengujian",
"theme": " Tema", "theme": " Tema",
"themeMode": "Mode tema", "themeMode": "Mode tema",
"times": "Waktu", "times": "Waktu",

View File

@@ -218,6 +218,7 @@
"tag": "标签", "tag": "标签",
"temperature": "温度", "temperature": "温度",
"terminal": "终端", "terminal": "终端",
"test": "测试",
"theme": "主题", "theme": "主题",
"themeMode": "主题模式", "themeMode": "主题模式",
"times": "次", "times": "次",

View File

@@ -218,6 +218,7 @@
"tag": "标签", "tag": "标签",
"temperature": "溫度", "temperature": "溫度",
"terminal": "终端機", "terminal": "终端機",
"test": "測試",
"theme": "主題", "theme": "主題",
"themeMode": "主題模式", "themeMode": "主題模式",
"times": "次", "times": "次",

View File

@@ -119,9 +119,8 @@ class BackupPage extends StatelessWidget {
TextButton( TextButton(
onPressed: () async { onPressed: () async {
await backup.restore(force: true); await backup.restore(force: true);
Pros.reload();
context.pop(); context.pop();
RebuildNodes.app.rebuild(); _reload();
}, },
child: Text(l10n.ok), child: Text(l10n.ok),
), ),
@@ -156,6 +155,7 @@ class BackupPage extends StatelessWidget {
icloudLoading.value = true; icloudLoading.value = true;
await ICloud.sync(); await ICloud.sync();
icloudLoading.value = false; icloudLoading.value = false;
_reload();
} }
}, },
), ),
@@ -195,6 +195,7 @@ class BackupPage extends StatelessWidget {
await compute(Backup.fromJsonString, dlFile); await compute(Backup.fromJsonString, dlFile);
await dlBak.restore(force: true); await dlBak.restore(force: true);
icloudLoading.value = false; icloudLoading.value = false;
_reload();
}, },
child: Text(l10n.download), child: Text(l10n.download),
), ),
@@ -251,7 +252,8 @@ class BackupPage extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Input( Input(
label: 'url', label: 'URL',
hint: 'https://example.com/webdav/',
controller: urlCtrl, controller: urlCtrl,
), ),
Input( Input(
@@ -271,6 +273,21 @@ class BackupPage extends StatelessWidget {
}, },
child: Text(l10n.ok), child: Text(l10n.ok),
), ),
TextButton(
onPressed: () async {
final result = await Webdav.test(
urlCtrl.text,
userCtrl.text,
pwdCtrl.text,
);
if (result == null) {
context.showSnackBar(l10n.success);
} else {
context.showSnackBar(result);
}
},
child: Text(l10n.test),
),
], ],
); );
if (result == true) { if (result == true) {
@@ -294,6 +311,7 @@ class BackupPage extends StatelessWidget {
webdavLoading.value = true; webdavLoading.value = true;
await Webdav.sync(); await Webdav.sync();
webdavLoading.value = false; webdavLoading.value = false;
_reload();
} }
}, },
), ),
@@ -334,6 +352,7 @@ class BackupPage extends StatelessWidget {
await compute(Backup.fromJsonString, dlFile); await compute(Backup.fromJsonString, dlFile);
await dlBak.restore(force: true); await dlBak.restore(force: true);
webdavLoading.value = false; webdavLoading.value = false;
_reload();
}, },
child: Text(l10n.download), child: Text(l10n.download),
), ),
@@ -363,4 +382,9 @@ class BackupPage extends StatelessWidget {
), ),
); );
} }
void _reload() {
Pros.reload();
RebuildNodes.app.rebuild();
}
} }

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:code_text_field/code_text_field.dart'; import 'package:code_text_field/code_text_field.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_highlight/theme_map.dart'; import 'package:flutter_highlight/theme_map.dart';
import 'package:flutter_highlight/themes/a11y-light.dart'; import 'package:flutter_highlight/themes/a11y-light.dart';
@@ -64,15 +65,25 @@ class _EditorPageState extends State<EditorPage> {
language: Highlights.all[_langCode], language: Highlights.all[_langCode],
); );
/// TODO: This is a temporary solution to avoid the loading stuck if (_langCode == null) {
Future.delayed(const Duration(milliseconds: 377)).then((value) async { _setupCtrl();
if (widget.path != null) { } else {
final code = await File(widget.path!).readAsString(); Future.delayed(const Duration(milliseconds: 377)).then(
_controller.text = code; (value) async => await _setupCtrl(),
} else if (widget.text != null) { );
_controller.text = widget.text!; }
} }
});
Future<void> _setupCtrl() async {
if (widget.path != null) {
final code = await compute(
(path) async => await File(path).readAsString(),
widget.path!,
);
_controller.text = code;
} else if (widget.text != null) {
_controller.text = widget.text!;
}
} }
@override @override