837bf55f6a
免费版「今日剩余 xx 分钟」一直不变的两处原因: 1. 倒计时仅在经 _connect 连接时锁定 _freeRemainingSec;Android 常驻隧道/重启后自动 同步到已在跑的隧道时不走 _connect → 倒计时不启,连接页只显示静态「今日剩余」。 现于 _onKernelStatus.on 兜底:免费且未锁定则按当前额度补锁,保证显示会动的倒计时。 2. /me 仅登录时拉一次,会话消耗后不刷新 → 「今日剩余」停在登录值。现于断开/内核掉线 后静默刷新 /me(新增 MeNotifier.silentRefresh,不进 AsyncLoading → 不闪整页 spinner)。 markExhausted / watchAd 也改用 silentRefresh,避免额度变动时连接页闪 spinner。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
90 lines
3.3 KiB
YAML
90 lines
3.3 KiB
YAML
name: pangolin_vpn
|
||
description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。
|
||
publish_to: "none"
|
||
version: 1.0.46+47
|
||
|
||
environment:
|
||
sdk: ^3.5.0
|
||
flutter: ">=3.24.0"
|
||
|
||
dependencies:
|
||
flutter:
|
||
sdk: flutter
|
||
flutter_svg: ^2.0.10 # 加载 assets/ 下的矢量 logo
|
||
country_flags: ^3.1.0 # 节点国旗(SVG,全平台含 Windows;按 region 码渲染)
|
||
lucide_icons: ^0.257.0 # Lucide 细线条图标
|
||
google_fonts: ^6.2.1 # 运行时加载 Sora / Manrope / Noto Sans SC / JetBrains Mono
|
||
flutter_riverpod: ^2.5.1 # 状态层(连接状态机 / 免费额度 / 节点选择 / 语言 / 主题)
|
||
http: ^1.2.1 # 控制面 HTTP 客户端(connect API)
|
||
path_provider: ^2.1.3 # 获取应用支持目录(sing-box 配置路径)
|
||
flutter_secure_storage: ^9.2.2 # JWT token 安全存储 + 稳定 device_id 持久化
|
||
shared_preferences: ^2.5.5
|
||
package_info_plus: ^9.0.1
|
||
device_info_plus: ^11.2.0 # 设备名/平台(「我的设备」上报)
|
||
uuid: ^4.5.1 # 客户端生成稳定 device_id (UUID v4)
|
||
launch_at_startup: ^0.5.1
|
||
tray_manager: ^0.5.3
|
||
window_manager: ^0.5.1
|
||
|
||
dev_dependencies:
|
||
flutter_test:
|
||
sdk: flutter
|
||
flutter_lints: ^4.0.0
|
||
flutter_launcher_icons: ^0.14.1
|
||
|
||
# ── App 图标生成(flutter_launcher_icons)──
|
||
# 源图 assets/app-icon-ios-1024.png = design 单源 assets/app-icon.svg 去掉圆角(rx=0,全幅
|
||
# 方形,iOS 自行加圆角)、qlmanage 渲染 1024 而来。改图标:重渲源图后跑
|
||
# `dart run flutter_launcher_icons`(自动铺 iPhone+iPad 全尺寸、去 alpha、重写 Contents.json)。
|
||
flutter_launcher_icons:
|
||
ios: true
|
||
remove_alpha_ios: true
|
||
image_path: "assets/app-icon-ios-1024.png"
|
||
|
||
# lucide_icons-0.257.0 defines LucideIconData extends IconData, which breaks
|
||
# when Flutter SDK marks IconData as final. Override with a local patched copy
|
||
# that replaces the subclass with direct IconData(...) const constructors.
|
||
dependency_overrides:
|
||
lucide_icons:
|
||
path: packages/lucide_icons_patched
|
||
|
||
flutter:
|
||
uses-material-design: true
|
||
|
||
# ── 资产(SVG logo)──
|
||
assets:
|
||
- assets/logo-mark.svg
|
||
- assets/logo-mark-white.svg
|
||
- assets/logo-wordmark.svg
|
||
- assets/app-icon.svg
|
||
- assets/tray_icon.png
|
||
- assets/tray_icon.ico # Windows 托盘专用(Win32 只认 .ico)
|
||
|
||
# ── 字体(本地打包,全平台离线)──
|
||
# 拉丁全量(Sora/Manrope/JetBrains Mono)+ Noto Sans SC 子集(GB2312 6763 字,单 Regular
|
||
# 权重;CJK 粗体由引擎合成)。子集由 tools/fonts/make-cjk-subset.sh 可复现生成。
|
||
# 生产经 PangolinFonts.useBundled=true 走这些 family;中文经 fontFamilyFallback 兜底。
|
||
fonts:
|
||
- family: Sora
|
||
fonts:
|
||
- asset: fonts/Sora-Regular.ttf
|
||
- asset: fonts/Sora-SemiBold.ttf
|
||
weight: 600
|
||
- asset: fonts/Sora-Bold.ttf
|
||
weight: 700
|
||
- family: Manrope
|
||
fonts:
|
||
- asset: fonts/Manrope-Regular.ttf
|
||
- asset: fonts/Manrope-Medium.ttf
|
||
weight: 500
|
||
- asset: fonts/Manrope-SemiBold.ttf
|
||
weight: 600
|
||
- asset: fonts/Manrope-Bold.ttf
|
||
weight: 700
|
||
- family: JetBrains Mono
|
||
fonts:
|
||
- asset: fonts/JetBrainsMono-Regular.ttf
|
||
- family: Noto Sans SC
|
||
fonts:
|
||
- asset: fonts/NotoSansSC-Regular-subset.otf
|