update dio to dio: ^5.5.0+1
update dio to dio: ^5.5.0+1
This commit is contained in:
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
@@ -9,7 +9,7 @@
|
|||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
|
||||||
2FD21F1125A363E300F556E0 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD21F1025A363E300F556E0 /* PacketTunnelProvider.swift */; };
|
2FD21F1125A363E300F556E0 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD21F1025A363E300F556E0 /* PacketTunnelProvider.swift */; };
|
||||||
2FD21F1625A363E300F556E0 /* PacketTunnel.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 2FD21F0D25A363E300F556E0 /* PacketTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
2FD21F1625A363E300F556E0 /* PacketTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 2FD21F0D25A363E300F556E0 /* PacketTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||||
2FD21F2425A364B700F556E0 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FD21EF825A363AA00F556E0 /* NetworkExtension.framework */; };
|
2FD21F2425A364B700F556E0 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FD21EF825A363AA00F556E0 /* NetworkExtension.framework */; };
|
||||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||||
3E06F985293FACBB00E04D92 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD21F1025A363E300F556E0 /* PacketTunnelProvider.swift */; };
|
3E06F985293FACBB00E04D92 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD21F1025A363E300F556E0 /* PacketTunnelProvider.swift */; };
|
||||||
@@ -34,8 +34,10 @@
|
|||||||
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
|
||||||
C09C70752C3E5685000F6E01 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
|
C09C70752C3E5685000F6E01 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
|
||||||
C09C70762C3E5685000F6E01 /* leaf.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
C09C70762C3E5685000F6E01 /* leaf.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
C09CB0812C50A09A0028C461 /* TESWT.m in Sources */ = {isa = PBXBuildFile; fileRef = C09CB0802C50A09A0028C461 /* TESWT.m */; };
|
||||||
C0CB10F62C3275EE00A1F217 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
|
C0CB10F62C3275EE00A1F217 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
|
||||||
DBC6F25A26C78B1D91884CE1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A9C0075B77637136AF52D8B /* Pods_Runner.framework */; };
|
DBC6F25A26C78B1D91884CE1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A9C0075B77637136AF52D8B /* Pods_Runner.framework */; };
|
||||||
|
E2B5FEC68AAAE043A3080A59 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A9C0075B77637136AF52D8B /* Pods_Runner.framework */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@@ -49,15 +51,15 @@
|
|||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
2FD21F0625A363AA00F556E0 /* Embed App Extensions */ = {
|
2FD21F0625A363AA00F556E0 /* Embed Foundation Extensions */ = {
|
||||||
isa = PBXCopyFilesBuildPhase;
|
isa = PBXCopyFilesBuildPhase;
|
||||||
buildActionMask = 12;
|
buildActionMask = 12;
|
||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 13;
|
dstSubfolderSpec = 13;
|
||||||
files = (
|
files = (
|
||||||
2FD21F1625A363E300F556E0 /* PacketTunnel.appex in Embed App Extensions */,
|
2FD21F1625A363E300F556E0 /* PacketTunnel.appex in Embed Foundation Extensions */,
|
||||||
);
|
);
|
||||||
name = "Embed App Extensions";
|
name = "Embed Foundation Extensions";
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
|
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
|
||||||
@@ -122,7 +124,9 @@
|
|||||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
C00A39D82C3E5F9D004E31E4 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
C09CB07F2C50A09A0028C461 /* TESWT.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TESWT.h; sourceTree = "<group>"; };
|
||||||
|
C09CB0802C50A09A0028C461 /* TESWT.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TESWT.m; sourceTree = "<group>"; };
|
||||||
|
C09CB0832C50A0DD0028C461 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
C0CB10F52C3275EE00A1F217 /* leaf.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = leaf.xcframework; sourceTree = "<group>"; };
|
C0CB10F52C3275EE00A1F217 /* leaf.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = leaf.xcframework; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@@ -143,6 +147,7 @@
|
|||||||
C0CB10F62C3275EE00A1F217 /* leaf.xcframework in Frameworks */,
|
C0CB10F62C3275EE00A1F217 /* leaf.xcframework in Frameworks */,
|
||||||
2FD21F2425A364B700F556E0 /* NetworkExtension.framework in Frameworks */,
|
2FD21F2425A364B700F556E0 /* NetworkExtension.framework in Frameworks */,
|
||||||
DBC6F25A26C78B1D91884CE1 /* Pods_Runner.framework in Frameworks */,
|
DBC6F25A26C78B1D91884CE1 /* Pods_Runner.framework in Frameworks */,
|
||||||
|
E2B5FEC68AAAE043A3080A59 /* Pods_Runner.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -235,7 +240,9 @@
|
|||||||
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
|
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
|
||||||
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
|
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
|
||||||
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
|
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
|
||||||
C00A39D82C3E5F9D004E31E4 /* Runner-Bridging-Header.h */,
|
C09CB0832C50A0DD0028C461 /* Runner-Bridging-Header.h */,
|
||||||
|
C09CB07F2C50A09A0028C461 /* TESWT.h */,
|
||||||
|
C09CB0802C50A09A0028C461 /* TESWT.m */,
|
||||||
);
|
);
|
||||||
path = Runner;
|
path = Runner;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -277,7 +284,7 @@
|
|||||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
4A4528B4E4B302F57B5EDB65 /* [CP] Check Pods Manifest.lock */,
|
4A4528B4E4B302F57B5EDB65 /* [CP] Check Pods Manifest.lock */,
|
||||||
2FD21F0625A363AA00F556E0 /* Embed App Extensions */,
|
2FD21F0625A363AA00F556E0 /* Embed Foundation Extensions */,
|
||||||
97C146EA1CF9000F007C117D /* Sources */,
|
97C146EA1CF9000F007C117D /* Sources */,
|
||||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
97C146EB1CF9000F007C117D /* Frameworks */,
|
||||||
97C146EC1CF9000F007C117D /* Resources */,
|
97C146EC1CF9000F007C117D /* Resources */,
|
||||||
@@ -302,6 +309,7 @@
|
|||||||
97C146E61CF9000F007C117D /* Project object */ = {
|
97C146E61CF9000F007C117D /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
|
BuildIndependentTargetsInParallel = YES;
|
||||||
LastSwiftUpdateCheck = 1230;
|
LastSwiftUpdateCheck = 1230;
|
||||||
LastUpgradeCheck = 1510;
|
LastUpgradeCheck = 1510;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
@@ -454,6 +462,7 @@
|
|||||||
3EA6B280293F6AB900B2BABC /* URL+Helpers.swift in Sources */,
|
3EA6B280293F6AB900B2BABC /* URL+Helpers.swift in Sources */,
|
||||||
3EA6B27F293F6AB500B2BABC /* FileManager+Helpers.swift in Sources */,
|
3EA6B27F293F6AB500B2BABC /* FileManager+Helpers.swift in Sources */,
|
||||||
3EA6B27C293F68B500B2BABC /* VPNManager.swift in Sources */,
|
3EA6B27C293F68B500B2BABC /* VPNManager.swift in Sources */,
|
||||||
|
C09CB0812C50A09A0028C461 /* TESWT.m in Sources */,
|
||||||
3E06F989293FAFC600E04D92 /* LeafAdapter.swift in Sources */,
|
3E06F989293FAFC600E04D92 /* LeafAdapter.swift in Sources */,
|
||||||
3E06F985293FACBB00E04D92 /* PacketTunnelProvider.swift in Sources */,
|
3E06F985293FACBB00E04D92 /* PacketTunnelProvider.swift in Sources */,
|
||||||
3E06F98C293FB8F600E04D92 /* TunnelConfiguration.swift in Sources */,
|
3E06F98C293FB8F600E04D92 /* TunnelConfiguration.swift in Sources */,
|
||||||
@@ -514,6 +523,7 @@
|
|||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
@@ -525,6 +535,7 @@
|
|||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
@@ -582,7 +593,6 @@
|
|||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||||
SWIFT_INCLUDE_PATHS = "";
|
SWIFT_INCLUDE_PATHS = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 1;
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
@@ -735,6 +745,7 @@
|
|||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
@@ -746,6 +757,7 @@
|
|||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
@@ -793,6 +805,7 @@
|
|||||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
@@ -804,6 +817,7 @@
|
|||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
@@ -863,7 +877,6 @@
|
|||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||||
SWIFT_INCLUDE_PATHS = "";
|
SWIFT_INCLUDE_PATHS = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 1;
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
@@ -909,7 +922,6 @@
|
|||||||
SUPPORTS_MACCATALYST = NO;
|
SUPPORTS_MACCATALYST = NO;
|
||||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
|
||||||
SWIFT_INCLUDE_PATHS = "";
|
SWIFT_INCLUDE_PATHS = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = 1;
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
VERSIONING_SYSTEM = "apple-generic";
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>PreviewsEnabled</key>
|
|
||||||
<false/>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
||||||
@@ -1,12 +1 @@
|
|||||||
//
|
|
||||||
// Runner-Bridging-Header.h
|
|
||||||
// Runner
|
|
||||||
//
|
|
||||||
// Created by Zeus on 2024/7/10.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef Runner_Bridging_Header_h
|
|
||||||
#define Runner_Bridging_Header_h
|
|
||||||
|
|
||||||
#import "GeneratedPluginRegistrant.h"
|
#import "GeneratedPluginRegistrant.h"
|
||||||
#endif /* Runner_Bridging_Header_h */
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// TESWT.h
|
||||||
|
// Runner
|
||||||
|
//
|
||||||
|
// Created by Zeus on 2024/7/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface TESWT : NSObject
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// TESWT.m
|
||||||
|
// Runner
|
||||||
|
//
|
||||||
|
// Created by Zeus on 2024/7/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "TESWT.h"
|
||||||
|
|
||||||
|
@implementation TESWT
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No error.
|
||||||
|
*/
|
||||||
|
#define ERR_OK 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config path error.
|
||||||
|
*/
|
||||||
|
#define ERR_CONFIG_PATH 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config parsing error.
|
||||||
|
*/
|
||||||
|
#define ERR_CONFIG 2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IO error.
|
||||||
|
*/
|
||||||
|
#define ERR_IO 3
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config file watcher error.
|
||||||
|
*/
|
||||||
|
#define ERR_WATCHER 4
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Async channel send error.
|
||||||
|
*/
|
||||||
|
#define ERR_ASYNC_CHANNEL_SEND 5
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sync channel receive error.
|
||||||
|
*/
|
||||||
|
#define ERR_SYNC_CHANNEL_RECV 6
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runtime manager error.
|
||||||
|
*/
|
||||||
|
#define ERR_RUNTIME_MANAGER 7
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No associated config file.
|
||||||
|
*/
|
||||||
|
#define ERR_NO_CONFIG_FILE 8
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts leaf with options, on a successful start this function blocks the current
|
||||||
|
* thread.
|
||||||
|
*
|
||||||
|
* @note This is not a stable API, parameters will change from time to time.
|
||||||
|
*
|
||||||
|
* @param rt_id A unique ID to associate this leaf instance, this is required when
|
||||||
|
* calling subsequent FFI functions, e.g. reload, shutdown.
|
||||||
|
* @param config_path The path of the config file, must be a file with suffix .conf
|
||||||
|
* or .json, according to the enabled features.
|
||||||
|
* @param auto_reload Enabls auto reloading when config file changes are detected,
|
||||||
|
* takes effect only when the "auto-reload" feature is enabled.
|
||||||
|
* @param multi_thread Whether to use a multi-threaded runtime.
|
||||||
|
* @param auto_threads Sets the number of runtime worker threads automatically,
|
||||||
|
* takes effect only when multi_thread is true.
|
||||||
|
* @param threads Sets the number of runtime worker threads, takes effect when
|
||||||
|
* multi_thread is true, but can be overridden by auto_threads.
|
||||||
|
* @param stack_size Sets stack size of the runtime worker threads, takes effect when
|
||||||
|
* multi_thread is true.
|
||||||
|
* @return ERR_OK on finish running, any other errors means a startup failure.
|
||||||
|
*/
|
||||||
|
int32_t leaf_run_with_options(uint16_t rt_id,
|
||||||
|
const char *config_path,
|
||||||
|
bool auto_reload,
|
||||||
|
bool multi_thread,
|
||||||
|
bool auto_threads,
|
||||||
|
int32_t threads,
|
||||||
|
int32_t stack_size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts leaf with a single-threaded runtime, on a successful start this function
|
||||||
|
* blocks the current thread.
|
||||||
|
*
|
||||||
|
* @param rt_id A unique ID to associate this leaf instance, this is required when
|
||||||
|
* calling subsequent FFI functions, e.g. reload, shutdown.
|
||||||
|
* @param config_path The path of the config file, must be a file with suffix .conf
|
||||||
|
* or .json, according to the enabled features.
|
||||||
|
* @return ERR_OK on finish running, any other errors means a startup failure.
|
||||||
|
*/
|
||||||
|
int32_t leaf_run(uint16_t rt_id, const char *config_path);
|
||||||
|
|
||||||
|
int32_t leaf_run_with_config_string(uint16_t rt_id, const char *config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reloads DNS servers, outbounds and routing rules from the config file.
|
||||||
|
*
|
||||||
|
* @param rt_id The ID of the leaf instance to reload.
|
||||||
|
*
|
||||||
|
* @return Returns ERR_OK on success.
|
||||||
|
*/
|
||||||
|
int32_t leaf_reload(uint16_t rt_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuts down leaf.
|
||||||
|
*
|
||||||
|
* @param rt_id The ID of the leaf instance to reload.
|
||||||
|
*
|
||||||
|
* @return Returns true on success, false otherwise.
|
||||||
|
*/
|
||||||
|
bool leaf_shutdown(uint16_t rt_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the configuration.
|
||||||
|
*
|
||||||
|
* @param config_path The path of the config file, must be a file with suffix .conf
|
||||||
|
* or .json, according to the enabled features.
|
||||||
|
* @return Returns ERR_OK on success, i.e no syntax error.
|
||||||
|
*/
|
||||||
|
int32_t leaf_test_config(const char *config_path);
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
module leaf {
|
||||||
|
header "leaf.h"
|
||||||
|
export *
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b096d095e15e182038fc425ded251522c6a8baa2eb2668d4636df54f5c9915e1
|
||||||
|
size 244040104
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No error.
|
||||||
|
*/
|
||||||
|
#define ERR_OK 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config path error.
|
||||||
|
*/
|
||||||
|
#define ERR_CONFIG_PATH 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config parsing error.
|
||||||
|
*/
|
||||||
|
#define ERR_CONFIG 2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IO error.
|
||||||
|
*/
|
||||||
|
#define ERR_IO 3
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config file watcher error.
|
||||||
|
*/
|
||||||
|
#define ERR_WATCHER 4
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Async channel send error.
|
||||||
|
*/
|
||||||
|
#define ERR_ASYNC_CHANNEL_SEND 5
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sync channel receive error.
|
||||||
|
*/
|
||||||
|
#define ERR_SYNC_CHANNEL_RECV 6
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runtime manager error.
|
||||||
|
*/
|
||||||
|
#define ERR_RUNTIME_MANAGER 7
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No associated config file.
|
||||||
|
*/
|
||||||
|
#define ERR_NO_CONFIG_FILE 8
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts leaf with options, on a successful start this function blocks the current
|
||||||
|
* thread.
|
||||||
|
*
|
||||||
|
* @note This is not a stable API, parameters will change from time to time.
|
||||||
|
*
|
||||||
|
* @param rt_id A unique ID to associate this leaf instance, this is required when
|
||||||
|
* calling subsequent FFI functions, e.g. reload, shutdown.
|
||||||
|
* @param config_path The path of the config file, must be a file with suffix .conf
|
||||||
|
* or .json, according to the enabled features.
|
||||||
|
* @param auto_reload Enabls auto reloading when config file changes are detected,
|
||||||
|
* takes effect only when the "auto-reload" feature is enabled.
|
||||||
|
* @param multi_thread Whether to use a multi-threaded runtime.
|
||||||
|
* @param auto_threads Sets the number of runtime worker threads automatically,
|
||||||
|
* takes effect only when multi_thread is true.
|
||||||
|
* @param threads Sets the number of runtime worker threads, takes effect when
|
||||||
|
* multi_thread is true, but can be overridden by auto_threads.
|
||||||
|
* @param stack_size Sets stack size of the runtime worker threads, takes effect when
|
||||||
|
* multi_thread is true.
|
||||||
|
* @return ERR_OK on finish running, any other errors means a startup failure.
|
||||||
|
*/
|
||||||
|
int32_t leaf_run_with_options(uint16_t rt_id,
|
||||||
|
const char *config_path,
|
||||||
|
bool auto_reload,
|
||||||
|
bool multi_thread,
|
||||||
|
bool auto_threads,
|
||||||
|
int32_t threads,
|
||||||
|
int32_t stack_size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts leaf with a single-threaded runtime, on a successful start this function
|
||||||
|
* blocks the current thread.
|
||||||
|
*
|
||||||
|
* @param rt_id A unique ID to associate this leaf instance, this is required when
|
||||||
|
* calling subsequent FFI functions, e.g. reload, shutdown.
|
||||||
|
* @param config_path The path of the config file, must be a file with suffix .conf
|
||||||
|
* or .json, according to the enabled features.
|
||||||
|
* @return ERR_OK on finish running, any other errors means a startup failure.
|
||||||
|
*/
|
||||||
|
int32_t leaf_run(uint16_t rt_id, const char *config_path);
|
||||||
|
|
||||||
|
int32_t leaf_run_with_config_string(uint16_t rt_id, const char *config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reloads DNS servers, outbounds and routing rules from the config file.
|
||||||
|
*
|
||||||
|
* @param rt_id The ID of the leaf instance to reload.
|
||||||
|
*
|
||||||
|
* @return Returns ERR_OK on success.
|
||||||
|
*/
|
||||||
|
int32_t leaf_reload(uint16_t rt_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuts down leaf.
|
||||||
|
*
|
||||||
|
* @param rt_id The ID of the leaf instance to reload.
|
||||||
|
*
|
||||||
|
* @return Returns true on success, false otherwise.
|
||||||
|
*/
|
||||||
|
bool leaf_shutdown(uint16_t rt_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the configuration.
|
||||||
|
*
|
||||||
|
* @param config_path The path of the config file, must be a file with suffix .conf
|
||||||
|
* or .json, according to the enabled features.
|
||||||
|
* @return Returns ERR_OK on success, i.e no syntax error.
|
||||||
|
*/
|
||||||
|
int32_t leaf_test_config(const char *config_path);
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
module leaf {
|
||||||
|
header "leaf.h"
|
||||||
|
export *
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ac6fe5534179bc17f4c486b3964a06e99e6a4902247694137ff1ea534472ac36
|
||||||
|
size 246092480
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:sail/channels/Platform.dart';
|
import 'package:uuvpn/channels/Platform.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
|
|
||||||
enum VpnStatus {
|
enum VpnStatus {
|
||||||
connected(code: 2),
|
connected(code: 2),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*后台接口api*/
|
/*后台接口api*/
|
||||||
import 'package:sail/common/public.dart';
|
import 'package:uuvpn/common/public.dart';
|
||||||
|
|
||||||
class Apis {
|
class Apis {
|
||||||
static String appid = "IPOSih2134KHJKLDIO";
|
static String appid = "IPOSih2134KHJKLDIO";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:sail/common/public.dart';
|
import 'package:uuvpn/common/public.dart';
|
||||||
import 'error_interceptor.dart';
|
import 'error_interceptor.dart';
|
||||||
|
|
||||||
class Http {
|
class Http {
|
||||||
@@ -19,9 +19,9 @@ class Http {
|
|||||||
if (dio == null) {
|
if (dio == null) {
|
||||||
// BaseOptions、Options、RequestOptions 都可以配置参数,优先级别依次递增,且可以根据优先级别覆盖参数
|
// BaseOptions、Options、RequestOptions 都可以配置参数,优先级别依次递增,且可以根据优先级别覆盖参数
|
||||||
BaseOptions options = new BaseOptions(
|
BaseOptions options = new BaseOptions(
|
||||||
connectTimeout: CONNECT_TIMEOUT,
|
connectTimeout: Duration(seconds: CONNECT_TIMEOUT),
|
||||||
// 响应流上前后两次接受到数据的间隔,单位为毫秒。
|
// 响应流上前后两次接受到数据的间隔,单位为毫秒。
|
||||||
receiveTimeout: RECEIVE_TIMEOUT,
|
receiveTimeout: Duration(seconds: RECEIVE_TIMEOUT),
|
||||||
headers: {},
|
headers: {},
|
||||||
);
|
);
|
||||||
if (options.contentType != null &&
|
if (options.contentType != null &&
|
||||||
@@ -64,8 +64,8 @@ class Http {
|
|||||||
List<Interceptor>? interceptors}) {
|
List<Interceptor>? interceptors}) {
|
||||||
dio!.options = dio!.options.copyWith(
|
dio!.options = dio!.options.copyWith(
|
||||||
baseUrl: baseUrl,
|
baseUrl: baseUrl,
|
||||||
connectTimeout: connectTimeout,
|
connectTimeout: Duration(seconds: connectTimeout ?? 0),
|
||||||
receiveTimeout: receiveTimeout,
|
receiveTimeout: Duration(seconds: receiveTimeout ?? 0),
|
||||||
);
|
);
|
||||||
if (interceptors != null && interceptors.isNotEmpty) {
|
if (interceptors != null && interceptors.isNotEmpty) {
|
||||||
dio!.interceptors.addAll(interceptors);
|
dio!.interceptors.addAll(interceptors);
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ class DioHttpException implements Exception {
|
|||||||
return "$code$message";
|
return "$code$message";
|
||||||
}
|
}
|
||||||
|
|
||||||
factory DioHttpException.create(DioError error) {
|
factory DioHttpException.create(DioException error) {
|
||||||
switch (error.type) {
|
switch (error.type) {
|
||||||
case DioErrorType.other:
|
case DioExceptionType.unknown:
|
||||||
{
|
{
|
||||||
// 网络异常
|
// 网络异常
|
||||||
return BadRequestException(-2, "无网络");
|
return BadRequestException(-2, "无网络");
|
||||||
@@ -27,7 +27,7 @@ class DioHttpException implements Exception {
|
|||||||
return BadRequestException(-1, "请求取消");
|
return BadRequestException(-1, "请求取消");
|
||||||
}
|
}
|
||||||
|
|
||||||
case DioErrorType.connectTimeout:
|
case DioErrorType.connectionTimeout:
|
||||||
{
|
{
|
||||||
return BadRequestException(-1, "连接超时");
|
return BadRequestException(-1, "连接超时");
|
||||||
}
|
}
|
||||||
@@ -42,7 +42,7 @@ class DioHttpException implements Exception {
|
|||||||
return BadRequestException(-1, "响应超时");
|
return BadRequestException(-1, "响应超时");
|
||||||
}
|
}
|
||||||
|
|
||||||
case DioErrorType.response:
|
case DioErrorType.badResponse:
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
int? errCode = error.response!.statusCode;
|
int? errCode = error.response!.statusCode;
|
||||||
|
|||||||
@@ -3,16 +3,16 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter/services.dart' as services;
|
import 'package:flutter/services.dart' as services;
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/plan_model.dart';
|
import 'package:uuvpn/models/plan_model.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:sail/models/user_subscribe_model.dart';
|
import 'package:uuvpn/models/user_subscribe_model.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/router/routers.dart';
|
import 'package:uuvpn/router/routers.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
import 'model/UserPreference.dart';
|
import 'model/UserPreference.dart';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// ignore_for_file: file_names
|
// ignore_for_file: file_names
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/resources/app_theme.dart';
|
import 'package:uuvpn/resources/app_theme.dart';
|
||||||
|
|
||||||
class ThemeCollection extends ChangeNotifier {
|
class ThemeCollection extends ChangeNotifier {
|
||||||
/// _colorSwatch method or function take RGB color as argument and after processing
|
/// _colorSwatch method or function take RGB color as argument and after processing
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:sail/adapters/leaf_ffi/config.dart';
|
import 'package:uuvpn/adapters/leaf_ffi/config.dart';
|
||||||
import 'package:sail/channels/Platform.dart';
|
import 'package:uuvpn/channels/Platform.dart';
|
||||||
import 'package:sail/channels/vpn_manager.dart';
|
import 'package:uuvpn/channels/vpn_manager.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:sail/models/base_model.dart';
|
import 'package:uuvpn/models/base_model.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
|
|
||||||
class AppModel extends BaseModel {
|
class AppModel extends BaseModel {
|
||||||
VpnManager vpnManager = VpnManager();
|
VpnManager vpnManager = VpnManager();
|
||||||
@@ -174,17 +174,17 @@ class AppModel extends BaseModel {
|
|||||||
|
|
||||||
void setConfigRule(String tag) async {
|
void setConfigRule(String tag) async {
|
||||||
var proxy = config.proxies?.where((proxies) => proxies.tag == tag);
|
var proxy = config.proxies?.where((proxies) => proxies.tag == tag);
|
||||||
|
|
||||||
if (proxy == null || proxy.isEmpty) {
|
if (proxy == null || proxy.isEmpty) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
config.rules?.last.target = tag;
|
config.rules?.last.target = tag;
|
||||||
|
|
||||||
print("-----------------config-----------------");
|
print("-----------------config-----------------");
|
||||||
print(config);
|
print(config);
|
||||||
print("-----------------config-----------------");
|
print("-----------------config-----------------");
|
||||||
|
|
||||||
vpnManager.setTunnelConfiguration(config.toString());
|
vpnManager.setTunnelConfiguration(config.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/models/page_state.dart';
|
import 'package:uuvpn/models/page_state.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
|
|
||||||
class BaseModel extends ChangeNotifier {
|
class BaseModel extends ChangeNotifier {
|
||||||
PageState pageState = PageState.loading;
|
PageState pageState = PageState.loading;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:sail/models/base_model.dart';
|
import 'package:uuvpn/models/base_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/service/user_service.dart';
|
import 'package:uuvpn/service/user_service.dart';
|
||||||
|
|
||||||
class LoginModel extends BaseModel {
|
class LoginModel extends BaseModel {
|
||||||
final UserService _userService = UserService();
|
final UserService _userService = UserService();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:sail/entity/plan_entity.dart';
|
import 'package:uuvpn/entity/plan_entity.dart';
|
||||||
import 'package:sail/models/base_model.dart';
|
import 'package:uuvpn/models/base_model.dart';
|
||||||
import 'package:sail/service/plan_service.dart';
|
import 'package:uuvpn/service/plan_service.dart';
|
||||||
|
|
||||||
class PlanModel extends BaseModel {
|
class PlanModel extends BaseModel {
|
||||||
final PlanService _planService = PlanService();
|
final PlanService _planService = PlanService();
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ import 'dart:convert';
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter_icmp_ping/flutter_icmp_ping.dart';
|
import 'package:flutter_icmp_ping/flutter_icmp_ping.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:sail/entity/server_entity.dart';
|
import 'package:uuvpn/entity/server_entity.dart';
|
||||||
import 'package:sail/models/base_model.dart';
|
import 'package:uuvpn/models/base_model.dart';
|
||||||
import 'package:sail/service/server_service.dart';
|
import 'package:uuvpn/service/server_service.dart';
|
||||||
import 'package:sail/utils/shared_preferences_util.dart';
|
import 'package:uuvpn/utils/shared_preferences_util.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
|
|
||||||
enum PingType { ping, tcp }
|
enum PingType { ping, tcp }
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:sail/entity/login_entity.dart';
|
import 'package:uuvpn/entity/login_entity.dart';
|
||||||
import 'package:sail/entity/user_entity.dart';
|
import 'package:uuvpn/entity/user_entity.dart';
|
||||||
import 'package:sail/models/base_model.dart';
|
import 'package:uuvpn/models/base_model.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:sail/utils/shared_preferences_util.dart';
|
import 'package:uuvpn/utils/shared_preferences_util.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
class UserModel extends BaseModel {
|
class UserModel extends BaseModel {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:sail/entity/user_subscribe_entity.dart';
|
import 'package:uuvpn/entity/user_subscribe_entity.dart';
|
||||||
import 'package:sail/models/base_model.dart';
|
import 'package:uuvpn/models/base_model.dart';
|
||||||
import 'package:sail/service/user_service.dart';
|
import 'package:uuvpn/service/user_service.dart';
|
||||||
import 'package:sail/utils/shared_preferences_util.dart';
|
import 'package:uuvpn/utils/shared_preferences_util.dart';
|
||||||
|
|
||||||
class UserSubscribeModel extends BaseModel {
|
class UserSubscribeModel extends BaseModel {
|
||||||
UserSubscribeEntity? _userSubscribeEntity;
|
UserSubscribeEntity? _userSubscribeEntity;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/constant/app_images.dart';
|
import 'package:uuvpn/constant/app_images.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
|
|
||||||
|
|
||||||
class NotFindPage extends StatelessWidget {
|
class NotFindPage extends StatelessWidget {
|
||||||
const NotFindPage({Key? key}) : super(key: key);
|
const NotFindPage({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
//ProOnecePage.dart
|
//ProOnecePage.dart
|
||||||
//ignore_for_file: file_names
|
//ignore_for_file: file_names
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
|
|
||||||
import '/model/themeCollection.dart';
|
import '/model/themeCollection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
//ignore_for_file: file_names
|
//ignore_for_file: file_names
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/plan_model.dart';
|
import 'package:uuvpn/models/plan_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/models/user_subscribe_model.dart';
|
import 'package:uuvpn/models/user_subscribe_model.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:sail/widgets/logo_bar.dart';
|
import 'package:uuvpn/widgets/logo_bar.dart';
|
||||||
import 'package:sail/widgets/my_subscribe.dart';
|
import 'package:uuvpn/widgets/my_subscribe.dart';
|
||||||
import 'package:sail/widgets/plan_list.dart';
|
import 'package:uuvpn/widgets/plan_list.dart';
|
||||||
|
|
||||||
import '/routes/proRoute.dart';
|
import '/routes/proRoute.dart';
|
||||||
import '/routes/settingsRoute.dart';
|
import '/routes/settingsRoute.dart';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:crisp/crisp.dart';
|
import 'package:crisp/crisp.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
|
|
||||||
class CrispPage extends StatefulWidget {
|
class CrispPage extends StatefulWidget {
|
||||||
const CrispPage({Key? key}) : super(key: key);
|
const CrispPage({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -5,31 +5,31 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/constant/app_dimens.dart';
|
import 'package:uuvpn/constant/app_dimens.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/plan_model.dart';
|
import 'package:uuvpn/models/plan_model.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/models/user_subscribe_model.dart';
|
import 'package:uuvpn/models/user_subscribe_model.dart';
|
||||||
import 'package:sail/pages/accountPage.dart';
|
import 'package:uuvpn/pages/accountPage.dart';
|
||||||
import 'package:sail/pages/homePage.dart';
|
import 'package:uuvpn/pages/homePage.dart';
|
||||||
import 'package:sail/pages/my_profile.dart';
|
import 'package:uuvpn/pages/my_profile.dart';
|
||||||
import 'package:sail/pages/plan/plan_page.dart';
|
import 'package:uuvpn/pages/plan/plan_page.dart';
|
||||||
import 'package:sail/pages/proPage.dart';
|
import 'package:uuvpn/pages/proPage.dart';
|
||||||
import 'package:sail/pages/server_list.dart';
|
import 'package:uuvpn/pages/server_list.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/routes/OnceNotice.dart';
|
import 'package:uuvpn/routes/OnceNotice.dart';
|
||||||
import 'package:sail/routes/proRoute.dart';
|
import 'package:uuvpn/routes/proRoute.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/message_util.dart';
|
import 'package:uuvpn/utils/message_util.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:sail/widgets/ProgressView.dart';
|
import 'package:uuvpn/widgets/ProgressView.dart';
|
||||||
import 'package:sail/widgets/home_widget.dart';
|
import 'package:uuvpn/widgets/home_widget.dart';
|
||||||
import 'package:sail/widgets/power_btn.dart';
|
import 'package:uuvpn/widgets/power_btn.dart';
|
||||||
import 'package:sail/widgets/sail_app_bar.dart';
|
import 'package:uuvpn/widgets/sail_app_bar.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_login/flutter_login.dart';
|
import 'package:flutter_login/flutter_login.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/login_model.dart';
|
import 'package:uuvpn/models/login_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/service/user_service.dart';
|
import 'package:uuvpn/service/user_service.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
|
|
||||||
class LoginPage extends StatefulWidget {
|
class LoginPage extends StatefulWidget {
|
||||||
const LoginPage({Key? key}) : super(key: key);
|
const LoginPage({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ import 'package:flutter/cupertino.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/service/user_service.dart';
|
import 'package:uuvpn/service/user_service.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:sail/widgets/bottom_block.dart';
|
import 'package:uuvpn/widgets/bottom_block.dart';
|
||||||
import 'package:sail/widgets/profile_widget.dart';
|
import 'package:uuvpn/widgets/profile_widget.dart';
|
||||||
|
|
||||||
class MyProfile extends StatefulWidget {
|
class MyProfile extends StatefulWidget {
|
||||||
const MyProfile({Key? key}) : super(key: key);
|
const MyProfile({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import 'package:sail/widgets/sliding_cards.dart';
|
import 'package:uuvpn/widgets/sliding_cards.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class PlanPage extends StatelessWidget {
|
class PlanPage extends StatelessWidget {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
//ignore_for_file: file_names
|
//ignore_for_file: file_names
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
|
|
||||||
import '/model/themeCollection.dart';
|
import '/model/themeCollection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|||||||
@@ -2,13 +2,13 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
|
|
||||||
class ServerListPage extends StatefulWidget {
|
class ServerListPage extends StatefulWidget {
|
||||||
const ServerListPage({Key? key}) : super(key: key);
|
const ServerListPage({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:webview_flutter/webview_flutter.dart';
|
import 'package:webview_flutter/webview_flutter.dart';
|
||||||
|
|
||||||
class WebViewWidget extends StatefulWidget {
|
class WebViewWidget extends StatefulWidget {
|
||||||
@@ -37,7 +37,8 @@ class WebViewWidgetState extends State<WebViewWidget> {
|
|||||||
centerTitle: true,
|
centerTitle: true,
|
||||||
),
|
),
|
||||||
body: WebView(
|
body: WebView(
|
||||||
initialUrl: widget.url?.isEmpty == true ? AppStrings.appName : widget.url,
|
initialUrl:
|
||||||
|
widget.url?.isEmpty == true ? AppStrings.appName : widget.url,
|
||||||
javascriptMode: JavascriptMode.unrestricted,
|
javascriptMode: JavascriptMode.unrestricted,
|
||||||
onWebViewCreated: (controller) => this.controller = controller,
|
onWebViewCreated: (controller) => this.controller = controller,
|
||||||
onPageFinished: (url) {
|
onPageFinished: (url) {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:sail/resources/app_colors.dart';
|
import 'package:uuvpn/resources/app_colors.dart';
|
||||||
import 'package:sail/resources/app_typography.dart';
|
import 'package:uuvpn/resources/app_typography.dart';
|
||||||
|
|
||||||
ThemeData getApplicationTheme() {
|
ThemeData getApplicationTheme() {
|
||||||
return ThemeData(
|
return ThemeData(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'package:fluro/fluro.dart';
|
import 'package:fluro/fluro.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
|
|
||||||
class Application {
|
class Application {
|
||||||
static FluroRouter? router;
|
static FluroRouter? router;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import 'package:fluro/fluro.dart';
|
import 'package:fluro/fluro.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/pages/accountPage.dart';
|
import 'package:uuvpn/pages/accountPage.dart';
|
||||||
import 'package:sail/pages/home/home_page.dart';
|
import 'package:uuvpn/pages/home/home_page.dart';
|
||||||
import 'package:sail/pages/404/not_find_page.dart';
|
import 'package:uuvpn/pages/404/not_find_page.dart';
|
||||||
import 'package:sail/pages/login/login_page.dart';
|
import 'package:uuvpn/pages/login/login_page.dart';
|
||||||
import 'package:sail/pages/plan/plan_page.dart';
|
import 'package:uuvpn/pages/plan/plan_page.dart';
|
||||||
import 'package:sail/pages/server_list.dart';
|
import 'package:uuvpn/pages/server_list.dart';
|
||||||
import 'package:sail/pages/webview_widget.dart';
|
import 'package:uuvpn/pages/webview_widget.dart';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
/// 入口
|
/// 入口
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import 'package:fluro/fluro.dart';
|
import 'package:fluro/fluro.dart';
|
||||||
import 'package:sail/router/router_handlers.dart';
|
import 'package:uuvpn/router/router_handlers.dart';
|
||||||
|
|
||||||
class Routers {
|
class Routers {
|
||||||
static String home = "/";
|
static String home = "/";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// OnceNotice.dart
|
// OnceNotice.dart
|
||||||
//ignore_for_file: file_names
|
//ignore_for_file: file_names
|
||||||
import 'package:sail/pages/ProOnecePage.dart';
|
import 'package:uuvpn/pages/ProOnecePage.dart';
|
||||||
|
|
||||||
import '/pages/proPage.dart';
|
import '/pages/proPage.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
//ignore_for_file: file_names
|
//ignore_for_file: file_names
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/routes/proRoute.dart';
|
import 'package:uuvpn/routes/proRoute.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
import '../model/themeCollection.dart';
|
import '../model/themeCollection.dart';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:sail/constant/app_urls.dart';
|
import 'package:uuvpn/constant/app_urls.dart';
|
||||||
import 'package:sail/entity/plan_entity.dart';
|
import 'package:uuvpn/entity/plan_entity.dart';
|
||||||
import 'package:sail/utils/http_util.dart';
|
import 'package:uuvpn/utils/http_util.dart';
|
||||||
|
|
||||||
class PlanService {
|
class PlanService {
|
||||||
Future<List<PlanEntity>>? plan() {
|
Future<List<PlanEntity>>? plan() {
|
||||||
@@ -10,7 +10,8 @@ class PlanService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<PlanEntity>? planDetail(int id) {
|
Future<PlanEntity>? planDetail(int id) {
|
||||||
return HttpUtil.instance?.get(AppUrls.plan, parameters: {'id': id}).then((result) {
|
return HttpUtil.instance
|
||||||
|
?.get(AppUrls.plan, parameters: {'id': id}).then((result) {
|
||||||
return PlanEntity.fromMap(result['data']);
|
return PlanEntity.fromMap(result['data']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:sail/constant/app_urls.dart';
|
import 'package:uuvpn/constant/app_urls.dart';
|
||||||
import 'package:sail/entity/server_entity.dart';
|
import 'package:uuvpn/entity/server_entity.dart';
|
||||||
import 'package:sail/utils/http_util.dart';
|
import 'package:uuvpn/utils/http_util.dart';
|
||||||
|
|
||||||
class ServerService {
|
class ServerService {
|
||||||
Future<List<ServerEntity>> server() {
|
Future<List<ServerEntity>> server() {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'package:sail/constant/app_urls.dart';
|
import 'package:uuvpn/constant/app_urls.dart';
|
||||||
import 'package:sail/entity/login_entity.dart';
|
import 'package:uuvpn/entity/login_entity.dart';
|
||||||
import 'package:sail/entity/user_entity.dart';
|
import 'package:uuvpn/entity/user_entity.dart';
|
||||||
import 'package:sail/entity/user_subscribe_entity.dart';
|
import 'package:uuvpn/entity/user_subscribe_entity.dart';
|
||||||
import 'package:sail/utils/http_util.dart';
|
import 'package:uuvpn/utils/http_util.dart';
|
||||||
|
|
||||||
class UserService {
|
class UserService {
|
||||||
Future<LoginEntity>? login(Map<String, dynamic> parameters) {
|
Future<LoginEntity>? login(Map<String, dynamic> parameters) {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/router/routers.dart';
|
import 'package:uuvpn/router/routers.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
import 'package:sail/utils/shared_preferences_util.dart';
|
import 'package:uuvpn/utils/shared_preferences_util.dart';
|
||||||
|
|
||||||
class HttpUtil {
|
class HttpUtil {
|
||||||
static HttpUtil get instance => _httpUtil;
|
static HttpUtil get instance => _httpUtil;
|
||||||
@@ -12,8 +12,8 @@ class HttpUtil {
|
|||||||
|
|
||||||
HttpUtil() {
|
HttpUtil() {
|
||||||
BaseOptions options = BaseOptions(
|
BaseOptions options = BaseOptions(
|
||||||
connectTimeout: 10000,
|
connectTimeout: Duration(seconds: 10000),
|
||||||
receiveTimeout: 10000,
|
receiveTimeout: Duration(seconds: 10000),
|
||||||
);
|
);
|
||||||
dio = Dio(options);
|
dio = Dio(options);
|
||||||
dio.interceptors
|
dio.interceptors
|
||||||
@@ -53,10 +53,10 @@ class HttpUtil {
|
|||||||
Application.navigatorKey.currentState?.pushNamed(Routers.login);
|
Application.navigatorKey.currentState?.pushNamed(Routers.login);
|
||||||
}
|
}
|
||||||
|
|
||||||
return handler.reject(DioError(
|
return handler.reject(DioException(
|
||||||
requestOptions: response.requestOptions,
|
requestOptions: response.requestOptions,
|
||||||
response: response,
|
response: response,
|
||||||
type: DioErrorType.response));
|
type: DioExceptionType.badResponse));
|
||||||
}
|
}
|
||||||
|
|
||||||
return handler.next(response);
|
return handler.next(response);
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ import 'package:fluro/fluro.dart';
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||||
import 'package:sail/pages/accountPage.dart';
|
import 'package:uuvpn/pages/accountPage.dart';
|
||||||
import 'package:sail/pages/crisp_page.dart';
|
import 'package:uuvpn/pages/crisp_page.dart';
|
||||||
import 'package:sail/pages/plan/plan_page.dart';
|
import 'package:uuvpn/pages/plan/plan_page.dart';
|
||||||
import 'package:sail/pages/server_list.dart';
|
import 'package:uuvpn/pages/server_list.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/router/routers.dart';
|
import 'package:uuvpn/router/routers.dart';
|
||||||
|
|
||||||
class NavigatorUtil {
|
class NavigatorUtil {
|
||||||
static goHomePage(BuildContext context) {
|
static goHomePage(BuildContext context) {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
// import 'package:sail/go_router.dart';
|
// import 'package:uuvpn/go_router.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:sail/resources/app_colors.dart';
|
import 'package:uuvpn/resources/app_colors.dart';
|
||||||
import 'package:sail/resources/app_routes.dart';
|
import 'package:uuvpn/resources/app_routes.dart';
|
||||||
import 'package:sail/resources/app_values.dart';
|
import 'package:uuvpn/resources/app_values.dart';
|
||||||
|
|
||||||
String getDate(String? date) {
|
String getDate(String? date) {
|
||||||
if (date == null || date.isEmpty) {
|
if (date == null || date.isEmpty) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
|
|
||||||
class ProgressView extends StatelessWidget {
|
class ProgressView extends StatelessWidget {
|
||||||
const ProgressView({Key? key}) : super(key: key);
|
const ProgressView({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/channels/Platform.dart';
|
import 'package:uuvpn/channels/Platform.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
|
|
||||||
class ConnectionStats extends StatefulWidget {
|
class ConnectionStats extends StatefulWidget {
|
||||||
const ConnectionStats({Key? key}) : super(key: key);
|
const ConnectionStats({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -2,24 +2,24 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/plan_model.dart';
|
import 'package:uuvpn/models/plan_model.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/models/user_subscribe_model.dart';
|
import 'package:uuvpn/models/user_subscribe_model.dart';
|
||||||
import 'package:sail/resources/app_colors.dart';
|
import 'package:uuvpn/resources/app_colors.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/widgets/bottom_block.dart';
|
import 'package:uuvpn/widgets/bottom_block.dart';
|
||||||
import 'package:sail/widgets/connection_stats.dart';
|
import 'package:uuvpn/widgets/connection_stats.dart';
|
||||||
import 'package:sail/widgets/logo_bar.dart';
|
import 'package:uuvpn/widgets/logo_bar.dart';
|
||||||
import 'package:sail/widgets/my_subscribe.dart';
|
import 'package:uuvpn/widgets/my_subscribe.dart';
|
||||||
import 'package:sail/widgets/plan_list.dart';
|
import 'package:uuvpn/widgets/plan_list.dart';
|
||||||
import 'package:sail/widgets/power_btn.dart';
|
import 'package:uuvpn/widgets/power_btn.dart';
|
||||||
import 'package:sail/widgets/select_location.dart';
|
import 'package:uuvpn/widgets/select_location.dart';
|
||||||
import 'package:sail/utils/common_util.dart';
|
import 'package:uuvpn/utils/common_util.dart';
|
||||||
import 'package:sail/widgets/watermuticicel.dart';
|
import 'package:uuvpn/widgets/watermuticicel.dart';
|
||||||
|
|
||||||
class HomeWidget extends StatefulWidget {
|
class HomeWidget extends StatefulWidget {
|
||||||
const HomeWidget({Key? key}) : super(key: key);
|
const HomeWidget({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -2,13 +2,13 @@ import 'package:flutter/cupertino.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/constant/app_strings.dart';
|
import 'package:uuvpn/constant/app_strings.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/models/user_subscribe_model.dart';
|
import 'package:uuvpn/models/user_subscribe_model.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
|
|
||||||
class LogoBar extends StatelessWidget {
|
class LogoBar extends StatelessWidget {
|
||||||
const LogoBar({
|
const LogoBar({
|
||||||
|
|||||||
@@ -3,16 +3,16 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/entity/user_subscribe_entity.dart';
|
import 'package:uuvpn/entity/user_subscribe_entity.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/router/application.dart';
|
import 'package:uuvpn/router/application.dart';
|
||||||
import 'package:sail/routes/OnceNotice.dart';
|
import 'package:uuvpn/routes/OnceNotice.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:sail/utils/transfer_util.dart';
|
import 'package:uuvpn/utils/transfer_util.dart';
|
||||||
|
|
||||||
class MySubscribe extends StatefulWidget {
|
class MySubscribe extends StatefulWidget {
|
||||||
const MySubscribe(
|
const MySubscribe(
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/entity/plan_entity.dart';
|
import 'package:uuvpn/entity/plan_entity.dart';
|
||||||
import 'package:sail/entity/user_subscribe_entity.dart';
|
import 'package:uuvpn/entity/user_subscribe_entity.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
|
|
||||||
class PlanList extends StatefulWidget {
|
class PlanList extends StatefulWidget {
|
||||||
const PlanList(
|
const PlanList(
|
||||||
|
|||||||
@@ -2,16 +2,16 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/message_util.dart';
|
import 'package:uuvpn/utils/message_util.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
import 'package:sail/widgets/watermuticicel.dart';
|
import 'package:uuvpn/widgets/watermuticicel.dart';
|
||||||
import 'package:sail/widgets/waterrepper.dart';
|
import 'package:uuvpn/widgets/waterrepper.dart';
|
||||||
|
|
||||||
class PowerButton extends StatefulWidget {
|
class PowerButton extends StatefulWidget {
|
||||||
const PowerButton({Key? key}) : super(key: key);
|
const PowerButton({Key? key}) : super(key: key);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import 'dart:ui';
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
|
|
||||||
double minHeight = ScreenUtil().setHeight(260);
|
double minHeight = ScreenUtil().setHeight(260);
|
||||||
const double iconStartSize = 44;
|
const double iconStartSize = 44;
|
||||||
@@ -17,15 +17,19 @@ class RecentConnectionBottomSheet extends StatefulWidget {
|
|||||||
const RecentConnectionBottomSheet({Key? key}) : super(key: key);
|
const RecentConnectionBottomSheet({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
RecentConnectionBottomSheetState createState() => RecentConnectionBottomSheetState();
|
RecentConnectionBottomSheetState createState() =>
|
||||||
|
RecentConnectionBottomSheetState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet> with SingleTickerProviderStateMixin {
|
class RecentConnectionBottomSheetState
|
||||||
|
extends State<RecentConnectionBottomSheet>
|
||||||
|
with SingleTickerProviderStateMixin {
|
||||||
late AnimationController _controller;
|
late AnimationController _controller;
|
||||||
|
|
||||||
double get maxHeight => MediaQuery.of(context).size.height;
|
double get maxHeight => MediaQuery.of(context).size.height;
|
||||||
|
|
||||||
double? get headerTopMargin => lerp(20, 20 + MediaQuery.of(context).padding.top);
|
double? get headerTopMargin =>
|
||||||
|
lerp(20, 20 + MediaQuery.of(context).padding.top);
|
||||||
|
|
||||||
double? get headerFontSize => lerp(14, 24);
|
double? get headerFontSize => lerp(14, 24);
|
||||||
|
|
||||||
@@ -38,9 +42,12 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
|
|||||||
double? get iconSize => lerp(iconStartSize, iconEndSize);
|
double? get iconSize => lerp(iconStartSize, iconEndSize);
|
||||||
|
|
||||||
double? iconTopMargin(int index) =>
|
double? iconTopMargin(int index) =>
|
||||||
lerp(iconStartMarginTop, iconEndMarginTop + index * (iconsVerticalSpacing + iconEndSize))! + headerTopMargin!;
|
lerp(iconStartMarginTop,
|
||||||
|
iconEndMarginTop + index * (iconsVerticalSpacing + iconEndSize))! +
|
||||||
|
headerTopMargin!;
|
||||||
|
|
||||||
double? iconLeftMargin(int index) => lerp(index * (iconsHorizontalSpacing + iconStartSize), 0);
|
double? iconLeftMargin(int index) =>
|
||||||
|
lerp(index * (iconsHorizontalSpacing + iconStartSize), 0);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@@ -57,7 +64,8 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
|
|||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
double? lerp(double min, double max) => lerpDouble(min, max, _controller.value);
|
double? lerp(double min, double max) =>
|
||||||
|
lerpDouble(min, max, _controller.value);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@@ -77,7 +85,9 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
|
|||||||
padding: const EdgeInsets.symmetric(horizontal: 32),
|
padding: const EdgeInsets.symmetric(horizontal: 32),
|
||||||
decoration: const BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
gradient: LinearGradient(
|
gradient: LinearGradient(
|
||||||
colors: [AppColors.themeColor, Colors.pink], begin: Alignment.topLeft, end: Alignment.bottomRight),
|
colors: [AppColors.themeColor, Colors.pink],
|
||||||
|
begin: Alignment.topLeft,
|
||||||
|
end: Alignment.bottomRight),
|
||||||
borderRadius: BorderRadius.vertical(top: Radius.circular(32)),
|
borderRadius: BorderRadius.vertical(top: Radius.circular(32)),
|
||||||
),
|
),
|
||||||
child: Stack(
|
child: Stack(
|
||||||
@@ -142,9 +152,11 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _handleDragEnd(DragEndDetails details) {
|
void _handleDragEnd(DragEndDetails details) {
|
||||||
if (_controller.isAnimating || _controller.status == AnimationStatus.completed) return;
|
if (_controller.isAnimating ||
|
||||||
|
_controller.status == AnimationStatus.completed) return;
|
||||||
|
|
||||||
final double flingVelocity = details.velocity.pixelsPerSecond.dy / maxHeight;
|
final double flingVelocity =
|
||||||
|
details.velocity.pixelsPerSecond.dy / maxHeight;
|
||||||
if (flingVelocity < 0.0) {
|
if (flingVelocity < 0.0) {
|
||||||
_controller.fling(velocity: math.max(2.0, -flingVelocity));
|
_controller.fling(velocity: math.max(2.0, -flingVelocity));
|
||||||
} else if (flingVelocity > 0.0) {
|
} else if (flingVelocity > 0.0) {
|
||||||
@@ -256,7 +268,8 @@ class SheetHeader extends StatelessWidget {
|
|||||||
final double? fontSize;
|
final double? fontSize;
|
||||||
final double? topMargin;
|
final double? topMargin;
|
||||||
|
|
||||||
const SheetHeader({Key? key, required this.fontSize, required this.topMargin}) : super(key: key);
|
const SheetHeader({Key? key, required this.fontSize, required this.topMargin})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/models/app_model.dart';
|
import 'package:uuvpn/models/app_model.dart';
|
||||||
|
|
||||||
class SailAppBar extends AppBar {
|
class SailAppBar extends AppBar {
|
||||||
SailAppBar({Key? key, required this.appTitle})
|
SailAppBar({Key? key, required this.appTitle}) : super(key: key);
|
||||||
: super(key: key);
|
|
||||||
|
|
||||||
final String appTitle;
|
final String appTitle;
|
||||||
|
|
||||||
@@ -27,10 +26,12 @@ class SailAppBarState extends State<SailAppBar> {
|
|||||||
return AppBar(
|
return AppBar(
|
||||||
title: Text(
|
title: Text(
|
||||||
widget.appTitle,
|
widget.appTitle,
|
||||||
style: TextStyle(color: _appModel.isOn ? Colors.black : Colors.white, fontWeight: FontWeight.w900),
|
style: TextStyle(
|
||||||
|
color: _appModel.isOn ? Colors.black : Colors.white,
|
||||||
|
fontWeight: FontWeight.w900),
|
||||||
),
|
),
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
backgroundColor: _appModel.isOn ? AppColors.yellowColor : AppColors.grayColor
|
backgroundColor:
|
||||||
);
|
_appModel.isOn ? AppColors.yellowColor : AppColors.grayColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/constant/app_colors.dart';
|
import 'package:uuvpn/constant/app_colors.dart';
|
||||||
import 'package:sail/model/themeCollection.dart';
|
import 'package:uuvpn/model/themeCollection.dart';
|
||||||
import 'package:sail/models/server_model.dart';
|
import 'package:uuvpn/models/server_model.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/utils/l10n.dart';
|
import 'package:uuvpn/utils/l10n.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
|
|
||||||
class SelectLocation extends StatefulWidget {
|
class SelectLocation extends StatefulWidget {
|
||||||
const SelectLocation({
|
const SelectLocation({
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ import 'dart:math' as math;
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sail/entity/plan_entity.dart';
|
import 'package:uuvpn/entity/plan_entity.dart';
|
||||||
import 'package:sail/models/user_model.dart';
|
import 'package:uuvpn/models/user_model.dart';
|
||||||
import 'package:sail/service/plan_service.dart';
|
import 'package:uuvpn/service/plan_service.dart';
|
||||||
import 'package:sail/service/user_service.dart';
|
import 'package:uuvpn/service/user_service.dart';
|
||||||
import 'package:sail/utils/navigator_util.dart';
|
import 'package:uuvpn/utils/navigator_util.dart';
|
||||||
|
|
||||||
class SlidingCardsView extends StatefulWidget {
|
class SlidingCardsView extends StatefulWidget {
|
||||||
const SlidingCardsView({Key? key}) : super(key: key);
|
const SlidingCardsView({Key? key}) : super(key: key);
|
||||||
|
|||||||
+10
-2
@@ -93,10 +93,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: dio
|
name: dio
|
||||||
sha256: "7d328c4d898a61efc3cd93655a0955858e29a0aa647f0f9e02d59b3bb275e2e8"
|
sha256: e17f6b3097b8c51b72c74c9f071a605c47bcc8893839bd66732457a5ebe73714
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.6"
|
version: "5.5.0+1"
|
||||||
|
dio_web_adapter:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dio_web_adapter
|
||||||
|
sha256: "36c5b2d79eb17cdae41e974b7a8284fec631651d2a6f39a8a2ff22327e90aeac"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
equatable:
|
equatable:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: sail
|
name: uuvpn
|
||||||
description: a proxy client application.
|
description: ios/android vpn proxy client application.
|
||||||
|
|
||||||
# The following line prevents the package from being accidentally published to
|
# The following line prevents the package from being accidentally published to
|
||||||
# pub.dev using `pub publish`. This is preferred for private packages.
|
# pub.dev using `pub publish`. This is preferred for private packages.
|
||||||
@@ -32,7 +32,8 @@ dependencies:
|
|||||||
# Use with the CupertinoIcons class for iOS style icons.
|
# Use with the CupertinoIcons class for iOS style icons.
|
||||||
another_flushbar: ^1.12.30
|
another_flushbar: ^1.12.30
|
||||||
cupertino_icons: ^1.0.5
|
cupertino_icons: ^1.0.5
|
||||||
dio: ^4.0.6
|
# dio: ^4.0.6
|
||||||
|
dio: ^5.5.0+1
|
||||||
fluro: ^2.0.3
|
fluro: ^2.0.3
|
||||||
shared_preferences: ^2.0.15
|
shared_preferences: ^2.0.15
|
||||||
webview_flutter: ^3.0.4
|
webview_flutter: ^3.0.4
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
import 'package:sail/main.dart';
|
import 'package:uuvpn/main.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||||
|
|||||||
Reference in New Issue
Block a user