update dio to dio: ^5.5.0+1

update  dio to  dio: ^5.5.0+1
This commit is contained in:
Zeus
2024-07-24 11:12:17 +08:00
parent 22ff62e567
commit 876d355b18
64 changed files with 596 additions and 299 deletions
Vendored
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+22 -10
View File
@@ -9,7 +9,7 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
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 */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
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 */; };
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, ); }; };
C09CB0812C50A09A0028C461 /* TESWT.m in Sources */ = {isa = PBXBuildFile; fileRef = C09CB0802C50A09A0028C461 /* TESWT.m */; };
C0CB10F62C3275EE00A1F217 /* leaf.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CB10F52C3275EE00A1F217 /* leaf.xcframework */; };
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 */
/* Begin PBXContainerItemProxy section */
@@ -49,15 +51,15 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
2FD21F0625A363AA00F556E0 /* Embed App Extensions */ = {
2FD21F0625A363AA00F556E0 /* Embed Foundation Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 12;
dstPath = "";
dstSubfolderSpec = 13;
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;
};
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
@@ -122,7 +124,9 @@
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>"; };
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>"; };
/* End PBXFileReference section */
@@ -143,6 +147,7 @@
C0CB10F62C3275EE00A1F217 /* leaf.xcframework in Frameworks */,
2FD21F2425A364B700F556E0 /* NetworkExtension.framework in Frameworks */,
DBC6F25A26C78B1D91884CE1 /* Pods_Runner.framework in Frameworks */,
E2B5FEC68AAAE043A3080A59 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -235,7 +240,9 @@
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
C00A39D82C3E5F9D004E31E4 /* Runner-Bridging-Header.h */,
C09CB0832C50A0DD0028C461 /* Runner-Bridging-Header.h */,
C09CB07F2C50A09A0028C461 /* TESWT.h */,
C09CB0802C50A09A0028C461 /* TESWT.m */,
);
path = Runner;
sourceTree = "<group>";
@@ -277,7 +284,7 @@
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
4A4528B4E4B302F57B5EDB65 /* [CP] Check Pods Manifest.lock */,
2FD21F0625A363AA00F556E0 /* Embed App Extensions */,
2FD21F0625A363AA00F556E0 /* Embed Foundation Extensions */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
@@ -302,6 +309,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastSwiftUpdateCheck = 1230;
LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
@@ -454,6 +462,7 @@
3EA6B280293F6AB900B2BABC /* URL+Helpers.swift in Sources */,
3EA6B27F293F6AB500B2BABC /* FileManager+Helpers.swift in Sources */,
3EA6B27C293F68B500B2BABC /* VPNManager.swift in Sources */,
C09CB0812C50A09A0028C461 /* TESWT.m in Sources */,
3E06F989293FAFC600E04D92 /* LeafAdapter.swift in Sources */,
3E06F985293FACBB00E04D92 /* PacketTunnelProvider.swift in Sources */,
3E06F98C293FB8F600E04D92 /* TunnelConfiguration.swift in Sources */,
@@ -514,6 +523,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -525,6 +535,7 @@
ENABLE_BITCODE = NO;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -582,7 +593,6 @@
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_INCLUDE_PATHS = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
@@ -735,6 +745,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -746,6 +757,7 @@
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -793,6 +805,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -804,6 +817,7 @@
ENABLE_BITCODE = NO;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -863,7 +877,6 @@
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_INCLUDE_PATHS = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
@@ -909,7 +922,6 @@
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
SWIFT_INCLUDE_PATHS = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
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"
#endif /* Runner_Bridging_Header_h */
+16
View File
@@ -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
+12
View File
@@ -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
+2 -2
View File
@@ -1,6 +1,6 @@
import 'package:flutter/services.dart';
import 'package:sail/channels/Platform.dart';
import 'package:sail/utils/common_util.dart';
import 'package:uuvpn/channels/Platform.dart';
import 'package:uuvpn/utils/common_util.dart';
enum VpnStatus {
connected(code: 2),
+1 -1
View File
@@ -1,5 +1,5 @@
/*后台接口api*/
import 'package:sail/common/public.dart';
import 'package:uuvpn/common/public.dart';
class Apis {
static String appid = "IPOSih2134KHJKLDIO";
+5 -5
View File
@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:dio/dio.dart';
import 'package:sail/common/public.dart';
import 'package:uuvpn/common/public.dart';
import 'error_interceptor.dart';
class Http {
@@ -19,9 +19,9 @@ class Http {
if (dio == null) {
// BaseOptions、Options、RequestOptions 都可以配置参数,优先级别依次递增,且可以根据优先级别覆盖参数
BaseOptions options = new BaseOptions(
connectTimeout: CONNECT_TIMEOUT,
connectTimeout: Duration(seconds: CONNECT_TIMEOUT),
// 响应流上前后两次接受到数据的间隔,单位为毫秒。
receiveTimeout: RECEIVE_TIMEOUT,
receiveTimeout: Duration(seconds: RECEIVE_TIMEOUT),
headers: {},
);
if (options.contentType != null &&
@@ -64,8 +64,8 @@ class Http {
List<Interceptor>? interceptors}) {
dio!.options = dio!.options.copyWith(
baseUrl: baseUrl,
connectTimeout: connectTimeout,
receiveTimeout: receiveTimeout,
connectTimeout: Duration(seconds: connectTimeout ?? 0),
receiveTimeout: Duration(seconds: receiveTimeout ?? 0),
);
if (interceptors != null && interceptors.isNotEmpty) {
dio!.interceptors.addAll(interceptors);
+4 -4
View File
@@ -14,9 +14,9 @@ class DioHttpException implements Exception {
return "$code$message";
}
factory DioHttpException.create(DioError error) {
factory DioHttpException.create(DioException error) {
switch (error.type) {
case DioErrorType.other:
case DioExceptionType.unknown:
{
// 网络异常
return BadRequestException(-2, "无网络");
@@ -27,7 +27,7 @@ class DioHttpException implements Exception {
return BadRequestException(-1, "请求取消");
}
case DioErrorType.connectTimeout:
case DioErrorType.connectionTimeout:
{
return BadRequestException(-1, "连接超时");
}
@@ -42,7 +42,7 @@ class DioHttpException implements Exception {
return BadRequestException(-1, "响应超时");
}
case DioErrorType.response:
case DioErrorType.badResponse:
{
try {
int? errCode = error.response!.statusCode;
+9 -9
View File
@@ -3,16 +3,16 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart' as services;
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/constant/app_strings.dart';
import 'package:provider/provider.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/plan_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_subscribe_model.dart';
import 'package:sail/router/application.dart';
import 'package:sail/router/routers.dart';
import 'package:sail/models/user_model.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/plan_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_subscribe_model.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/router/routers.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'model/UserPreference.dart';
+1 -1
View File
@@ -1,6 +1,6 @@
// ignore_for_file: file_names
import 'package:flutter/material.dart';
import 'package:sail/resources/app_theme.dart';
import 'package:uuvpn/resources/app_theme.dart';
class ThemeCollection extends ChangeNotifier {
/// _colorSwatch method or function take RGB color as argument and after processing
+13 -13
View File
@@ -1,14 +1,14 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:sail/adapters/leaf_ffi/config.dart';
import 'package:sail/channels/Platform.dart';
import 'package:sail/channels/vpn_manager.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:sail/models/base_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/utils/common_util.dart';
import 'package:uuvpn/adapters/leaf_ffi/config.dart';
import 'package:uuvpn/channels/Platform.dart';
import 'package:uuvpn/channels/vpn_manager.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/constant/app_strings.dart';
import 'package:uuvpn/models/base_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/utils/common_util.dart';
class AppModel extends BaseModel {
VpnManager vpnManager = VpnManager();
@@ -174,17 +174,17 @@ class AppModel extends BaseModel {
void setConfigRule(String tag) async {
var proxy = config.proxies?.where((proxies) => proxies.tag == tag);
if (proxy == null || proxy.isEmpty) {
return;
}
config.rules?.last.target = tag;
print("-----------------config-----------------");
print(config);
print("-----------------config-----------------");
vpnManager.setTunnelConfiguration(config.toString());
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:sail/models/page_state.dart';
import 'package:sail/utils/common_util.dart';
import 'package:uuvpn/models/page_state.dart';
import 'package:uuvpn/utils/common_util.dart';
class BaseModel extends ChangeNotifier {
PageState pageState = PageState.loading;
+3 -3
View File
@@ -1,6 +1,6 @@
import 'package:sail/models/base_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/service/user_service.dart';
import 'package:uuvpn/models/base_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/service/user_service.dart';
class LoginModel extends BaseModel {
final UserService _userService = UserService();
+3 -3
View File
@@ -1,6 +1,6 @@
import 'package:sail/entity/plan_entity.dart';
import 'package:sail/models/base_model.dart';
import 'package:sail/service/plan_service.dart';
import 'package:uuvpn/entity/plan_entity.dart';
import 'package:uuvpn/models/base_model.dart';
import 'package:uuvpn/service/plan_service.dart';
class PlanModel extends BaseModel {
final PlanService _planService = PlanService();
+6 -6
View File
@@ -2,12 +2,12 @@ import 'dart:convert';
import 'dart:io';
import 'package:flutter_icmp_ping/flutter_icmp_ping.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:sail/entity/server_entity.dart';
import 'package:sail/models/base_model.dart';
import 'package:sail/service/server_service.dart';
import 'package:sail/utils/shared_preferences_util.dart';
import 'package:sail/utils/common_util.dart';
import 'package:uuvpn/constant/app_strings.dart';
import 'package:uuvpn/entity/server_entity.dart';
import 'package:uuvpn/models/base_model.dart';
import 'package:uuvpn/service/server_service.dart';
import 'package:uuvpn/utils/shared_preferences_util.dart';
import 'package:uuvpn/utils/common_util.dart';
enum PingType { ping, tcp }
+6 -6
View File
@@ -1,9 +1,9 @@
import 'package:sail/constant/app_strings.dart';
import 'package:sail/entity/login_entity.dart';
import 'package:sail/entity/user_entity.dart';
import 'package:sail/models/base_model.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:sail/utils/shared_preferences_util.dart';
import 'package:uuvpn/constant/app_strings.dart';
import 'package:uuvpn/entity/login_entity.dart';
import 'package:uuvpn/entity/user_entity.dart';
import 'package:uuvpn/models/base_model.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:uuvpn/utils/shared_preferences_util.dart';
import 'package:shared_preferences/shared_preferences.dart';
class UserModel extends BaseModel {
+5 -5
View File
@@ -1,8 +1,8 @@
import 'package:sail/constant/app_strings.dart';
import 'package:sail/entity/user_subscribe_entity.dart';
import 'package:sail/models/base_model.dart';
import 'package:sail/service/user_service.dart';
import 'package:sail/utils/shared_preferences_util.dart';
import 'package:uuvpn/constant/app_strings.dart';
import 'package:uuvpn/entity/user_subscribe_entity.dart';
import 'package:uuvpn/models/base_model.dart';
import 'package:uuvpn/service/user_service.dart';
import 'package:uuvpn/utils/shared_preferences_util.dart';
class UserSubscribeModel extends BaseModel {
UserSubscribeEntity? _userSubscribeEntity;
+2 -3
View File
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:sail/constant/app_images.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:uuvpn/constant/app_images.dart';
import 'package:uuvpn/constant/app_strings.dart';
class NotFindPage extends StatelessWidget {
const NotFindPage({Key? key}) : super(key: key);
+3 -3
View File
@@ -1,8 +1,8 @@
//ProOnecePage.dart
//ignore_for_file: file_names
import 'package:sail/constant/app_colors.dart';
import 'package:sail/router/application.dart';
import 'package:sail/utils/l10n.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/utils/l10n.dart';
import '/model/themeCollection.dart';
import 'package:flutter/material.dart';
+10 -10
View File
@@ -1,16 +1,16 @@
//ignore_for_file: file_names
import 'package:flutter/cupertino.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/plan_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/models/user_subscribe_model.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:sail/widgets/logo_bar.dart';
import 'package:sail/widgets/my_subscribe.dart';
import 'package:sail/widgets/plan_list.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/plan_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/models/user_subscribe_model.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:uuvpn/widgets/logo_bar.dart';
import 'package:uuvpn/widgets/my_subscribe.dart';
import 'package:uuvpn/widgets/plan_list.dart';
import '/routes/proRoute.dart';
import '/routes/settingsRoute.dart';
+1 -1
View File
@@ -1,6 +1,6 @@
import 'package:crisp/crisp.dart';
import 'package:flutter/widgets.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:uuvpn/constant/app_strings.dart';
class CrispPage extends StatefulWidget {
const CrispPage({Key? key}) : super(key: key);
+25 -25
View File
@@ -5,31 +5,31 @@ import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/constant/app_dimens.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/plan_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/models/user_subscribe_model.dart';
import 'package:sail/pages/accountPage.dart';
import 'package:sail/pages/homePage.dart';
import 'package:sail/pages/my_profile.dart';
import 'package:sail/pages/plan/plan_page.dart';
import 'package:sail/pages/proPage.dart';
import 'package:sail/pages/server_list.dart';
import 'package:sail/router/application.dart';
import 'package:sail/routes/OnceNotice.dart';
import 'package:sail/routes/proRoute.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/message_util.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:sail/widgets/ProgressView.dart';
import 'package:sail/widgets/home_widget.dart';
import 'package:sail/widgets/power_btn.dart';
import 'package:sail/widgets/sail_app_bar.dart';
import 'package:sail/utils/common_util.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/constant/app_dimens.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/plan_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/models/user_subscribe_model.dart';
import 'package:uuvpn/pages/accountPage.dart';
import 'package:uuvpn/pages/homePage.dart';
import 'package:uuvpn/pages/my_profile.dart';
import 'package:uuvpn/pages/plan/plan_page.dart';
import 'package:uuvpn/pages/proPage.dart';
import 'package:uuvpn/pages/server_list.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/routes/OnceNotice.dart';
import 'package:uuvpn/routes/proRoute.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/message_util.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:uuvpn/widgets/ProgressView.dart';
import 'package:uuvpn/widgets/home_widget.dart';
import 'package:uuvpn/widgets/power_btn.dart';
import 'package:uuvpn/widgets/sail_app_bar.dart';
import 'package:uuvpn/utils/common_util.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:url_launcher/url_launcher.dart';
+8 -8
View File
@@ -2,14 +2,14 @@ import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:provider/provider.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/login_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/router/application.dart';
import 'package:sail/service/user_service.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/login_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/service/user_service.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:uuvpn/constant/app_strings.dart';
class LoginPage extends StatefulWidget {
const LoginPage({Key? key}) : super(key: key);
+6 -6
View File
@@ -2,12 +2,12 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/service/user_service.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:sail/widgets/bottom_block.dart';
import 'package:sail/widgets/profile_widget.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/service/user_service.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:uuvpn/widgets/bottom_block.dart';
import 'package:uuvpn/widgets/profile_widget.dart';
class MyProfile extends StatefulWidget {
const MyProfile({Key? key}) : super(key: key);
+1 -1
View File
@@ -1,4 +1,4 @@
import 'package:sail/widgets/sliding_cards.dart';
import 'package:uuvpn/widgets/sliding_cards.dart';
import 'package:flutter/material.dart';
class PlanPage extends StatelessWidget {
+3 -3
View File
@@ -1,8 +1,8 @@
//ignore_for_file: file_names
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/router/application.dart';
import 'package:sail/utils/l10n.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/utils/l10n.dart';
import '/model/themeCollection.dart';
import 'package:flutter/material.dart';
+6 -6
View File
@@ -2,13 +2,13 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:flutter/material.dart';
import 'package:sail/utils/common_util.dart';
import 'package:sail/utils/l10n.dart';
import 'package:uuvpn/utils/common_util.dart';
import 'package:uuvpn/utils/l10n.dart';
class ServerListPage extends StatefulWidget {
const ServerListPage({Key? key}) : super(key: key);
+3 -2
View File
@@ -1,5 +1,5 @@
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';
class WebViewWidget extends StatefulWidget {
@@ -37,7 +37,8 @@ class WebViewWidgetState extends State<WebViewWidget> {
centerTitle: true,
),
body: WebView(
initialUrl: widget.url?.isEmpty == true ? AppStrings.appName : widget.url,
initialUrl:
widget.url?.isEmpty == true ? AppStrings.appName : widget.url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) => this.controller = controller,
onPageFinished: (url) {
+2 -2
View File
@@ -1,8 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:sail/resources/app_colors.dart';
import 'package:sail/resources/app_typography.dart';
import 'package:uuvpn/resources/app_colors.dart';
import 'package:uuvpn/resources/app_typography.dart';
ThemeData getApplicationTheme() {
return ThemeData(
+1 -1
View File
@@ -1,7 +1,7 @@
import 'package:fluro/fluro.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:sail/utils/l10n.dart';
import 'package:uuvpn/utils/l10n.dart';
class Application {
static FluroRouter? router;
+7 -7
View File
@@ -1,12 +1,12 @@
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:sail/pages/accountPage.dart';
import 'package:sail/pages/home/home_page.dart';
import 'package:sail/pages/404/not_find_page.dart';
import 'package:sail/pages/login/login_page.dart';
import 'package:sail/pages/plan/plan_page.dart';
import 'package:sail/pages/server_list.dart';
import 'package:sail/pages/webview_widget.dart';
import 'package:uuvpn/pages/accountPage.dart';
import 'package:uuvpn/pages/home/home_page.dart';
import 'package:uuvpn/pages/404/not_find_page.dart';
import 'package:uuvpn/pages/login/login_page.dart';
import 'package:uuvpn/pages/plan/plan_page.dart';
import 'package:uuvpn/pages/server_list.dart';
import 'package:uuvpn/pages/webview_widget.dart';
import 'dart:convert';
/// 入口
+1 -1
View File
@@ -1,5 +1,5 @@
import 'package:fluro/fluro.dart';
import 'package:sail/router/router_handlers.dart';
import 'package:uuvpn/router/router_handlers.dart';
class Routers {
static String home = "/";
+1 -1
View File
@@ -1,6 +1,6 @@
// OnceNotice.dart
//ignore_for_file: file_names
import 'package:sail/pages/ProOnecePage.dart';
import 'package:uuvpn/pages/ProOnecePage.dart';
import '/pages/proPage.dart';
import 'package:flutter/material.dart';
+4 -4
View File
@@ -1,8 +1,8 @@
//ignore_for_file: file_names
import 'package:sail/constant/app_colors.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/routes/proRoute.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/routes/proRoute.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:url_launcher/url_launcher.dart';
import '../model/themeCollection.dart';
+5 -4
View File
@@ -1,6 +1,6 @@
import 'package:sail/constant/app_urls.dart';
import 'package:sail/entity/plan_entity.dart';
import 'package:sail/utils/http_util.dart';
import 'package:uuvpn/constant/app_urls.dart';
import 'package:uuvpn/entity/plan_entity.dart';
import 'package:uuvpn/utils/http_util.dart';
class PlanService {
Future<List<PlanEntity>>? plan() {
@@ -10,7 +10,8 @@ class PlanService {
}
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']);
});
}
+3 -3
View File
@@ -1,6 +1,6 @@
import 'package:sail/constant/app_urls.dart';
import 'package:sail/entity/server_entity.dart';
import 'package:sail/utils/http_util.dart';
import 'package:uuvpn/constant/app_urls.dart';
import 'package:uuvpn/entity/server_entity.dart';
import 'package:uuvpn/utils/http_util.dart';
class ServerService {
Future<List<ServerEntity>> server() {
+5 -5
View File
@@ -1,8 +1,8 @@
import 'package:sail/constant/app_urls.dart';
import 'package:sail/entity/login_entity.dart';
import 'package:sail/entity/user_entity.dart';
import 'package:sail/entity/user_subscribe_entity.dart';
import 'package:sail/utils/http_util.dart';
import 'package:uuvpn/constant/app_urls.dart';
import 'package:uuvpn/entity/login_entity.dart';
import 'package:uuvpn/entity/user_entity.dart';
import 'package:uuvpn/entity/user_subscribe_entity.dart';
import 'package:uuvpn/utils/http_util.dart';
class UserService {
Future<LoginEntity>? login(Map<String, dynamic> parameters) {
+9 -9
View File
@@ -1,9 +1,9 @@
import 'package:dio/dio.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:sail/router/application.dart';
import 'package:sail/router/routers.dart';
import 'package:sail/utils/common_util.dart';
import 'package:sail/utils/shared_preferences_util.dart';
import 'package:uuvpn/constant/app_strings.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/router/routers.dart';
import 'package:uuvpn/utils/common_util.dart';
import 'package:uuvpn/utils/shared_preferences_util.dart';
class HttpUtil {
static HttpUtil get instance => _httpUtil;
@@ -12,8 +12,8 @@ class HttpUtil {
HttpUtil() {
BaseOptions options = BaseOptions(
connectTimeout: 10000,
receiveTimeout: 10000,
connectTimeout: Duration(seconds: 10000),
receiveTimeout: Duration(seconds: 10000),
);
dio = Dio(options);
dio.interceptors
@@ -53,10 +53,10 @@ class HttpUtil {
Application.navigatorKey.currentState?.pushNamed(Routers.login);
}
return handler.reject(DioError(
return handler.reject(DioException(
requestOptions: response.requestOptions,
response: response,
type: DioErrorType.response));
type: DioExceptionType.badResponse));
}
return handler.next(response);
+6 -6
View File
@@ -4,12 +4,12 @@ import 'package:fluro/fluro.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
import 'package:sail/pages/accountPage.dart';
import 'package:sail/pages/crisp_page.dart';
import 'package:sail/pages/plan/plan_page.dart';
import 'package:sail/pages/server_list.dart';
import 'package:sail/router/application.dart';
import 'package:sail/router/routers.dart';
import 'package:uuvpn/pages/accountPage.dart';
import 'package:uuvpn/pages/crisp_page.dart';
import 'package:uuvpn/pages/plan/plan_page.dart';
import 'package:uuvpn/pages/server_list.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/router/routers.dart';
class NavigatorUtil {
static goHomePage(BuildContext context) {
+4 -4
View File
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
// import 'package:sail/go_router.dart';
// import 'package:uuvpn/go_router.dart';
import 'package:intl/intl.dart';
import 'package:sail/resources/app_colors.dart';
import 'package:sail/resources/app_routes.dart';
import 'package:sail/resources/app_values.dart';
import 'package:uuvpn/resources/app_colors.dart';
import 'package:uuvpn/resources/app_routes.dart';
import 'package:uuvpn/resources/app_values.dart';
String getDate(String? date) {
if (date == null || date.isEmpty) {
+1 -1
View File
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:uuvpn/constant/app_colors.dart';
class ProgressView extends StatelessWidget {
const ProgressView({Key? key}) : super(key: key);
+8 -8
View File
@@ -1,14 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:sail/channels/Platform.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:uuvpn/channels/Platform.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
class ConnectionStats extends StatefulWidget {
const ConnectionStats({Key? key}) : super(key: key);
+18 -18
View File
@@ -2,24 +2,24 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/plan_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/models/user_subscribe_model.dart';
import 'package:sail/resources/app_colors.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/widgets/bottom_block.dart';
import 'package:sail/widgets/connection_stats.dart';
import 'package:sail/widgets/logo_bar.dart';
import 'package:sail/widgets/my_subscribe.dart';
import 'package:sail/widgets/plan_list.dart';
import 'package:sail/widgets/power_btn.dart';
import 'package:sail/widgets/select_location.dart';
import 'package:sail/utils/common_util.dart';
import 'package:sail/widgets/watermuticicel.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/plan_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/models/user_subscribe_model.dart';
import 'package:uuvpn/resources/app_colors.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/widgets/bottom_block.dart';
import 'package:uuvpn/widgets/connection_stats.dart';
import 'package:uuvpn/widgets/logo_bar.dart';
import 'package:uuvpn/widgets/my_subscribe.dart';
import 'package:uuvpn/widgets/plan_list.dart';
import 'package:uuvpn/widgets/power_btn.dart';
import 'package:uuvpn/widgets/select_location.dart';
import 'package:uuvpn/utils/common_util.dart';
import 'package:uuvpn/widgets/watermuticicel.dart';
class HomeWidget extends StatefulWidget {
const HomeWidget({Key? key}) : super(key: key);
+7 -7
View File
@@ -2,13 +2,13 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/constant/app_strings.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/models/user_subscribe_model.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/constant/app_strings.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/models/user_subscribe_model.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
class LogoBar extends StatelessWidget {
const LogoBar({
+10 -10
View File
@@ -3,16 +3,16 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/entity/user_subscribe_entity.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/router/application.dart';
import 'package:sail/routes/OnceNotice.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:sail/utils/transfer_util.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/entity/user_subscribe_entity.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/router/application.dart';
import 'package:uuvpn/routes/OnceNotice.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:uuvpn/utils/transfer_util.dart';
class MySubscribe extends StatefulWidget {
const MySubscribe(
+6 -6
View File
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/entity/plan_entity.dart';
import 'package:sail/entity/user_subscribe_entity.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/entity/plan_entity.dart';
import 'package:uuvpn/entity/user_subscribe_entity.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
class PlanList extends StatefulWidget {
const PlanList(
+10 -10
View File
@@ -2,16 +2,16 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/app_model.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/message_util.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:sail/widgets/watermuticicel.dart';
import 'package:sail/widgets/waterrepper.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/message_util.dart';
import 'package:uuvpn/utils/navigator_util.dart';
import 'package:uuvpn/widgets/watermuticicel.dart';
import 'package:uuvpn/widgets/waterrepper.dart';
class PowerButton extends StatefulWidget {
const PowerButton({Key? key}) : super(key: key);
@@ -3,7 +3,7 @@ import 'dart:ui';
import 'package:flutter/material.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);
const double iconStartSize = 44;
@@ -17,15 +17,19 @@ class RecentConnectionBottomSheet extends StatefulWidget {
const RecentConnectionBottomSheet({Key? key}) : super(key: key);
@override
RecentConnectionBottomSheetState createState() => RecentConnectionBottomSheetState();
RecentConnectionBottomSheetState createState() =>
RecentConnectionBottomSheetState();
}
class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet> with SingleTickerProviderStateMixin {
class RecentConnectionBottomSheetState
extends State<RecentConnectionBottomSheet>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
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);
@@ -38,9 +42,12 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
double? get iconSize => lerp(iconStartSize, iconEndSize);
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
void initState() {
@@ -57,7 +64,8 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
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
Widget build(BuildContext context) {
@@ -77,7 +85,9 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
padding: const EdgeInsets.symmetric(horizontal: 32),
decoration: const BoxDecoration(
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)),
),
child: Stack(
@@ -142,9 +152,11 @@ class RecentConnectionBottomSheetState extends State<RecentConnectionBottomSheet
}
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) {
_controller.fling(velocity: math.max(2.0, -flingVelocity));
} else if (flingVelocity > 0.0) {
@@ -256,7 +268,8 @@ class SheetHeader extends StatelessWidget {
final double? fontSize;
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
Widget build(BuildContext context) {
+8 -7
View File
@@ -1,11 +1,10 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/models/app_model.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/models/app_model.dart';
class SailAppBar extends AppBar {
SailAppBar({Key? key, required this.appTitle})
: super(key: key);
SailAppBar({Key? key, required this.appTitle}) : super(key: key);
final String appTitle;
@@ -27,10 +26,12 @@ class SailAppBarState extends State<SailAppBar> {
return AppBar(
title: Text(
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,
backgroundColor: _appModel.isOn ? AppColors.yellowColor : AppColors.grayColor
);
backgroundColor:
_appModel.isOn ? AppColors.yellowColor : AppColors.grayColor);
}
}
+6 -6
View File
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:sail/constant/app_colors.dart';
import 'package:sail/model/themeCollection.dart';
import 'package:sail/models/server_model.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/utils/l10n.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
class SelectLocation extends StatefulWidget {
const SelectLocation({
+5 -5
View File
@@ -3,11 +3,11 @@ import 'dart:math' as math;
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:sail/entity/plan_entity.dart';
import 'package:sail/models/user_model.dart';
import 'package:sail/service/plan_service.dart';
import 'package:sail/service/user_service.dart';
import 'package:sail/utils/navigator_util.dart';
import 'package:uuvpn/entity/plan_entity.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/service/plan_service.dart';
import 'package:uuvpn/service/user_service.dart';
import 'package:uuvpn/utils/navigator_util.dart';
class SlidingCardsView extends StatefulWidget {
const SlidingCardsView({Key? key}) : super(key: key);
+10 -2
View File
@@ -93,10 +93,18 @@ packages:
dependency: "direct main"
description:
name: dio
sha256: "7d328c4d898a61efc3cd93655a0955858e29a0aa647f0f9e02d59b3bb275e2e8"
sha256: e17f6b3097b8c51b72c74c9f071a605c47bcc8893839bd66732457a5ebe73714
url: "https://pub.dev"
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:
dependency: transitive
description:
+4 -3
View File
@@ -1,5 +1,5 @@
name: sail
description: a proxy client application.
name: uuvpn
description: ios/android vpn proxy client application.
# The following line prevents the package from being accidentally published to
# 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.
another_flushbar: ^1.12.30
cupertino_icons: ^1.0.5
dio: ^4.0.6
# dio: ^4.0.6
dio: ^5.5.0+1
fluro: ^2.0.3
shared_preferences: ^2.0.15
webview_flutter: ^3.0.4
+1 -1
View File
@@ -8,7 +8,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:sail/main.dart';
import 'package:uuvpn/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {