mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2026-02-15 12:44:59 +01:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b9b8f0dbb | ||
|
|
5eb48b2717 | ||
|
|
5339cfca70 | ||
|
|
1462b2d0b8 | ||
|
|
3798a23183 | ||
|
|
ddaf916170 | ||
|
|
d6e37b058f | ||
|
|
2e9ad7d7cb | ||
|
|
190da74f66 | ||
|
|
f1315dda7f | ||
|
|
43e6105eb3 | ||
|
|
d785209eb6 | ||
|
|
da8b6a9010 | ||
|
|
1fd68722da | ||
|
|
c9a2c1d0e4 | ||
|
|
161f536a62 | ||
|
|
1a32e9944e | ||
|
|
6deb753198 | ||
|
|
4e33a98631 | ||
|
|
dcb9464d8f | ||
|
|
b94936b29f |
11
.github/workflows/release.yml
vendored
11
.github/workflows/release.yml
vendored
@@ -32,13 +32,18 @@ jobs:
|
|||||||
curl -u ${{ secrets.BASIC_AUTH }} -o android/key.properties ${{ secrets.URL_PREFIX }}key.properties
|
curl -u ${{ secrets.BASIC_AUTH }} -o android/key.properties ${{ secrets.URL_PREFIX }}key.properties
|
||||||
- name: Build
|
- name: Build
|
||||||
run: dart run fl_build -p android,linux
|
run: dart run fl_build -p android,linux
|
||||||
|
- name: Rename for fdroid
|
||||||
|
run: |
|
||||||
|
mv build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_arm64.apk build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm64.apk
|
||||||
|
mv build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_arm.apk build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm.apk
|
||||||
|
mv build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_amd64.apk build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_amd64.apk
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_arm64.apk
|
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm64.apk
|
||||||
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_arm.apk
|
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_arm.apk
|
||||||
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_amd64.apk
|
build/app/outputs/flutter-apk/${{ env.APP_NAME }}_v1.0.${{ env.BUILD_NUMBER }}_amd64.apk
|
||||||
${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_amd64.AppImage
|
${{ env.APP_NAME }}_${{ env.BUILD_NUMBER }}_amd64.AppImage
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- countly_flutter (24.4.1):
|
|
||||||
- Flutter
|
|
||||||
- device_info_plus (0.0.1):
|
- device_info_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- file_picker (0.0.1):
|
- file_picker (0.0.1):
|
||||||
@@ -36,7 +34,6 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- countly_flutter (from `.symlinks/plugins/countly_flutter/ios`)
|
|
||||||
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
- file_picker (from `.symlinks/plugins/file_picker/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
@@ -55,8 +52,6 @@ DEPENDENCIES:
|
|||||||
- watch_connectivity (from `.symlinks/plugins/watch_connectivity/ios`)
|
- watch_connectivity (from `.symlinks/plugins/watch_connectivity/ios`)
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
countly_flutter:
|
|
||||||
:path: ".symlinks/plugins/countly_flutter/ios"
|
|
||||||
device_info_plus:
|
device_info_plus:
|
||||||
:path: ".symlinks/plugins/device_info_plus/ios"
|
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||||
file_picker:
|
file_picker:
|
||||||
@@ -91,7 +86,6 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/watch_connectivity/ios"
|
:path: ".symlinks/plugins/watch_connectivity/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
countly_flutter: 56233d921c6b4e0a720774a39b8ee8110d6f8d91
|
|
||||||
device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
|
device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
|
||||||
file_picker: c79185e70b9b45728cde2a8d8da454e0cb43f287
|
file_picker: c79185e70b9b45728cde2a8d8da454e0cb43f287
|
||||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||||
|
|||||||
@@ -690,7 +690,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||||
@@ -700,7 +700,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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";
|
||||||
@@ -826,7 +826,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||||
@@ -836,7 +836,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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";
|
||||||
@@ -854,7 +854,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
|
||||||
@@ -864,7 +864,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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";
|
||||||
@@ -885,7 +885,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -898,7 +898,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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;
|
||||||
@@ -924,7 +924,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -937,7 +937,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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)";
|
||||||
@@ -960,7 +960,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
@@ -973,7 +973,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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)";
|
||||||
@@ -996,7 +996,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -1008,7 +1008,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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;
|
||||||
@@ -1037,7 +1037,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -1049,7 +1049,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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;
|
||||||
@@ -1075,7 +1075,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 = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
@@ -1087,7 +1087,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
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;
|
||||||
|
|||||||
30
lib/app.dart
30
lib/app.dart
@@ -3,10 +3,14 @@ import 'package:fl_lib/fl_lib.dart';
|
|||||||
import 'package:fl_lib/l10n/gen_l10n/lib_l10n.dart';
|
import 'package:fl_lib/l10n/gen_l10n/lib_l10n.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
|
import 'package:server_box/core/extension/context/locale.dart';
|
||||||
import 'package:server_box/data/res/build_data.dart';
|
import 'package:server_box/data/res/build_data.dart';
|
||||||
import 'package:server_box/data/res/rebuild.dart';
|
import 'package:server_box/data/res/rebuild.dart';
|
||||||
import 'package:server_box/data/res/store.dart';
|
import 'package:server_box/data/res/store.dart';
|
||||||
import 'package:server_box/view/page/home/home.dart';
|
import 'package:server_box/view/page/home/home.dart';
|
||||||
|
import 'package:icons_plus/icons_plus.dart';
|
||||||
|
|
||||||
|
part 'intro.dart';
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
const MyApp({super.key});
|
const MyApp({super.key});
|
||||||
@@ -71,6 +75,7 @@ class MyApp extends StatelessWidget {
|
|||||||
...AppLocalizations.localizationsDelegates,
|
...AppLocalizations.localizationsDelegates,
|
||||||
],
|
],
|
||||||
supportedLocales: AppLocalizations.supportedLocales,
|
supportedLocales: AppLocalizations.supportedLocales,
|
||||||
|
localeListResolutionCallback: LocaleUtil.resolve,
|
||||||
title: BuildData.name,
|
title: BuildData.name,
|
||||||
themeMode: themeMode,
|
themeMode: themeMode,
|
||||||
theme: light,
|
theme: light,
|
||||||
@@ -81,7 +86,30 @@ class MyApp extends StatelessWidget {
|
|||||||
|
|
||||||
Widget _buildAppContent(BuildContext ctx) {
|
Widget _buildAppContent(BuildContext ctx) {
|
||||||
//if (Pros.app.isWearOS) return const WearHome();
|
//if (Pros.app.isWearOS) return const WearHome();
|
||||||
return const HomePage();
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ final class DockerImg implements ContainerImg {
|
|||||||
final String repository;
|
final String repository;
|
||||||
final String size;
|
final String size;
|
||||||
@override
|
@override
|
||||||
final String tag;
|
final String? tag;
|
||||||
|
|
||||||
DockerImg({
|
DockerImg({
|
||||||
required this.containers,
|
required this.containers,
|
||||||
@@ -95,14 +95,30 @@ final class DockerImg implements ContainerImg {
|
|||||||
|
|
||||||
String toRawJson() => json.encode(toJson());
|
String toRawJson() => json.encode(toJson());
|
||||||
|
|
||||||
factory DockerImg.fromJson(Map<String, dynamic> json) => DockerImg(
|
factory DockerImg.fromJson(Map<String, dynamic> json) {
|
||||||
containers: json["Containers"],
|
final containers = switch (json["Containers"]) {
|
||||||
createdAt: json["CreatedAt"],
|
final String a => a,
|
||||||
id: json["ID"],
|
final Object? a => a.toString(),
|
||||||
repository: json["Repository"],
|
};
|
||||||
size: json["Size"],
|
final repo = switch (json["Repository"] ?? json["Names"]) {
|
||||||
tag: json["Tag"],
|
final String a => a,
|
||||||
);
|
final List a => a.firstOrNull.toString(),
|
||||||
|
final Object? a => a.toString(),
|
||||||
|
};
|
||||||
|
final size = switch (json["Size"]) {
|
||||||
|
final String a => a,
|
||||||
|
final int a => a.bytes2Str,
|
||||||
|
final Object? a => a.toString(),
|
||||||
|
};
|
||||||
|
return DockerImg(
|
||||||
|
containers: containers,
|
||||||
|
createdAt: json["CreatedAt"],
|
||||||
|
id: json["ID"] ?? json["Id"] ?? '',
|
||||||
|
repository: repo,
|
||||||
|
size: size,
|
||||||
|
tag: json["Tag"],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => {
|
Map<String, dynamic> toJson() => {
|
||||||
"Containers": containers,
|
"Containers": containers,
|
||||||
|
|||||||
@@ -160,11 +160,18 @@ class ContainerProvider extends ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parse images
|
// Parse images
|
||||||
final imageRaw = ContainerCmdType.images.find(segments);
|
final imageRaw = ContainerCmdType.images.find(segments).trim();
|
||||||
|
final isEntireJson = imageRaw.startsWith('[') && imageRaw.endsWith(']');
|
||||||
try {
|
try {
|
||||||
final imgLines = imageRaw.split('\n');
|
if (isEntireJson) {
|
||||||
imgLines.removeWhere((element) => element.isEmpty);
|
images = (json.decode(imageRaw) as List)
|
||||||
images = imgLines.map((e) => ContainerImg.fromRawJson(e, type)).toList();
|
.map((e) => ContainerImg.fromRawJson(json.encode(e), type))
|
||||||
|
.toList();
|
||||||
|
} else {
|
||||||
|
final lines = imageRaw.split('\n');
|
||||||
|
lines.removeWhere((element) => element.isEmpty);
|
||||||
|
images = lines.map((e) => ContainerImg.fromRawJson(e, type)).toList();
|
||||||
|
}
|
||||||
} catch (e, trace) {
|
} catch (e, trace) {
|
||||||
error = ContainerErr(
|
error = ContainerErr(
|
||||||
type: ContainerErrType.parseImages,
|
type: ContainerErrType.parseImages,
|
||||||
@@ -298,6 +305,6 @@ enum ContainerCmdType {
|
|||||||
}) {
|
}) {
|
||||||
return ContainerCmdType.values
|
return ContainerCmdType.values
|
||||||
.map((e) => e.exec(type, sudo: sudo, includeStats: includeStats))
|
.map((e) => e.exec(type, sudo: sudo, includeStats: includeStats))
|
||||||
.join(' && echo ${ShellFunc.seperator} && ');
|
.join('\necho ${ShellFunc.seperator}\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
|
|
||||||
class BuildData {
|
class BuildData {
|
||||||
static const String name = "ServerBox";
|
static const String name = "ServerBox";
|
||||||
static const int build = 970;
|
static const int build = 992;
|
||||||
static const String engine = "3.22.2";
|
|
||||||
static const String buildAt = "2024-06-13 00:44:23";
|
|
||||||
static const int modifications = 0;
|
|
||||||
static const int script = 49;
|
static const int script = 49;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,15 +3,17 @@ abstract final class GithubIds {
|
|||||||
// If you want to change your Github ID, please open an issue.
|
// If you want to change your Github ID, please open an issue.
|
||||||
static const contributors = <GhId>{
|
static const contributors = <GhId>{
|
||||||
'PaperCube',
|
'PaperCube',
|
||||||
|
'Integral-Tech',
|
||||||
'its-tom',
|
'its-tom',
|
||||||
|
'leganck',
|
||||||
'azkadev',
|
'azkadev',
|
||||||
'kalashnikov',
|
'kalashnikov',
|
||||||
'FrancXPT',
|
|
||||||
'RainSunMe',
|
|
||||||
'calvinweb',
|
'calvinweb',
|
||||||
|
'QazCetelic',
|
||||||
|
'RainSunMe',
|
||||||
|
'FrancXPT',
|
||||||
'Liloupar',
|
'Liloupar',
|
||||||
'dccif',
|
'dccif',
|
||||||
'QazCetelic',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const participants = <GhId>{
|
static const participants = <GhId>{
|
||||||
@@ -71,6 +73,17 @@ abstract final class GithubIds {
|
|||||||
'FHU-yezi',
|
'FHU-yezi',
|
||||||
'ZRY233',
|
'ZRY233',
|
||||||
'Jasonzhu1207',
|
'Jasonzhu1207',
|
||||||
|
'sakuraanzu',
|
||||||
|
'licaon-kter',
|
||||||
|
'77160860',
|
||||||
|
'mijjjj',
|
||||||
|
'muyunil',
|
||||||
|
'Hua159',
|
||||||
|
'jaydong2016',
|
||||||
|
'geol',
|
||||||
|
'Mooling0602',
|
||||||
|
'IllTamer',
|
||||||
|
'marlkiller',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -276,6 +276,12 @@ class SettingStore extends PersistentStore {
|
|||||||
|
|
||||||
late final betaTest = property('betaTest', false);
|
late final betaTest = property('betaTest', false);
|
||||||
|
|
||||||
|
/// If it's empty, skip change window size.
|
||||||
|
/// Format: {width}x{height}
|
||||||
|
late final windowSize = property('windowSize', '');
|
||||||
|
|
||||||
|
late final showIntro = property('showIntro', true);
|
||||||
|
|
||||||
// Never show these settings for users
|
// Never show these settings for users
|
||||||
//
|
//
|
||||||
// ------BEGIN------
|
// ------BEGIN------
|
||||||
|
|||||||
107
lib/intro.dart
Normal file
107
lib/intro.dart
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
part of 'app.dart';
|
||||||
|
|
||||||
|
final class _IntroPage extends StatelessWidget {
|
||||||
|
const _IntroPage();
|
||||||
|
|
||||||
|
static final _setting = Stores.setting;
|
||||||
|
static const _kIconSize = 23.0;
|
||||||
|
static const _introListPad = EdgeInsets.symmetric(horizontal: 17);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return LayoutBuilder(
|
||||||
|
builder: (context, cons) {
|
||||||
|
final padTop = cons.maxHeight * .2;
|
||||||
|
return IntroPage(
|
||||||
|
pages: [
|
||||||
|
_buildAppSettings(context, padTop),
|
||||||
|
_buildRecommended(context, padTop),
|
||||||
|
],
|
||||||
|
onDone: (ctx) {
|
||||||
|
Stores.setting.showIntro.put(false);
|
||||||
|
Navigator.of(ctx).pushReplacement(
|
||||||
|
MaterialPageRoute(builder: (_) => const HomePage()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildRecommended(BuildContext context, double padTop) {
|
||||||
|
return ListView(
|
||||||
|
padding: _introListPad,
|
||||||
|
children: [
|
||||||
|
SizedBox(height: padTop),
|
||||||
|
const Icon(Bootstrap.stars, size: 35),
|
||||||
|
SizedBox(height: padTop),
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(MingCute.delete_2_fill),
|
||||||
|
title: const Text('rm -r'),
|
||||||
|
subtitle: Text(l10n.sftpRmrDirSummary, style: UIs.textGrey),
|
||||||
|
trailing: StoreSwitch(prop: _setting.sftpRmrDir),
|
||||||
|
).cardx,
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(IonIcons.stats_chart, size: _kIconSize),
|
||||||
|
title: Text(l10n.parseContainerStats),
|
||||||
|
subtitle: Text(l10n.parseContainerStatsTip, style: UIs.textGrey),
|
||||||
|
trailing: StoreSwitch(prop: _setting.containerParseStat),
|
||||||
|
).cardx,
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(OctIcons.cpu),
|
||||||
|
title: Text('CPU ${l10n.noLineChart}'),
|
||||||
|
subtitle: Text(l10n.cpuViewAsProgressTip, style: UIs.textGrey),
|
||||||
|
trailing: StoreSwitch(prop: _setting.cpuViewAsProgress),
|
||||||
|
).cardx,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildAppSettings(BuildContext ctx, double padTop) {
|
||||||
|
return ListView(
|
||||||
|
padding: _introListPad,
|
||||||
|
children: [
|
||||||
|
SizedBox(height: padTop),
|
||||||
|
_buildTitle(l10n.init, big: true),
|
||||||
|
SizedBox(height: padTop),
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(IonIcons.language),
|
||||||
|
title: Text(l10n.language),
|
||||||
|
onTap: () async {
|
||||||
|
final selected = await ctx.showPickSingleDialog(
|
||||||
|
title: l10n.language,
|
||||||
|
items: AppLocalizations.supportedLocales,
|
||||||
|
name: (p0) => p0.code,
|
||||||
|
initial: _setting.locale.fetch().toLocale,
|
||||||
|
);
|
||||||
|
if (selected != null) {
|
||||||
|
_setting.locale.put(selected.code);
|
||||||
|
RNodes.app.build();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trailing: Text(
|
||||||
|
l10n.languageName,
|
||||||
|
style: const TextStyle(fontSize: 15, color: Colors.grey),
|
||||||
|
),
|
||||||
|
).cardx,
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.update),
|
||||||
|
title: Text(l10n.autoCheckUpdate),
|
||||||
|
subtitle: Text(l10n.fdroidReleaseTip, style: UIs.textGrey),
|
||||||
|
trailing: StoreSwitch(prop: _setting.autoCheckAppUpdate),
|
||||||
|
).cardx,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildTitle(String text, {bool big = false}) {
|
||||||
|
return Center(
|
||||||
|
child: Text(
|
||||||
|
text,
|
||||||
|
style: big
|
||||||
|
? const TextStyle(fontSize: 41, fontWeight: FontWeight.w500)
|
||||||
|
: UIs.textGrey,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "Export",
|
"export": "Export",
|
||||||
"extraArgs": "Extra args",
|
"extraArgs": "Extra args",
|
||||||
"failed": "Failed",
|
"failed": "Failed",
|
||||||
|
"fdroidReleaseTip": "Wenn Sie diese App von Fdroid heruntergeladen haben, wird empfohlen, diese Option zu deaktivieren.",
|
||||||
"feedback": "Feedback",
|
"feedback": "Feedback",
|
||||||
"feedbackOnGithub": "Wenn du Fragen hast, stelle diese bitte auf Github.",
|
"feedbackOnGithub": "Wenn du Fragen hast, stelle diese bitte auf Github.",
|
||||||
"fieldMustNotEmpty": "Die Eingabefelder dürfen nicht leer sein.",
|
"fieldMustNotEmpty": "Die Eingabefelder dürfen nicht leer sein.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "Images",
|
"imagesList": "Images",
|
||||||
"import": "Importieren",
|
"import": "Importieren",
|
||||||
"inAppUpdate": "Im App aktualisieren? Andernfalls mit einem Browser herunterladen.",
|
"inAppUpdate": "Im App aktualisieren? Andernfalls mit einem Browser herunterladen.",
|
||||||
|
"init": "Initialisieren",
|
||||||
"inner": "Eingebaut",
|
"inner": "Eingebaut",
|
||||||
"inputDomainHere": "Domain eingeben",
|
"inputDomainHere": "Domain eingeben",
|
||||||
"install": "install",
|
"install": "install",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "Auswahl merken",
|
"rememberChoice": "Auswahl merken",
|
||||||
"rememberPwdInMem": "Passwort im Speicher behalten",
|
"rememberPwdInMem": "Passwort im Speicher behalten",
|
||||||
"rememberPwdInMemTip": "Für Container, Aufhängen usw.",
|
"rememberPwdInMemTip": "Für Container, Aufhängen usw.",
|
||||||
|
"rememberWindowSize": "Fenstergröße merken",
|
||||||
"remotePath": "Entfernte Pfade",
|
"remotePath": "Entfernte Pfade",
|
||||||
"rename": "Umbenennen",
|
"rename": "Umbenennen",
|
||||||
"reportBugsOnGithubIssue": "Bitte Bugs auf {url} melden",
|
"reportBugsOnGithubIssue": "Bitte Bugs auf {url} melden",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "Export",
|
"export": "Export",
|
||||||
"extraArgs": "Extra args",
|
"extraArgs": "Extra args",
|
||||||
"failed": "Failed",
|
"failed": "Failed",
|
||||||
|
"fdroidReleaseTip": "If you downloaded this app from Fdroid, it is recommended to turn off this option.",
|
||||||
"feedback": "Feedback",
|
"feedback": "Feedback",
|
||||||
"feedbackOnGithub": "If you have any questions, please feedback on Github.",
|
"feedbackOnGithub": "If you have any questions, please feedback on Github.",
|
||||||
"fieldMustNotEmpty": "These fields must not be empty.",
|
"fieldMustNotEmpty": "These fields must not be empty.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "Images list",
|
"imagesList": "Images list",
|
||||||
"import": "Import",
|
"import": "Import",
|
||||||
"inAppUpdate": "Update within the app? Otherwise, download using a browser.",
|
"inAppUpdate": "Update within the app? Otherwise, download using a browser.",
|
||||||
|
"init": "Initialize",
|
||||||
"inner": "Inner",
|
"inner": "Inner",
|
||||||
"inputDomainHere": "Input Domain here",
|
"inputDomainHere": "Input Domain here",
|
||||||
"install": "install",
|
"install": "install",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "Remember the selection",
|
"rememberChoice": "Remember the selection",
|
||||||
"rememberPwdInMem": "Remember password in memory",
|
"rememberPwdInMem": "Remember password in memory",
|
||||||
"rememberPwdInMemTip": "Used for containers, suspending, etc.",
|
"rememberPwdInMemTip": "Used for containers, suspending, etc.",
|
||||||
|
"rememberWindowSize": "Remember window size",
|
||||||
"remotePath": "Remote path",
|
"remotePath": "Remote path",
|
||||||
"rename": "Rename",
|
"rename": "Rename",
|
||||||
"reportBugsOnGithubIssue": "Please report bugs on {url}",
|
"reportBugsOnGithubIssue": "Please report bugs on {url}",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "Exportar",
|
"export": "Exportar",
|
||||||
"extraArgs": "Argumentos extra",
|
"extraArgs": "Argumentos extra",
|
||||||
"failed": "Fallido",
|
"failed": "Fallido",
|
||||||
|
"fdroidReleaseTip": "Si descargaste esta aplicación desde Fdroid, se recomienda desactivar esta opción.",
|
||||||
"feedback": "Retroalimentación",
|
"feedback": "Retroalimentación",
|
||||||
"feedbackOnGithub": "Si tienes algún problema, por favor informa en GitHub",
|
"feedbackOnGithub": "Si tienes algún problema, por favor informa en GitHub",
|
||||||
"fieldMustNotEmpty": "Estos campos no pueden estar vacíos.",
|
"fieldMustNotEmpty": "Estos campos no pueden estar vacíos.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "Lista de imágenes",
|
"imagesList": "Lista de imágenes",
|
||||||
"import": "Importar",
|
"import": "Importar",
|
||||||
"inAppUpdate": "¿Actualizar dentro de la app? De lo contrario, descargar usando un navegador.",
|
"inAppUpdate": "¿Actualizar dentro de la app? De lo contrario, descargar usando un navegador.",
|
||||||
|
"init": "Inicializar",
|
||||||
"inner": "Interno",
|
"inner": "Interno",
|
||||||
"inputDomainHere": "Introduce el dominio aquí",
|
"inputDomainHere": "Introduce el dominio aquí",
|
||||||
"install": "Instalar",
|
"install": "Instalar",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "Recordar la selección",
|
"rememberChoice": "Recordar la selección",
|
||||||
"rememberPwdInMem": "Recordar contraseña en la memoria",
|
"rememberPwdInMem": "Recordar contraseña en la memoria",
|
||||||
"rememberPwdInMemTip": "Utilizado para contenedores, suspensión, etc.",
|
"rememberPwdInMemTip": "Utilizado para contenedores, suspensión, etc.",
|
||||||
|
"rememberWindowSize": "Recordar el tamaño de la ventana",
|
||||||
"remotePath": "Ruta remota",
|
"remotePath": "Ruta remota",
|
||||||
"rename": "Renombrar",
|
"rename": "Renombrar",
|
||||||
"reportBugsOnGithubIssue": "Por favor, informa los problemas en {url}",
|
"reportBugsOnGithubIssue": "Por favor, informa los problemas en {url}",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "Exporter",
|
"export": "Exporter",
|
||||||
"extraArgs": "Arguments supplémentaires",
|
"extraArgs": "Arguments supplémentaires",
|
||||||
"failed": "Échoué",
|
"failed": "Échoué",
|
||||||
|
"fdroidReleaseTip": "Si vous avez téléchargé cette application depuis Fdroid, il est recommandé de désactiver cette option.",
|
||||||
"feedback": "Retour",
|
"feedback": "Retour",
|
||||||
"feedbackOnGithub": "Si vous avez des questions, veuillez donner votre avis sur Github.",
|
"feedbackOnGithub": "Si vous avez des questions, veuillez donner votre avis sur Github.",
|
||||||
"fieldMustNotEmpty": "Ces champs ne doivent pas être vides.",
|
"fieldMustNotEmpty": "Ces champs ne doivent pas être vides.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "Liste des images",
|
"imagesList": "Liste des images",
|
||||||
"import": "Importer",
|
"import": "Importer",
|
||||||
"inAppUpdate": "Mettre à jour dans l'application ? Sinon, téléchargez en utilisant un navigateur.",
|
"inAppUpdate": "Mettre à jour dans l'application ? Sinon, téléchargez en utilisant un navigateur.",
|
||||||
|
"init": "Initialiser",
|
||||||
"inner": "Interne",
|
"inner": "Interne",
|
||||||
"inputDomainHere": "Saisissez le domaine ici",
|
"inputDomainHere": "Saisissez le domaine ici",
|
||||||
"install": "Installer",
|
"install": "Installer",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "Se souvenir du choix",
|
"rememberChoice": "Se souvenir du choix",
|
||||||
"rememberPwdInMem": "Mémoriser le mot de passe en mémoire",
|
"rememberPwdInMem": "Mémoriser le mot de passe en mémoire",
|
||||||
"rememberPwdInMemTip": "Utilisé pour les conteneurs, la suspension, etc.",
|
"rememberPwdInMemTip": "Utilisé pour les conteneurs, la suspension, etc.",
|
||||||
|
"rememberWindowSize": "Se souvenir de la taille de la fenêtre",
|
||||||
"remotePath": "Chemin distant",
|
"remotePath": "Chemin distant",
|
||||||
"rename": "Renommer",
|
"rename": "Renommer",
|
||||||
"reportBugsOnGithubIssue": "Veuillez signaler les bugs sur {url}",
|
"reportBugsOnGithubIssue": "Veuillez signaler les bugs sur {url}",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "Ekspor",
|
"export": "Ekspor",
|
||||||
"extraArgs": "Args ekstra",
|
"extraArgs": "Args ekstra",
|
||||||
"failed": "Gagal",
|
"failed": "Gagal",
|
||||||
|
"fdroidReleaseTip": "Jika Anda mengunduh aplikasi ini dari Fdroid, disarankan untuk mematikan opsi ini.",
|
||||||
"feedback": "Masukan",
|
"feedback": "Masukan",
|
||||||
"feedbackOnGithub": "Jika Anda memiliki pertanyaan, silakan umpan balik tentang GitHub.",
|
"feedbackOnGithub": "Jika Anda memiliki pertanyaan, silakan umpan balik tentang GitHub.",
|
||||||
"fieldMustNotEmpty": "Bidang -bidang ini tidak boleh kosong.",
|
"fieldMustNotEmpty": "Bidang -bidang ini tidak boleh kosong.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "Daftar gambar",
|
"imagesList": "Daftar gambar",
|
||||||
"import": "Impor",
|
"import": "Impor",
|
||||||
"inAppUpdate": "Perbarui di dalam aplikasi? Jika tidak, unduh menggunakan browser.",
|
"inAppUpdate": "Perbarui di dalam aplikasi? Jika tidak, unduh menggunakan browser.",
|
||||||
|
"init": "Menginisialisasi",
|
||||||
"inner": "Batin",
|
"inner": "Batin",
|
||||||
"inputDomainHere": "Input domain di sini",
|
"inputDomainHere": "Input domain di sini",
|
||||||
"install": "Install",
|
"install": "Install",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "Ingat pilihan",
|
"rememberChoice": "Ingat pilihan",
|
||||||
"rememberPwdInMem": "Ingat kata sandi di dalam memori",
|
"rememberPwdInMem": "Ingat kata sandi di dalam memori",
|
||||||
"rememberPwdInMemTip": "Digunakan untuk kontainer, menangguhkan, dll.",
|
"rememberPwdInMemTip": "Digunakan untuk kontainer, menangguhkan, dll.",
|
||||||
|
"rememberWindowSize": "Ingat ukuran jendela",
|
||||||
"remotePath": "Jalur jarak jauh",
|
"remotePath": "Jalur jarak jauh",
|
||||||
"rename": "Ganti nama",
|
"rename": "Ganti nama",
|
||||||
"reportBugsOnGithubIssue": "Harap laporkan bug di {url}",
|
"reportBugsOnGithubIssue": "Harap laporkan bug di {url}",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "エクスポート",
|
"export": "エクスポート",
|
||||||
"extraArgs": "追加引数",
|
"extraArgs": "追加引数",
|
||||||
"failed": "失敗しました",
|
"failed": "失敗しました",
|
||||||
|
"fdroidReleaseTip": "このアプリをFdroidからダウンロードした場合、このオプションをオフにすることをお勧めします。",
|
||||||
"feedback": "フィードバック",
|
"feedback": "フィードバック",
|
||||||
"feedbackOnGithub": "問題がある場合は、GitHubでフィードバックしてください",
|
"feedbackOnGithub": "問題がある場合は、GitHubでフィードバックしてください",
|
||||||
"fieldMustNotEmpty": "これらの入力フィールドは空にできません。",
|
"fieldMustNotEmpty": "これらの入力フィールドは空にできません。",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "イメージリスト",
|
"imagesList": "イメージリスト",
|
||||||
"import": "インポート",
|
"import": "インポート",
|
||||||
"inAppUpdate": "アプリ内で更新しますか?それ以外の場合は、ブラウザを使用してダウンロードしてください。",
|
"inAppUpdate": "アプリ内で更新しますか?それ以外の場合は、ブラウザを使用してダウンロードしてください。",
|
||||||
|
"init": "初期化する",
|
||||||
"inner": "内蔵",
|
"inner": "内蔵",
|
||||||
"inputDomainHere": "ここにドメインを入力",
|
"inputDomainHere": "ここにドメインを入力",
|
||||||
"install": "インストール",
|
"install": "インストール",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "選択を記憶する",
|
"rememberChoice": "選択を記憶する",
|
||||||
"rememberPwdInMem": "メモリにパスワードを記憶する",
|
"rememberPwdInMem": "メモリにパスワードを記憶する",
|
||||||
"rememberPwdInMemTip": "コンテナ、一時停止などに使用されます。",
|
"rememberPwdInMemTip": "コンテナ、一時停止などに使用されます。",
|
||||||
|
"rememberWindowSize": "ウィンドウサイズを記憶する",
|
||||||
"remotePath": "リモートパス",
|
"remotePath": "リモートパス",
|
||||||
"rename": "名前を変更",
|
"rename": "名前を変更",
|
||||||
"reportBugsOnGithubIssue": "{url}で問題を報告してください",
|
"reportBugsOnGithubIssue": "{url}で問題を報告してください",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "Exporteren",
|
"export": "Exporteren",
|
||||||
"extraArgs": "Extra argumenten",
|
"extraArgs": "Extra argumenten",
|
||||||
"failed": "Mislukt",
|
"failed": "Mislukt",
|
||||||
|
"fdroidReleaseTip": "Als u deze app van Fdroid heeft gedownload, wordt aanbevolen deze optie uit te schakelen.",
|
||||||
"feedback": "Feedback",
|
"feedback": "Feedback",
|
||||||
"feedbackOnGithub": "Als je vragen hebt, geef dan feedback op Github.",
|
"feedbackOnGithub": "Als je vragen hebt, geef dan feedback op Github.",
|
||||||
"fieldMustNotEmpty": "Deze velden mogen niet leeg zijn.",
|
"fieldMustNotEmpty": "Deze velden mogen niet leeg zijn.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "Lijst met afbeeldingen",
|
"imagesList": "Lijst met afbeeldingen",
|
||||||
"import": "Importeren",
|
"import": "Importeren",
|
||||||
"inAppUpdate": "Bijwerken binnen de app? Anders downloaden via een browser.",
|
"inAppUpdate": "Bijwerken binnen de app? Anders downloaden via een browser.",
|
||||||
|
"init": "Initialiseren",
|
||||||
"inner": "Intern",
|
"inner": "Intern",
|
||||||
"inputDomainHere": "Voer hier domein in",
|
"inputDomainHere": "Voer hier domein in",
|
||||||
"install": "Installeren",
|
"install": "Installeren",
|
||||||
@@ -178,6 +180,7 @@
|
|||||||
"newContainer": "Nieuwe container",
|
"newContainer": "Nieuwe container",
|
||||||
"noClient": "Geen client",
|
"noClient": "Geen client",
|
||||||
"noInterface": "Geen interface",
|
"noInterface": "Geen interface",
|
||||||
|
"noLineChart": "lijndiagrammen gebruiken",
|
||||||
"noNotiPerm": "Geen meldingsmachtigingen, mogelijk geen voortgangsindicatie bij het downloaden van app-updates.",
|
"noNotiPerm": "Geen meldingsmachtigingen, mogelijk geen voortgangsindicatie bij het downloaden van app-updates.",
|
||||||
"noOptions": "Geen opties",
|
"noOptions": "Geen opties",
|
||||||
"noPrivateKeyTip": "De privésleutel bestaat niet, deze is mogelijk verwijderd of er is een configuratiefout.",
|
"noPrivateKeyTip": "De privésleutel bestaat niet, deze is mogelijk verwijderd of er is een configuratiefout.",
|
||||||
@@ -230,6 +233,7 @@
|
|||||||
"rememberChoice": "Selectie onthouden",
|
"rememberChoice": "Selectie onthouden",
|
||||||
"rememberPwdInMem": "Wachtwoord onthouden in geheugen",
|
"rememberPwdInMem": "Wachtwoord onthouden in geheugen",
|
||||||
"rememberPwdInMemTip": "Gebruikt voor containers, opschorting, enz.",
|
"rememberPwdInMemTip": "Gebruikt voor containers, opschorting, enz.",
|
||||||
|
"rememberWindowSize": "Venstergrootte onthouden",
|
||||||
"remotePath": "Extern pad",
|
"remotePath": "Extern pad",
|
||||||
"rename": "Hernoemen",
|
"rename": "Hernoemen",
|
||||||
"reportBugsOnGithubIssue": "Meld alstublieft bugs op {url}",
|
"reportBugsOnGithubIssue": "Meld alstublieft bugs op {url}",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "Exportar",
|
"export": "Exportar",
|
||||||
"extraArgs": "Argumentos extras",
|
"extraArgs": "Argumentos extras",
|
||||||
"failed": "Falhou",
|
"failed": "Falhou",
|
||||||
|
"fdroidReleaseTip": "Se você baixou este aplicativo do Fdroid, é recomendado desativar esta opção.",
|
||||||
"feedback": "Feedback",
|
"feedback": "Feedback",
|
||||||
"feedbackOnGithub": "Se você tem qualquer problema, por favor, dê feedback no GitHub",
|
"feedbackOnGithub": "Se você tem qualquer problema, por favor, dê feedback no GitHub",
|
||||||
"fieldMustNotEmpty": "Estes campos não podem estar vazios.",
|
"fieldMustNotEmpty": "Estes campos não podem estar vazios.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "Lista de imagens",
|
"imagesList": "Lista de imagens",
|
||||||
"import": "Importar",
|
"import": "Importar",
|
||||||
"inAppUpdate": "Atualizar dentro do app? Caso contrário, baixe usando um navegador.",
|
"inAppUpdate": "Atualizar dentro do app? Caso contrário, baixe usando um navegador.",
|
||||||
|
"init": "Inicializar",
|
||||||
"inner": "Interno",
|
"inner": "Interno",
|
||||||
"inputDomainHere": "Insira o domínio aqui",
|
"inputDomainHere": "Insira o domínio aqui",
|
||||||
"install": "Instalar",
|
"install": "Instalar",
|
||||||
@@ -178,7 +180,7 @@
|
|||||||
"newContainer": "Novo contêiner",
|
"newContainer": "Novo contêiner",
|
||||||
"noClient": "Sem conexão SSH",
|
"noClient": "Sem conexão SSH",
|
||||||
"noInterface": "Sem interface disponível",
|
"noInterface": "Sem interface disponível",
|
||||||
"noLineChart": "Gebruik geen lijndiagrammen",
|
"noLineChart": "Não usar gráficos de linha",
|
||||||
"noNotiPerm": "Sem permissão de notificação, possivelmente sem indicação de progresso ao baixar atualizações de aplicativos.",
|
"noNotiPerm": "Sem permissão de notificação, possivelmente sem indicação de progresso ao baixar atualizações de aplicativos.",
|
||||||
"noOptions": "Sem opções",
|
"noOptions": "Sem opções",
|
||||||
"noPrivateKeyTip": "A chave privada não existe, pode ter sido deletada ou há um erro de configuração.",
|
"noPrivateKeyTip": "A chave privada não existe, pode ter sido deletada ou há um erro de configuração.",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "Lembrar da seleção",
|
"rememberChoice": "Lembrar da seleção",
|
||||||
"rememberPwdInMem": "Lembrar senha na memória",
|
"rememberPwdInMem": "Lembrar senha na memória",
|
||||||
"rememberPwdInMemTip": "Usado para contêineres, suspensão, etc.",
|
"rememberPwdInMemTip": "Usado para contêineres, suspensão, etc.",
|
||||||
|
"rememberWindowSize": "Lembrar o tamanho da janela",
|
||||||
"remotePath": "Caminho remoto",
|
"remotePath": "Caminho remoto",
|
||||||
"rename": "Renomear",
|
"rename": "Renomear",
|
||||||
"reportBugsOnGithubIssue": "Por favor, reporte problemas em {url}",
|
"reportBugsOnGithubIssue": "Por favor, reporte problemas em {url}",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "экспорт",
|
"export": "экспорт",
|
||||||
"extraArgs": "дополнительные аргументы",
|
"extraArgs": "дополнительные аргументы",
|
||||||
"failed": "неудача",
|
"failed": "неудача",
|
||||||
|
"fdroidReleaseTip": "Если вы скачали это приложение с Fdroid, рекомендуется отключить эту опцию.",
|
||||||
"feedback": "обратная связь",
|
"feedback": "обратная связь",
|
||||||
"feedbackOnGithub": "Если у вас есть какие-либо вопросы, пожалуйста, отправьте отзыв на GitHub",
|
"feedbackOnGithub": "Если у вас есть какие-либо вопросы, пожалуйста, отправьте отзыв на GitHub",
|
||||||
"fieldMustNotEmpty": "Эти поля не могут быть пустыми.",
|
"fieldMustNotEmpty": "Эти поля не могут быть пустыми.",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "список образов",
|
"imagesList": "список образов",
|
||||||
"import": "импорт",
|
"import": "импорт",
|
||||||
"inAppUpdate": "Обновить в приложении? В противном случае загрузите с помощью браузера.",
|
"inAppUpdate": "Обновить в приложении? В противном случае загрузите с помощью браузера.",
|
||||||
|
"init": "Инициализировать",
|
||||||
"inner": "встроенный",
|
"inner": "встроенный",
|
||||||
"inputDomainHere": "введите домен здесь",
|
"inputDomainHere": "введите домен здесь",
|
||||||
"install": "установить",
|
"install": "установить",
|
||||||
@@ -178,7 +180,7 @@
|
|||||||
"newContainer": "создать контейнер",
|
"newContainer": "создать контейнер",
|
||||||
"noClient": "нет SSH соединения",
|
"noClient": "нет SSH соединения",
|
||||||
"noInterface": "нет доступных интерфейсов",
|
"noInterface": "нет доступных интерфейсов",
|
||||||
"noLineChart": "Não use gráficos de linha",
|
"noLineChart": "Не использовать линейные графики",
|
||||||
"noNotiPerm": "Нет разрешения на уведомления, возможно отсутствие индикации прогресса при загрузке обновлений приложений.",
|
"noNotiPerm": "Нет разрешения на уведомления, возможно отсутствие индикации прогресса при загрузке обновлений приложений.",
|
||||||
"noOptions": "нет доступных опций",
|
"noOptions": "нет доступных опций",
|
||||||
"noPrivateKeyTip": "Приватный ключ не существует, возможно, он был удален или есть ошибка в настройках.",
|
"noPrivateKeyTip": "Приватный ключ не существует, возможно, он был удален или есть ошибка в настройках.",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "Запомнить выбор",
|
"rememberChoice": "Запомнить выбор",
|
||||||
"rememberPwdInMem": "Запомнить пароль в памяти",
|
"rememberPwdInMem": "Запомнить пароль в памяти",
|
||||||
"rememberPwdInMemTip": "Используется для контейнеров, приостановки и т. д.",
|
"rememberPwdInMemTip": "Используется для контейнеров, приостановки и т. д.",
|
||||||
|
"rememberWindowSize": "Запомнить размер окна",
|
||||||
"remotePath": "удаленный путь",
|
"remotePath": "удаленный путь",
|
||||||
"rename": "переименовать",
|
"rename": "переименовать",
|
||||||
"reportBugsOnGithubIssue": "Пожалуйста, сообщайте о проблемах на {url}",
|
"reportBugsOnGithubIssue": "Пожалуйста, сообщайте о проблемах на {url}",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "导出",
|
"export": "导出",
|
||||||
"extraArgs": "额外参数",
|
"extraArgs": "额外参数",
|
||||||
"failed": "失败",
|
"failed": "失败",
|
||||||
|
"fdroidReleaseTip": "如果你是从 Fdroid 下载的本应用,推荐关闭此选项",
|
||||||
"feedback": "反馈",
|
"feedback": "反馈",
|
||||||
"feedbackOnGithub": "如果你有任何问题,请在GitHub反馈",
|
"feedbackOnGithub": "如果你有任何问题,请在GitHub反馈",
|
||||||
"fieldMustNotEmpty": "这些输入框不能为空。",
|
"fieldMustNotEmpty": "这些输入框不能为空。",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "镜像列表",
|
"imagesList": "镜像列表",
|
||||||
"import": "导入",
|
"import": "导入",
|
||||||
"inAppUpdate": "在App内更新?否则使用浏览器下载",
|
"inAppUpdate": "在App内更新?否则使用浏览器下载",
|
||||||
|
"init": "初始化",
|
||||||
"inner": "内置",
|
"inner": "内置",
|
||||||
"inputDomainHere": "在这里输入域名",
|
"inputDomainHere": "在这里输入域名",
|
||||||
"install": "安装",
|
"install": "安装",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "记住选择",
|
"rememberChoice": "记住选择",
|
||||||
"rememberPwdInMem": "在内存中记住密码",
|
"rememberPwdInMem": "在内存中记住密码",
|
||||||
"rememberPwdInMemTip": "用于容器、挂起等",
|
"rememberPwdInMemTip": "用于容器、挂起等",
|
||||||
|
"rememberWindowSize": "记住窗口大小",
|
||||||
"remotePath": "远端路径",
|
"remotePath": "远端路径",
|
||||||
"rename": "重命名",
|
"rename": "重命名",
|
||||||
"reportBugsOnGithubIssue": "请到 {url} 提交问题",
|
"reportBugsOnGithubIssue": "请到 {url} 提交问题",
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
"export": "導出",
|
"export": "導出",
|
||||||
"extraArgs": "額外參數",
|
"extraArgs": "額外參數",
|
||||||
"failed": "失敗",
|
"failed": "失敗",
|
||||||
|
"fdroidReleaseTip": "如果你是從 Fdroid 下載的本應用,推薦關閉此選項",
|
||||||
"feedback": "反饋",
|
"feedback": "反饋",
|
||||||
"feedbackOnGithub": "如果你有任何問題,請在GitHub反饋",
|
"feedbackOnGithub": "如果你有任何問題,請在GitHub反饋",
|
||||||
"fieldMustNotEmpty": "這些輸入框不能為空。",
|
"fieldMustNotEmpty": "這些輸入框不能為空。",
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
"imagesList": "鏡像列表",
|
"imagesList": "鏡像列表",
|
||||||
"import": "導入",
|
"import": "導入",
|
||||||
"inAppUpdate": "在App內更新?否則使用瀏覽器下載。",
|
"inAppUpdate": "在App內更新?否則使用瀏覽器下載。",
|
||||||
|
"init": "初始化",
|
||||||
"inner": "內置",
|
"inner": "內置",
|
||||||
"inputDomainHere": "在這裡輸入域名",
|
"inputDomainHere": "在這裡輸入域名",
|
||||||
"install": "安裝",
|
"install": "安裝",
|
||||||
@@ -231,6 +233,7 @@
|
|||||||
"rememberChoice": "記住選擇",
|
"rememberChoice": "記住選擇",
|
||||||
"rememberPwdInMem": "在記憶體中記住密碼",
|
"rememberPwdInMem": "在記憶體中記住密碼",
|
||||||
"rememberPwdInMemTip": "用於容器、暫停等",
|
"rememberPwdInMemTip": "用於容器、暫停等",
|
||||||
|
"rememberWindowSize": "記住窗口大小",
|
||||||
"remotePath": "遠端路徑",
|
"remotePath": "遠端路徑",
|
||||||
"rename": "重命名",
|
"rename": "重命名",
|
||||||
"reportBugsOnGithubIssue": "請到 {url} 提交問題",
|
"reportBugsOnGithubIssue": "請到 {url} 提交問題",
|
||||||
|
|||||||
@@ -68,7 +68,13 @@ Future<void> _initApp() async {
|
|||||||
await _initData();
|
await _initData();
|
||||||
_setupDebug();
|
_setupDebug();
|
||||||
|
|
||||||
SystemUIs.initDesktopWindow(Stores.setting.hideTitleBar.fetch());
|
final windowSize = Stores.setting.windowSize;
|
||||||
|
final hideTitleBar = Stores.setting.hideTitleBar.fetch();
|
||||||
|
SystemUIs.initDesktopWindow(
|
||||||
|
hideTitleBar: hideTitleBar,
|
||||||
|
size: windowSize.fetch().toSize(),
|
||||||
|
listener: WindowSizeListener(windowSize),
|
||||||
|
);
|
||||||
FontUtils.loadFrom(Stores.setting.fontPath.fetch());
|
FontUtils.loadFrom(Stores.setting.fontPath.fetch());
|
||||||
|
|
||||||
_doPlatformRelated();
|
_doPlatformRelated();
|
||||||
|
|||||||
@@ -66,18 +66,7 @@ class BackupPage extends StatelessWidget {
|
|||||||
trailing: const Icon(Icons.save),
|
trailing: const Icon(Icons.save),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
final path = await Backup.backup();
|
final path = await Backup.backup();
|
||||||
debugPrint("Backup path: $path");
|
await Pfs.share(path: path);
|
||||||
|
|
||||||
/// Issue #188
|
|
||||||
switch (Pfs.type) {
|
|
||||||
case Pfs.windows:
|
|
||||||
final backslashPath = path.replaceAll('/', '\\');
|
|
||||||
await Process.run('explorer', ['/select,$backslashPath']);
|
|
||||||
case Pfs.linux:
|
|
||||||
await Process.run('xdg-open', [path]);
|
|
||||||
default:
|
|
||||||
await Pfs.sharePath(path);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:after_layout/after_layout.dart';
|
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|
||||||
import 'package:icons_plus/icons_plus.dart';
|
import 'package:icons_plus/icons_plus.dart';
|
||||||
import 'package:server_box/core/channel/home_widget.dart';
|
import 'package:server_box/core/channel/home_widget.dart';
|
||||||
import 'package:server_box/core/extension/build.dart';
|
import 'package:server_box/core/extension/build.dart';
|
||||||
@@ -60,9 +58,6 @@ class _HomePageState extends State<HomePage>
|
|||||||
@override
|
@override
|
||||||
void didChangeDependencies() {
|
void didChangeDependencies() {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
context.setLibL10n();
|
|
||||||
final appL10n = AppLocalizations.of(context);
|
|
||||||
if (appL10n != null) l10n = appL10n;
|
|
||||||
_isLandscape.value =
|
_isLandscape.value =
|
||||||
MediaQuery.of(context).orientation == Orientation.landscape;
|
MediaQuery.of(context).orientation == Orientation.landscape;
|
||||||
}
|
}
|
||||||
@@ -224,17 +219,10 @@ class _HomePageState extends State<HomePage>
|
|||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
_buildIcon(),
|
_buildIcon(),
|
||||||
TextButton(
|
const Text(
|
||||||
onPressed: () => context.showRoundDialog(
|
'${BuildData.name}\n${BuildDataX.versionStr}',
|
||||||
title: BuildDataX.versionStr,
|
textAlign: TextAlign.center,
|
||||||
child: const Text(
|
style: UIs.text15,
|
||||||
'${BuildData.buildAt}\nFlutter ${BuildData.engine}'),
|
|
||||||
),
|
|
||||||
child: const Text(
|
|
||||||
'${BuildData.name}\n${BuildDataX.versionStr}',
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: UIs.text15,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 37),
|
const SizedBox(height: 37),
|
||||||
_buildTiles(),
|
_buildTiles(),
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:after_layout/after_layout.dart';
|
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:after_layout/after_layout.dart';
|
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:math' as math;
|
import 'dart:math' as math;
|
||||||
|
|
||||||
import 'package:after_layout/after_layout.dart';
|
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:icons_plus/icons_plus.dart';
|
import 'package:icons_plus/icons_plus.dart';
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
|
|||||||
import 'package:icons_plus/icons_plus.dart';
|
import 'package:icons_plus/icons_plus.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.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/provider.dart';
|
|
||||||
import 'package:server_box/data/res/rebuild.dart';
|
import 'package:server_box/data/res/rebuild.dart';
|
||||||
import 'package:server_box/data/res/store.dart';
|
import 'package:server_box/data/res/store.dart';
|
||||||
import 'package:server_box/data/res/url.dart';
|
import 'package:server_box/data/res/url.dart';
|
||||||
|
import 'package:server_box/view/page/setting/platform/platform_pub.dart';
|
||||||
|
|
||||||
import '../../../core/route.dart';
|
import '../../../core/route.dart';
|
||||||
import '../../../data/model/app/net_view.dart';
|
import '../../../data/model/app/net_view.dart';
|
||||||
@@ -736,47 +736,29 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
leading: const Icon(Icons.delete_forever),
|
leading: const Icon(Icons.delete_forever),
|
||||||
trailing: const Icon(Icons.keyboard_arrow_right),
|
trailing: const Icon(Icons.keyboard_arrow_right),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
context.showRoundDialog<List<String>>(
|
final keys = Stores.server.box.keys.toList();
|
||||||
title: l10n.choose,
|
keys.removeWhere((element) => element == BoxX.lastModifiedKey);
|
||||||
child: SingleChildScrollView(
|
final strKeys = List<String>.empty(growable: true);
|
||||||
child: StatefulBuilder(builder: (ctx, setState) {
|
for (final key in keys) {
|
||||||
final keys = Stores.server.box.keys.toList();
|
if (key is String) strKeys.add(key);
|
||||||
keys.removeWhere((element) => element == BoxX.lastModifiedKey);
|
}
|
||||||
final all = keys.map(
|
final deleteKeys = await context.showPickDialog<String>(
|
||||||
(e) {
|
clearable: true,
|
||||||
final name = Pros.server.pick(id: e)?.spi.name;
|
items: strKeys,
|
||||||
return ListTile(
|
|
||||||
title: Text(name ?? e),
|
|
||||||
subtitle: name != null ? Text(e) : null,
|
|
||||||
onTap: () => context.showRoundDialog(
|
|
||||||
title: l10n.attention,
|
|
||||||
child: Text(l10n.askContinue(
|
|
||||||
'${l10n.delete} ${l10n.server}($e)',
|
|
||||||
)),
|
|
||||||
actions: [
|
|
||||||
TextButton(
|
|
||||||
onPressed: () {
|
|
||||||
Pros.server.delServer(e);
|
|
||||||
ctx.pop();
|
|
||||||
setState(() {});
|
|
||||||
},
|
|
||||||
child: Text(l10n.ok),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
return ConstrainedBox(
|
|
||||||
constraints: const BoxConstraints(maxHeight: 377),
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: all.toList(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
if (deleteKeys == null) return;
|
||||||
|
|
||||||
|
final md = deleteKeys.map((e) => '- $e').join('\n');
|
||||||
|
final sure = await context.showRoundDialog(
|
||||||
|
title: l10n.attention,
|
||||||
|
child: SimpleMarkdown(data: md),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (sure != true) return;
|
||||||
|
for (final key in deleteKeys) {
|
||||||
|
Stores.server.box.delete(key);
|
||||||
|
}
|
||||||
|
context.showSnackBar(l10n.success);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1071,6 +1053,7 @@ class _SettingPageState extends State<SettingPage> {
|
|||||||
_buildCollapseUI(),
|
_buildCollapseUI(),
|
||||||
_buildCupertinoRoute(),
|
_buildCupertinoRoute(),
|
||||||
if (isDesktop) _buildHideTitleBar(),
|
if (isDesktop) _buildHideTitleBar(),
|
||||||
|
if (isDesktop) PlatformPublicSettings.buildSaveWindowSize(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,9 +82,7 @@ class _IOSSettingsPageState extends State<IOSSettingsPage> {
|
|||||||
Widget _buildWatchApp() {
|
Widget _buildWatchApp() {
|
||||||
return FutureWidget(
|
return FutureWidget(
|
||||||
future: () async {
|
future: () async {
|
||||||
if (!await wc.isPaired) {
|
if (!await wc.isPaired) return null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return await wc.applicationContext;
|
return await wc.applicationContext;
|
||||||
}(),
|
}(),
|
||||||
loading: UIs.centerLoading,
|
loading: UIs.centerLoading,
|
||||||
@@ -114,16 +112,15 @@ class _IOSSettingsPageState extends State<IOSSettingsPage> {
|
|||||||
void _onTapWatchApp(Map<String, dynamic> map) async {
|
void _onTapWatchApp(Map<String, dynamic> map) async {
|
||||||
final urls = Map<String, String>.from(map['urls'] as Map? ?? {});
|
final urls = Map<String, String>.from(map['urls'] as Map? ?? {});
|
||||||
final result = await AppRoutes.kvEditor(data: urls).go(context);
|
final result = await AppRoutes.kvEditor(data: urls).go(context);
|
||||||
if (result == null || result! is Map<String, String>) return;
|
if (result == null || result is! Map<String, String>) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await wc.updateApplicationContext({'urls': result});
|
await context.showLoadingDialog(fn: () async {
|
||||||
} catch (e, trace) {
|
await wc.updateApplicationContext({'urls': result});
|
||||||
context.showRoundDialog(
|
});
|
||||||
title: l10n.error,
|
} catch (e, s) {
|
||||||
child: Text('${l10n.save}:\n$e'),
|
context.showErrDialog(e: e, s: s, operation: 'Watch Context');
|
||||||
);
|
Loggers.app.warning('Update watch config failed', e, s);
|
||||||
Loggers.app.warning('Update watch config failed', e, trace);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:fl_lib/fl_lib.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.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/store.dart';
|
import 'package:server_box/data/res/store.dart';
|
||||||
|
import 'package:window_manager/window_manager.dart';
|
||||||
|
|
||||||
abstract final class PlatformPublicSettings {
|
abstract final class PlatformPublicSettings {
|
||||||
static Widget buildBioAuth() {
|
static Widget buildBioAuth() {
|
||||||
@@ -45,4 +46,49 @@ abstract final class PlatformPublicSettings {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Widget buildSaveWindowSize() {
|
||||||
|
final isBusy = false.vn;
|
||||||
|
// Only show [FadeIn] when previous state is busy.
|
||||||
|
var lastIsBusy = false;
|
||||||
|
final prop = Stores.setting.windowSize;
|
||||||
|
|
||||||
|
return ListTile(
|
||||||
|
title: Text(l10n.rememberWindowSize),
|
||||||
|
|
||||||
|
/// Copied from `fl_build/view/store_switch`
|
||||||
|
trailing: ValBuilder(
|
||||||
|
listenable: isBusy,
|
||||||
|
builder: (busy) {
|
||||||
|
return ValBuilder(
|
||||||
|
listenable: prop.listenable(),
|
||||||
|
builder: (value) {
|
||||||
|
if (busy) {
|
||||||
|
lastIsBusy = true;
|
||||||
|
return UIs.centerSizedLoadingSmall.paddingOnly(right: 17);
|
||||||
|
}
|
||||||
|
|
||||||
|
final switcher = Switch(
|
||||||
|
value: value.isNotEmpty,
|
||||||
|
onChanged: (value) async {
|
||||||
|
isBusy.value = true;
|
||||||
|
final size = await windowManager.getSize();
|
||||||
|
isBusy.value = false;
|
||||||
|
prop.put(size.toIntStr());
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
if (lastIsBusy) {
|
||||||
|
final ret = FadeIn(child: switcher);
|
||||||
|
lastIsBusy = false;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return switcher;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:after_layout/after_layout.dart';
|
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:after_layout/after_layout.dart';
|
|
||||||
import 'package:dartssh2/dartssh2.dart';
|
import 'package:dartssh2/dartssh2.dart';
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ class _LocalStoragePageState extends State<LocalStoragePage> {
|
|||||||
leading: const Icon(Icons.open_in_new),
|
leading: const Icon(Icons.open_in_new),
|
||||||
title: Text(l10n.open),
|
title: Text(l10n.open),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Pfs.sharePath(file.absolute.path);
|
Pfs.share(path: file.absolute.path);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:after_layout/after_layout.dart';
|
|
||||||
import 'package:dartssh2/dartssh2.dart';
|
import 'package:dartssh2/dartssh2.dart';
|
||||||
import 'package:fl_lib/fl_lib.dart';
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|||||||
@@ -59,65 +59,84 @@ class _SftpMissionPageState extends State<SftpMissionPage> {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
switch (status.status) {
|
return switch (status.status) {
|
||||||
case SftpWorkerStatus.finished:
|
const (SftpWorkerStatus.finished) => _buildFinished(status),
|
||||||
final time = status.spentTime.toString();
|
const (SftpWorkerStatus.loading) => _buildLoading(status),
|
||||||
final str = '${l10n.finished} ${l10n.spentTime(
|
const (SftpWorkerStatus.sshConnectted) => _buildConnected(status),
|
||||||
time == 'null' ? l10n.unknown : (time.substring(0, time.length - 7)),
|
const (SftpWorkerStatus.preparing) => _buildPreparing(status),
|
||||||
)}';
|
_ => _buildDefault(status),
|
||||||
return _wrapInCard(
|
};
|
||||||
status: status,
|
}
|
||||||
subtitle: str,
|
|
||||||
trailing: Row(
|
Widget _buildPreparing(SftpReqStatus status) {
|
||||||
mainAxisSize: MainAxisSize.min,
|
return _wrapInCard(
|
||||||
children: [
|
status: status,
|
||||||
IconButton(
|
subtitle: l10n.sftpDlPrepare,
|
||||||
onPressed: () {
|
trailing: _buildDelete(status.fileName, status.id),
|
||||||
final idx = status.req.localPath.lastIndexOf('/');
|
);
|
||||||
final dir = status.req.localPath.substring(0, idx);
|
}
|
||||||
AppRoutes.localStorage(initDir: dir).go(context);
|
|
||||||
},
|
Widget _buildDefault(SftpReqStatus status) {
|
||||||
icon: const Icon(Icons.file_open)),
|
return _wrapInCard(
|
||||||
IconButton(
|
status: status,
|
||||||
onPressed: () => Pfs.sharePath(status.req.localPath),
|
subtitle: l10n.unknown,
|
||||||
icon: const Icon(Icons.open_in_new),
|
trailing: IconButton(
|
||||||
)
|
onPressed: () => context.showRoundDialog(
|
||||||
],
|
title: l10n.error,
|
||||||
),
|
child: Text((status.error ?? l10n.unknown).toString()),
|
||||||
);
|
),
|
||||||
case SftpWorkerStatus.loading:
|
icon: const Icon(Icons.error),
|
||||||
final percentStr = (status.progress ?? 0.0).toStringAsFixed(2);
|
),
|
||||||
final size = (status.size ?? 0).bytes2Str;
|
);
|
||||||
return _wrapInCard(
|
}
|
||||||
status: status,
|
|
||||||
subtitle: l10n.percentOfSize(percentStr, size),
|
Widget _buildConnected(SftpReqStatus status) {
|
||||||
trailing: _buildDelete(status.fileName, status.id),
|
return _wrapInCard(
|
||||||
);
|
status: status,
|
||||||
case SftpWorkerStatus.preparing:
|
subtitle: l10n.sftpSSHConnected,
|
||||||
return _wrapInCard(
|
trailing: _buildDelete(status.fileName, status.id),
|
||||||
status: status,
|
);
|
||||||
subtitle: l10n.sftpDlPrepare,
|
}
|
||||||
trailing: _buildDelete(status.fileName, status.id),
|
|
||||||
);
|
Widget _buildLoading(SftpReqStatus status) {
|
||||||
case SftpWorkerStatus.sshConnectted:
|
final percentStr = (status.progress ?? 0.0).toStringAsFixed(2);
|
||||||
return _wrapInCard(
|
final size = (status.size ?? 0).bytes2Str;
|
||||||
status: status,
|
return _wrapInCard(
|
||||||
subtitle: l10n.sftpSSHConnected,
|
status: status,
|
||||||
trailing: _buildDelete(status.fileName, status.id),
|
subtitle: l10n.percentOfSize(percentStr, size),
|
||||||
);
|
trailing: _buildDelete(status.fileName, status.id),
|
||||||
default:
|
);
|
||||||
return _wrapInCard(
|
}
|
||||||
status: status,
|
|
||||||
subtitle: l10n.unknown,
|
Widget _buildFinished(SftpReqStatus status) {
|
||||||
trailing: IconButton(
|
final time = status.spentTime.toString();
|
||||||
onPressed: () => context.showRoundDialog(
|
final str = '${l10n.finished} ${l10n.spentTime(
|
||||||
title: l10n.error,
|
time == 'null' ? l10n.unknown : (time.substring(0, time.length - 7)),
|
||||||
child: Text((status.error ?? l10n.unknown).toString()),
|
)}';
|
||||||
),
|
|
||||||
icon: const Icon(Icons.error),
|
final btns = Row(
|
||||||
),
|
mainAxisSize: MainAxisSize.min,
|
||||||
);
|
children: [
|
||||||
}
|
IconButton(
|
||||||
|
onPressed: () {
|
||||||
|
final idx = status.req.localPath.lastIndexOf('/');
|
||||||
|
final dir = status.req.localPath.substring(0, idx);
|
||||||
|
AppRoutes.localStorage(initDir: dir).go(context);
|
||||||
|
},
|
||||||
|
icon: const Icon(Icons.file_open),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
onPressed: () => Pfs.share(path: status.req.localPath),
|
||||||
|
icon: const Icon(Icons.open_in_new),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
return _wrapInCard(
|
||||||
|
status: status,
|
||||||
|
subtitle: str,
|
||||||
|
trailing: btns,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _wrapInCard({
|
Widget _wrapInCard({
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
PODS:
|
PODS:
|
||||||
|
- device_info_plus (0.0.1):
|
||||||
|
- FlutterMacOS
|
||||||
- dynamic_color (0.0.2):
|
- dynamic_color (0.0.2):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- FlutterMacOS (1.0.0)
|
- FlutterMacOS (1.0.0)
|
||||||
- icloud_storage (0.0.1):
|
- icloud_storage (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- package_info_plus (0.0.1):
|
||||||
|
- FlutterMacOS
|
||||||
- path_provider_foundation (0.0.1):
|
- path_provider_foundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
@@ -16,27 +20,36 @@ PODS:
|
|||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- url_launcher_macos (0.0.1):
|
- url_launcher_macos (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- wakelock_plus (0.0.1):
|
||||||
|
- FlutterMacOS
|
||||||
- window_manager (0.2.0):
|
- window_manager (0.2.0):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
|
||||||
- dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`)
|
- dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`)
|
||||||
- FlutterMacOS (from `Flutter/ephemeral`)
|
- FlutterMacOS (from `Flutter/ephemeral`)
|
||||||
- icloud_storage (from `Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos`)
|
- icloud_storage (from `Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos`)
|
||||||
|
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
|
||||||
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
|
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
|
||||||
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
|
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
|
||||||
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
||||||
|
- wakelock_plus (from `Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos`)
|
||||||
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
|
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
|
device_info_plus:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
|
||||||
dynamic_color:
|
dynamic_color:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos
|
||||||
FlutterMacOS:
|
FlutterMacOS:
|
||||||
:path: Flutter/ephemeral
|
:path: Flutter/ephemeral
|
||||||
icloud_storage:
|
icloud_storage:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/icloud_storage/macos
|
||||||
|
package_info_plus:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
|
||||||
screen_retriever:
|
screen_retriever:
|
||||||
@@ -47,18 +60,23 @@ EXTERNAL SOURCES:
|
|||||||
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
|
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
||||||
|
wakelock_plus:
|
||||||
|
:path: Flutter/ephemeral/.symlinks/plugins/wakelock_plus/macos
|
||||||
window_manager:
|
window_manager:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
|
device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720
|
||||||
dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f
|
dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f
|
||||||
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
||||||
icloud_storage: 33b05299e26d1391d724da8d62860e702380a1cd
|
icloud_storage: 33b05299e26d1391d724da8d62860e702380a1cd
|
||||||
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
|
package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c
|
||||||
|
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||||
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
|
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
|
||||||
share_plus: 36537c04ce0c3e3f5bd297ce4318b6d5ee5fd6cf
|
share_plus: 36537c04ce0c3e3f5bd297ce4318b6d5ee5fd6cf
|
||||||
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
|
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
|
||||||
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
|
url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399
|
||||||
|
wakelock_plus: 4783562c9a43d209c458cb9b30692134af456269
|
||||||
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
|
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
|
||||||
|
|
||||||
PODFILE CHECKSUM: 8cdf29216ea1ab6b9743188287968d22b4579c1d
|
PODFILE CHECKSUM: 8cdf29216ea1ab6b9743188287968d22b4579c1d
|
||||||
|
|||||||
@@ -471,7 +471,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
||||||
@@ -481,7 +481,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "Server Box";
|
PRODUCT_NAME = "Server Box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -608,7 +608,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = BA88US33G6;
|
DEVELOPMENT_TEAM = BA88US33G6;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
INFOPLIST_KEY_CFBundleDisplayName = "Server Box";
|
||||||
@@ -618,7 +618,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "Server Box";
|
PRODUCT_NAME = "Server Box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -638,7 +638,7 @@
|
|||||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
||||||
CODE_SIGN_STYLE = Manual;
|
CODE_SIGN_STYLE = Manual;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 970;
|
CURRENT_PROJECT_VERSION = 992;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
|
"DEVELOPMENT_TEAM[sdk=macosx*]" = BA88US33G6;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
@@ -649,7 +649,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
MARKETING_VERSION = 1.0.970;
|
MARKETING_VERSION = 1.0.992;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
|
||||||
PRODUCT_NAME = "Server Box";
|
PRODUCT_NAME = "Server Box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|||||||
32
pubspec.lock
32
pubspec.lock
@@ -9,14 +9,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "67.0.0"
|
version: "67.0.0"
|
||||||
after_layout:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: after_layout
|
|
||||||
sha256: "95a1cb2ca1464f44f14769329fbf15987d20ab6c88f8fc5d359bd362be625f29"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.2.0"
|
|
||||||
analyzer:
|
analyzer:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -376,8 +368,8 @@ packages:
|
|||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: "v1.0.17"
|
ref: "v1.0.30"
|
||||||
resolved-ref: bcb7019cc8bb3ab8c9c36653cd13936909c6e075
|
resolved-ref: "30d527ddc7f25c9e1fd7aa5f90df1a9c928ed306"
|
||||||
url: "https://github.com/lppcg/fl_build.git"
|
url: "https://github.com/lppcg/fl_build.git"
|
||||||
source: git
|
source: git
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
@@ -393,8 +385,8 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: "v1.0.40"
|
ref: "v1.0.50"
|
||||||
resolved-ref: "1f547b45bc9083558ee88eafa61df92eb0abf552"
|
resolved-ref: fc4e847cc0513157b6ac77e9e82ab57edbdc9482
|
||||||
url: "https://github.com/lppcg/fl_lib"
|
url: "https://github.com/lppcg/fl_lib"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.1"
|
version: "0.0.1"
|
||||||
@@ -1404,19 +1396,11 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: "v1.0.84"
|
ref: "v1.0.85"
|
||||||
resolved-ref: "50405d87bea86aece143c235b8b17263d37de3ef"
|
resolved-ref: "13e42750a8f8dbf9a6c7890198b0dd18283a0692"
|
||||||
url: "https://github.com/lollipopkit/watch_connectivity"
|
url: "https://github.com/lollipopkit/watch_connectivity"
|
||||||
source: git
|
source: git
|
||||||
version: "0.1.5"
|
version: "0.1.5"
|
||||||
watch_connectivity_platform_interface:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: watch_connectivity_platform_interface
|
|
||||||
sha256: "9074115391bd764c08a17346fcbc4d5c0b555672defbe6928ac648503b54aa9c"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.1.2"
|
|
||||||
watcher:
|
watcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1502,8 +1486,8 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: master
|
ref: "v1.0.586"
|
||||||
resolved-ref: "13a280e77dd077b439af24ad3d054d318ae5df4a"
|
resolved-ref: b8c73bec722055f24c5724cd2f2297859e95b6af
|
||||||
url: "https://github.com/lollipopkit/xterm.dart"
|
url: "https://github.com/lollipopkit/xterm.dart"
|
||||||
source: git
|
source: git
|
||||||
version: "4.0.0"
|
version: "4.0.0"
|
||||||
|
|||||||
11
pubspec.yaml
11
pubspec.yaml
@@ -1,7 +1,7 @@
|
|||||||
name: server_box
|
name: server_box
|
||||||
description: server status & toolbox app.
|
description: server status & toolbox app.
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
version: 1.0.971+971
|
version: 1.0.992+992
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.0.0"
|
sdk: ">=3.0.0"
|
||||||
@@ -14,7 +14,6 @@ dependencies:
|
|||||||
provider: ^6.0.0
|
provider: ^6.0.0
|
||||||
hive_flutter: ^1.1.0
|
hive_flutter: ^1.1.0
|
||||||
dio: ^5.2.1
|
dio: ^5.2.1
|
||||||
after_layout: ^1.1.0
|
|
||||||
easy_isolate: ^1.3.0
|
easy_isolate: ^1.3.0
|
||||||
intl: ^0.19.0
|
intl: ^0.19.0
|
||||||
highlight: ^0.7.0
|
highlight: ^0.7.0
|
||||||
@@ -43,7 +42,7 @@ dependencies:
|
|||||||
xterm:
|
xterm:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lollipopkit/xterm.dart
|
url: https://github.com/lollipopkit/xterm.dart
|
||||||
ref: master
|
ref: v1.0.586
|
||||||
computer:
|
computer:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lollipopkit/dart_computer
|
url: https://github.com/lollipopkit/dart_computer
|
||||||
@@ -51,7 +50,7 @@ dependencies:
|
|||||||
watch_connectivity:
|
watch_connectivity:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lollipopkit/watch_connectivity
|
url: https://github.com/lollipopkit/watch_connectivity
|
||||||
ref: v1.0.84
|
ref: v1.0.85
|
||||||
plain_notification_token:
|
plain_notification_token:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lollipopkit/plain_notification_token
|
url: https://github.com/lollipopkit/plain_notification_token
|
||||||
@@ -59,7 +58,7 @@ dependencies:
|
|||||||
fl_lib:
|
fl_lib:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lppcg/fl_lib
|
url: https://github.com/lppcg/fl_lib
|
||||||
ref: v1.0.40
|
ref: v1.0.50
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
# dartssh2:
|
# dartssh2:
|
||||||
@@ -80,7 +79,7 @@ dev_dependencies:
|
|||||||
# path: ../fl_build
|
# path: ../fl_build
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lppcg/fl_build.git
|
url: https://github.com/lppcg/fl_build.git
|
||||||
ref: v1.0.17
|
ref: v1.0.30
|
||||||
|
|
||||||
flutter:
|
flutter:
|
||||||
generate: true
|
generate: true
|
||||||
|
|||||||
Reference in New Issue
Block a user