fix(client): 额度卡「今日剩余」标签不再被省略 + 短「免费版」标签(1.0.45+46)
连接页额度卡头部一行放不下「今日剩余 X 分钟 + 免费版·每日10分钟」时,此前 Flexible 落在标签上,导致「今日剩余」被挤成「今日…」。改为:标签固定绝不省略,数值作最后收缩项; 右上角标签缩短为「免费版」(每日额度由卡片本身「今日剩余 X 分钟」表达,不再挤进胶囊)。 新增 planFreeTag l10n(zh 免费版 / en Free),quotaFree 仍保留供账户页 plan_badge_card。 golden 基线(quota_low/exhausted)在 Linux 权威环境重生成。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@@ -45,6 +45,7 @@ abstract class AppText {
|
||||
String get quotaToday;
|
||||
String get minutes;
|
||||
String get quotaFree;
|
||||
String get planFreeTag; // 额度卡右上短标签「免费版」(不含「每日10分钟」,避免挤占行宽)
|
||||
String get watchAd;
|
||||
String get adUnlocked;
|
||||
// 免费版 10 分钟卡控 + 看广告加时(累加式)
|
||||
|
||||
@@ -53,6 +53,8 @@ class StringsEn extends AppText {
|
||||
@override
|
||||
String get quotaFree => 'Free · 10 min/day';
|
||||
@override
|
||||
String get planFreeTag => 'Free';
|
||||
@override
|
||||
String get watchAd => 'Watch ad to start';
|
||||
@override
|
||||
String get adUnlocked => 'Unlocked for today';
|
||||
|
||||
@@ -52,6 +52,8 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get quotaFree => '免费版 · 每日 10 分钟';
|
||||
@override
|
||||
String get planFreeTag => '免费版';
|
||||
@override
|
||||
String get watchAd => '看广告开始使用';
|
||||
@override
|
||||
String get adUnlocked => '已解锁 · 今日可用';
|
||||
|
||||
@@ -77,21 +77,25 @@ class QuotaCard extends StatelessWidget {
|
||||
Row(children: [
|
||||
Icon(PangolinIcons.clock, size: 15, color: exhausted ? c.danger : c.accent),
|
||||
const SizedBox(width: 7),
|
||||
Flexible(
|
||||
child: Text(label,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: PangolinText.caption.copyWith(color: c.fg2, fontWeight: FontWeight.w600, fontSize: 12)),
|
||||
),
|
||||
// 标签固定、绝不省略(此前用 Flexible 让「今日剩余」被挤成「今日…」)。
|
||||
Text(label,
|
||||
style: PangolinText.caption.copyWith(color: c.fg2, fontWeight: FontWeight.w600, fontSize: 12)),
|
||||
if (value.isNotEmpty) ...[
|
||||
const SizedBox(width: 7),
|
||||
Text(value,
|
||||
style: PangolinText.mono.copyWith(color: c.fg1, fontSize: 14, fontWeight: FontWeight.w600)),
|
||||
// 数值可作为最后收缩项(极端窄屏/三位数分钟才会省略)。
|
||||
Flexible(
|
||||
child: Text(value,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: PangolinText.mono.copyWith(color: c.fg1, fontSize: 14, fontWeight: FontWeight.w600)),
|
||||
),
|
||||
],
|
||||
const SizedBox(width: 8),
|
||||
const Spacer(),
|
||||
// 短标签「免费版」——每日额度由卡片本身表达,不再挤进右上角。
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 3),
|
||||
decoration: BoxDecoration(color: c.bgSubtle, borderRadius: BorderRadius.circular(PangolinRadius.full)),
|
||||
child: Text(t.quotaFree,
|
||||
child: Text(t.planFreeTag,
|
||||
style: PangolinText.caption.copyWith(color: c.fg3, fontWeight: FontWeight.w600, fontSize: 10.5)),
|
||||
),
|
||||
]),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: pangolin_vpn
|
||||
description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。
|
||||
publish_to: "none"
|
||||
version: 1.0.44+45
|
||||
version: 1.0.45+46
|
||||
|
||||
environment:
|
||||
sdk: ^3.5.0
|
||||
|
||||
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.4 KiB |
@@ -3,7 +3,7 @@
|
||||
; 前置: 先在 client/ 跑 `flutter build windows`(Release),产物在
|
||||
; ..\..\build\windows\x64\runner\Release
|
||||
#define MyAppName "穿山甲 Pangolin"
|
||||
#define MyAppVersion "1.0.44"
|
||||
#define MyAppVersion "1.0.45"
|
||||
#define MyAppPublisher "Pangolin"
|
||||
#define MyAppExeName "pangolin_vpn.exe"
|
||||
#define BuildDir "..\..\build\windows\x64\runner\Release"
|
||||
|
||||