From 6ee7114ff83df3c2ff0a13367b971a00a5d69d97 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Fri, 19 Jun 2026 00:13:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(client):=20P6=20=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E8=90=BD=E5=9C=B0=E7=9C=9F=E5=AE=9E=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?(#6=206F,=E6=9C=AC=E5=9C=B0=E9=83=A8=E5=88=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - settings_provider:三开关 shared_preferences 持久化 + 副作用落地: killSwitch→VpnBridge.setKillSwitch(on:);autostart→桌面原生登录项 (launch_at_startup);smartRoute 持久化为偏好(连接时作 split_cn,见 #5)。 - settings_page → ConsumerWidget,开关接 settingsProvider;协议标签 WireGuard→REALITY/Hysteria2;版本号取 pubspec(package_info_plus)。 - 新依赖:shared_preferences / package_info_plus / launch_at_startup。 flutter analyze 0 error;114 tests passed;settings golden 重生成。 待办:#5 智能分流的 server 端 geoip-cn 下发 + autostart 真机验证(需 release .app)。 Co-Authored-By: Claude Opus 4.8 --- client/lib/screens/settings_page.dart | 28 ++--- client/lib/state/settings_provider.dart | 108 ++++++++++++++++++ .../Flutter/GeneratedPluginRegistrant.swift | 4 + client/pubspec.yaml | 3 + .../test/golden/goldens/desktop_settings.png | Bin 34883 -> 35974 bytes 5 files changed, 126 insertions(+), 17 deletions(-) create mode 100644 client/lib/state/settings_provider.dart diff --git a/client/lib/screens/settings_page.dart b/client/lib/screens/settings_page.dart index 2320115..858ad4e 100644 --- a/client/lib/screens/settings_page.dart +++ b/client/lib/screens/settings_page.dart @@ -8,28 +8,22 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../l10n/app_text.dart'; import '../pangolin_theme.dart'; import '../state/app_providers.dart'; +import '../state/settings_provider.dart'; import '../widgets/pangolin_icons.dart'; -class SettingsPage extends ConsumerStatefulWidget { +class SettingsPage extends ConsumerWidget { const SettingsPage({super.key}); @override - ConsumerState createState() => _SettingsPageState(); -} - -class _SettingsPageState extends ConsumerState { - // 本地演示态(暂无后端绑定),默认开,对照 dapp.jsx DSettings。 - bool _autostart = true; - bool _smartRoute = true; - bool _killSwitch = true; - - @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { final c = context.pangolin; final t = ref.watch(appTextProvider); final lang = ref.watch(localeProvider); final mode = ref.watch(themeModeProvider); final isDark = mode == ThemeMode.dark; + final s = ref.watch(settingsProvider); + final settings = ref.read(settingsProvider.notifier); + final version = ref.watch(appVersionProvider).valueOrNull ?? '…'; Widget sw(bool v, ValueChanged on) => Switch(value: v, activeThumbColor: c.accent, onChanged: on); @@ -47,9 +41,9 @@ class _SettingsPageState extends ConsumerState { const SizedBox(height: 16), // 功能开关组 _Card(children: [ - _Row(title: t.autostart, sub: t.autostartSub, right: sw(_autostart, (v) => setState(() => _autostart = v))), - _Row(title: t.smartRoute, sub: t.smartRouteSub, right: sw(_smartRoute, (v) => setState(() => _smartRoute = v))), - _Row(title: t.killSwitch, sub: t.killSwitchSub, last: true, right: sw(_killSwitch, (v) => setState(() => _killSwitch = v))), + _Row(title: t.autostart, sub: t.autostartSub, right: sw(s.autostart, settings.setAutostart)), + _Row(title: t.smartRoute, sub: t.smartRouteSub, right: sw(s.smartRoute, settings.setSmartRoute)), + _Row(title: t.killSwitch, sub: t.killSwitchSub, last: true, right: sw(s.killSwitch, settings.setKillSwitch)), ]), const SizedBox(height: 16), // 配置组 @@ -60,9 +54,9 @@ class _SettingsPageState extends ConsumerState { sub: isDark ? t.stateOn : t.followLight, right: sw(isDark, (v) => ref.read(themeModeProvider.notifier).state = v ? ThemeMode.dark : ThemeMode.light), ), - _Row(title: t.protocol, right: Text('WireGuard', style: PangolinText.mono.copyWith(fontSize: 13, color: c.fg3))), + _Row(title: t.protocol, right: Text('REALITY / Hysteria2', style: PangolinText.mono.copyWith(fontSize: 13, color: c.fg3))), _Row(title: t.checkUpdate, right: Icon(PangolinIcons.chevronRight, size: 18, color: c.fg3), onTap: () {}), - _Row(title: 'Version', last: true, right: Text('v1.0.0', style: PangolinText.mono.copyWith(fontSize: 13, color: c.fg3))), + _Row(title: 'Version', last: true, right: Text(version, style: PangolinText.mono.copyWith(fontSize: 13, color: c.fg3))), ]), ]), ), diff --git a/client/lib/state/settings_provider.dart b/client/lib/state/settings_provider.dart new file mode 100644 index 0000000..01ede93 --- /dev/null +++ b/client/lib/state/settings_provider.dart @@ -0,0 +1,108 @@ +// settings_provider.dart — 本地应用设置(持久化 + 副作用落地)。 +// +// 三个开关均本地持久化(shared_preferences),并落地真实行为: +// - killSwitch → VpnBridge.setKillSwitch(改 TUN strict_route 并重载内核) +// - autostart → 桌面端原生登录项(launch_at_startup) +// - smartRoute → 持久化为偏好,连接时作为 split_cn 下发(geoip-cn 直连,见 #5) +import 'dart:io'; + +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:launch_at_startup/launch_at_startup.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import '../bridge/vpn_bridge_provider.dart'; + +class AppSettings { + const AppSettings({this.autostart = true, this.smartRoute = true, this.killSwitch = true}); + final bool autostart; + final bool smartRoute; + final bool killSwitch; + + AppSettings copyWith({bool? autostart, bool? smartRoute, bool? killSwitch}) => AppSettings( + autostart: autostart ?? this.autostart, + smartRoute: smartRoute ?? this.smartRoute, + killSwitch: killSwitch ?? this.killSwitch, + ); +} + +const _kAutostart = 'set_autostart'; +const _kSmartRoute = 'set_smart_route'; +const _kKillSwitch = 'set_kill_switch'; + +class SettingsController extends StateNotifier { + SettingsController(this._ref) : super(const AppSettings()) { + _load(); + } + + final Ref _ref; + final bool _desktop = Platform.isMacOS || Platform.isWindows || Platform.isLinux; + + Future _load() async { + try { + final p = await SharedPreferences.getInstance(); + state = AppSettings( + autostart: p.getBool(_kAutostart) ?? true, + smartRoute: p.getBool(_kSmartRoute) ?? true, + killSwitch: p.getBool(_kKillSwitch) ?? true, + ); + } catch (_) { + // 测试/无平台:保留默认值。 + } + _applyKillSwitch(state.killSwitch); + if (_desktop) await _applyAutostart(state.autostart); + } + + Future setAutostart(bool v) async { + state = state.copyWith(autostart: v); + await _persist(_kAutostart, v); + if (_desktop) await _applyAutostart(v); + } + + Future setSmartRoute(bool v) async { + state = state.copyWith(smartRoute: v); + await _persist(_kSmartRoute, v); + } + + Future setKillSwitch(bool v) async { + state = state.copyWith(killSwitch: v); + await _persist(_kKillSwitch, v); + _applyKillSwitch(v); + } + + void _applyKillSwitch(bool v) { + try { + _ref.read(vpnBridgeProvider).setKillSwitch(on: v); + } catch (_) { + // 桥未就绪/测试环境:忽略,持久化值在下次连接时生效。 + } + } + + Future _applyAutostart(bool v) async { + try { + final info = await PackageInfo.fromPlatform(); + launchAtStartup.setup(appName: info.appName, appPath: Platform.resolvedExecutable); + if (v) { + await launchAtStartup.enable(); + } else { + await launchAtStartup.disable(); + } + } catch (_) { + // 登录项注册失败(权限/调试运行)不应阻塞 UI。 + } + } + + Future _persist(String key, bool v) async { + final p = await SharedPreferences.getInstance(); + await p.setBool(key, v); + } +} + +final settingsProvider = + StateNotifierProvider((ref) => SettingsController(ref)); + +/// 应用版本号(来自 pubspec,经 package_info_plus)。 +final appVersionProvider = FutureProvider((ref) async { + final info = await PackageInfo.fromPlatform(); + return 'v${info.version}'; +}); diff --git a/client/macos/Flutter/GeneratedPluginRegistrant.swift b/client/macos/Flutter/GeneratedPluginRegistrant.swift index e84ed5a..16bb469 100644 --- a/client/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/client/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,11 @@ import FlutterMacOS import Foundation import flutter_secure_storage_macos +import package_info_plus +import shared_preferences_foundation func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) + FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) } diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 52b4e20..bf68abb 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -17,6 +17,9 @@ dependencies: http: ^1.2.1 # 控制面 HTTP 客户端(connect API) path_provider: ^2.1.3 # 获取应用支持目录(sing-box 配置路径) flutter_secure_storage: ^9.2.2 # JWT token 安全存储 + shared_preferences: ^2.5.5 + package_info_plus: ^9.0.1 + launch_at_startup: ^0.5.1 dev_dependencies: flutter_test: diff --git a/client/test/golden/goldens/desktop_settings.png b/client/test/golden/goldens/desktop_settings.png index 9caba9b1cbdb3ee35d6ab7e232a2803a7a2db106..61dbc3272ae90030143297327f74471f45943509 100644 GIT binary patch delta 19908 zcmbrl2UwF^w=Np-N0$X$7DSPv(nOllJ1V{R-lca00#ZK|0SiTf^xgs_K%@o;ML~)n zHH01zAwZ}Kgci#A!rJHT|L$j>=iGDedV-6D`OP`zm}8FejyG)|sUlOUK0C?+yG+bV z0jQIc>E`9i_wM!G_&NyRt!SqAB^^(e-e@W>&9c3z_Sux2Nw}`5Nvop#S1$FnYtODU zQQM|JkABf!w|n2HzE};pCfFkD)^l^B#=p>{>}HGAXnTavR%(C@45|{eA-JXf=l7q@ zwQ)Wx!p(@Z_XcdpK%74hm*o(a&__? z%gSAD2$ZhMIHV^?;-f)pO;xwe1Ktg@zb|wbMS~rA1_9hUe#@|<({ana5 zHvh%g$aAwxh%c%NclqW==e+p0e0B2&3d^)h5XfDKiu_Z3U-TIW|p=mkopG9fPPKkOI9S!4$vr80wIZgL}8nK_C#_e5Ny17DhNKi;J?I;QKJr zgmCx;JBjtSe}V5xlYPHbkC%nmtWQ>1G~>;9r8&KX8g;;#AjbSeT%cR!LPUVjje%u) z0ENI^VpkEDK5(7_c0*aCCSAYpzhbpHcO4x2*>b`|esYUYgfMN=7MCV-qeq|Y@3`p^ z@~&WUwBP_pPPhcGwPM>-1C&MSL`;vpeCxzf`|%_3gN|(HZ|L*+g&T2F2C(|nT z0aS3$4L=p#Y!&*FmwRF=u&WoGCpkTxCRau67$Og{15(dvU`+gq)L{BGF0Wih_}v9p zQj0&MEHx789`BB4t{1FOW`ZbcN%r`@k!G`q7N9w~*oeRO ztM*5*%Itz7P5qwXKGNT{T{g7oWK0j}^BhfCpL#|hF*EvP_Y&0`PIc^MmkGR3SV!| zO$a;G)tA^WY$Iv=U>thqDFTXBYNqG)Y)Hz(Zg?OP)b(KVyvyU8Q-E3&r}km+v5{{1G%#lI5Vn_! z;1=mMheWG~*S34CEJ|8mu@bub^!81RkbZOCyg>)a5(LgT^qT>@u}nVksjM-w`M+tb z|LYVWv&efp{^NmGy{wzJufgOP|X7#rerD^%atfD*nC4O0!pc=v8 zT4TTPVU0nMf%f6*Zu=qs(5l-1Qkg)wGlPx_jGNntY}lvQR!e%wC}esa*!dJ3RQvty zo5WGa&&wjH;dOQv?v@Sh`buwh6+rR9SovetV-9MUoo`eAdrgV&M$RmybiYp|dQfbH zYeXE`l_jAexu`MPv3opH=?+@PF!|G#@b-`-n~JMdhzdk&QBXVo%*n_PoyoVp+SAb zZFLCb|1NSp}Fe&PG@QB{~)}DU$S$U}ct5D)FZ~BwuZ~c$K z&#ar~&%(c7^0AW%jisn|g`MdU4Pcov=Ngu63%>sn_`~{F%Ksc&aMoe?(aRUH(GF?w zyvX=<5pYBpDzo4$oGl{n>WbtUi3_qV;Ac-54+*K z>+^_JQ6H{e&*&WTiR0tndb(^3vqQ$JJOi(IwxdeDbB@?TYECgGsWEU#w<-$!B7zvn%e zpNpFaX=GE#*Wo?#en<7{NmSoi$P+2JO|eIhs{7F%9nRfyoNHEqnU&EHzi_t6&4fLn z^N0NnDvq#dpMJdm^8RAB`+j3??$c2VpTcIKAMY);b7D$f=M}B_7p5ENRy|tmKd}hf zSxsW&HLrWJd$LLYxWCE1$HBt)Ye2){&<9dJ%kh&@tDqW9#*mEZpxsPA(gAT*%XilT zjSg;h?Dw#E`L*5@;{a`4EG{V-VW-z}y^c5o`TY9o1*G@jWdoEY8!Mx#za($8mog4X z@6r#817jA^aZO`abf z9xmRMO(~pHj2@nD3fi_h+4sSREV?s@FZ(1WUr}BTHnIqbfoouj4O+O3NY^yFD42)!+5}*=xL$Tq7{|@vmc%CBIPSf819(v6SnnOUoroVls5G9* za-Vp-%S2-IPnxQy=GwT<)OH!vBi+Ra-^H~V90G^j?nZhdw6f(sPz9d^`8)4$vT%m< z1#HQT7JM%v)?H;~SHWX;2TqO_o@NUC(J!+?Yi=}=V?7#=85FMYc>mlbLve)UC9935 zN$*(ttRO?ce z1ZQ`|+%6N;$}Tt`dW1|;3%p`lX;;x4)T6-=F!gsPux@f-eL!B@D+kqYC3HiZkY~bm zC3!H%$^c1U{Cq@h0^=47`eLqCBp7gd-oByp01(NZ{UU1?J0%YtnhLBpZ{_!)Jt za876gU+!LIr5DoflG-t7lp`EdybN#~x=yZ+&QDgA;hI0Ao?=?|wBg^SQ!Q>&F0-7Omb5IXf2UGk@; zggDuuceWia;GOUO-is?u6`bGNAJ(=))wmk2IG!ADi7d)MhwMnpc(XV_cIRz5=2$W2 z4gg~#);neo*1DUK20629{zbU1C8gsdOI9b5qNWX)g#)YCPjD!96?)5UjTmX0g6U8) zFO96n8+$8R$j>otbU-0h&G(k8>CtI4RtUegAwMS9)6_8PA%lb={#^DzrL=aH5j5Qh zF_|;RyL!X$`MK*)07VJ=UnLYV6SSnttsgm!2VA;ziG-PvEg&FAh<{{H6cRYH;hfBX zega2ULChV|E{7`OuMhl#K^x7iZI8B($s5Gull>ZRZ=ch{+56J^j5Ax{@$BQ|(EY+l z7STK$&#L%h7Ru^y6VTW8TCz-tXH`N6o9pWrT)3_YjO@5iPGnqxgt5Mhq(V&ANfp`( ztxpZFdj-^iDdcdStsK%FdMDYZ#Eo9@%fCLxcf`o5^h=+>7C_tEz(b?%-z?)pd(K!! zwAm0A7hRXBvD*~k11>ddYkHJV2hKrNhCWsGjYQI{kWjnRI#7eeJ_$0TMy7-YOJ7

hk3Hj!!Kwhf`dGfljgHmXM(psvuNvFqF9 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 delta 18808 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