diff --git a/client/lib/widgets/country_code.dart b/client/lib/widgets/country_code.dart index 22aeb8b..9ec7871 100644 --- a/client/lib/widgets/country_code.dart +++ b/client/lib/widgets/country_code.dart @@ -1,7 +1,10 @@ -// country_code.dart — 国家码方块 + 信号条 +// country_code.dart — 节点地区图标(国旗,未知码回退码块) + 信号条 +import 'package:country_flags/country_flags.dart'; import 'package:flutter/material.dart'; import '../pangolin_theme.dart'; +/// 节点地区图标:有效 2 字母地区码渲染国旗(SVG,填满裁切,全平台含 Windows 都显示); +/// 未知码(AUTO / ·· / 空等)回退为原 2 字母码块。选中态加 accent 边框环。 class CountryCode extends StatelessWidget { const CountryCode({super.key, required this.code, this.active = false, this.size = 38}); final String code; @@ -11,21 +14,43 @@ class CountryCode extends StatelessWidget { @override Widget build(BuildContext context) { final c = context.pangolin; + final radius = BorderRadius.circular(PangolinRadius.md); + final hasFlag = FlagCode.fromCountryCode(code.toUpperCase()) != null; + + if (!hasFlag) { + // 回退:原码块样式(AUTO / 占位 / 非地区码)。 + return Container( + width: size, + height: size, + alignment: Alignment.center, + decoration: BoxDecoration( + color: active ? c.accent : c.bgSubtle, + borderRadius: radius, + ), + child: Text( + code, + style: PangolinText.mono.copyWith( + fontSize: size * 0.31, + fontWeight: FontWeight.w600, + color: active ? PangolinColors.white : c.fg2, + ), + ), + ); + } + + // 国旗:外层 Container 控圆角 + 选中边框,内层 CountryFlag 以 BoxFit.cover 填满裁切。 return Container( width: size, height: size, - alignment: Alignment.center, + clipBehavior: Clip.antiAlias, decoration: BoxDecoration( - color: active ? c.accent : c.bgSubtle, - borderRadius: BorderRadius.circular(PangolinRadius.md), + borderRadius: radius, + border: active ? Border.all(color: c.accent, width: 2) : null, ), - child: Text( - code, - style: PangolinText.mono.copyWith( - fontSize: size * 0.31, - fontWeight: FontWeight.w600, - color: active ? PangolinColors.white : c.fg2, - ), + child: CountryFlag.fromCountryCode( + code.toUpperCase(), + width: size, + height: size, ), ); } diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 05fed38..c1434d9 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -11,6 +11,7 @@ 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 # 状态层(连接状态机 / 免费额度 / 节点选择 / 语言 / 主题) diff --git a/client/test/golden/goldens/desktop_stats.png b/client/test/golden/goldens/desktop_stats.png index d3a603b..eeeca88 100644 Binary files a/client/test/golden/goldens/desktop_stats.png and b/client/test/golden/goldens/desktop_stats.png differ diff --git a/client/test/golden/goldens/tablet_account.png b/client/test/golden/goldens/tablet_account.png new file mode 100644 index 0000000..fb2577d Binary files /dev/null and b/client/test/golden/goldens/tablet_account.png differ diff --git a/client/test/golden/goldens/tablet_connect.png b/client/test/golden/goldens/tablet_connect.png new file mode 100644 index 0000000..38ccad7 Binary files /dev/null and b/client/test/golden/goldens/tablet_connect.png differ diff --git a/client/test/golden/goldens/tablet_connect_dark.png b/client/test/golden/goldens/tablet_connect_dark.png new file mode 100644 index 0000000..59ca681 Binary files /dev/null and b/client/test/golden/goldens/tablet_connect_dark.png differ diff --git a/client/test/golden/goldens/tablet_connect_dark_zh.png b/client/test/golden/goldens/tablet_connect_dark_zh.png index 6b870e1..7ad5f22 100644 Binary files a/client/test/golden/goldens/tablet_connect_dark_zh.png and b/client/test/golden/goldens/tablet_connect_dark_zh.png differ diff --git a/client/test/golden/goldens/tablet_connect_light_en.png b/client/test/golden/goldens/tablet_connect_light_en.png index acb7b69..542f53e 100644 Binary files a/client/test/golden/goldens/tablet_connect_light_en.png and b/client/test/golden/goldens/tablet_connect_light_en.png differ diff --git a/client/test/golden/goldens/tablet_connect_light_zh.png b/client/test/golden/goldens/tablet_connect_light_zh.png index 6bd9ad7..22ac0b4 100644 Binary files a/client/test/golden/goldens/tablet_connect_light_zh.png and b/client/test/golden/goldens/tablet_connect_light_zh.png differ diff --git a/client/test/golden/goldens/tablet_servers.png b/client/test/golden/goldens/tablet_servers.png new file mode 100644 index 0000000..fd49b38 Binary files /dev/null and b/client/test/golden/goldens/tablet_servers.png differ diff --git a/client/test/golden/goldens/tablet_servers_dark_zh.png b/client/test/golden/goldens/tablet_servers_dark_zh.png index d02ac27..18b3e79 100644 Binary files a/client/test/golden/goldens/tablet_servers_dark_zh.png and b/client/test/golden/goldens/tablet_servers_dark_zh.png differ diff --git a/client/test/golden/goldens/tablet_servers_light_en.png b/client/test/golden/goldens/tablet_servers_light_en.png index e944598..d885db3 100644 Binary files a/client/test/golden/goldens/tablet_servers_light_en.png and b/client/test/golden/goldens/tablet_servers_light_en.png differ diff --git a/client/test/golden/goldens/tablet_servers_light_zh.png b/client/test/golden/goldens/tablet_servers_light_zh.png index 845f807..d595a1d 100644 Binary files a/client/test/golden/goldens/tablet_servers_light_zh.png and b/client/test/golden/goldens/tablet_servers_light_zh.png differ diff --git a/client/test/golden/goldens/tablet_stats.png b/client/test/golden/goldens/tablet_stats.png new file mode 100644 index 0000000..26f0457 Binary files /dev/null and b/client/test/golden/goldens/tablet_stats.png differ diff --git a/client/test/golden/goldens/tablet_stats_dark_zh.png b/client/test/golden/goldens/tablet_stats_dark_zh.png index 000337c..7e58cbf 100644 Binary files a/client/test/golden/goldens/tablet_stats_dark_zh.png and b/client/test/golden/goldens/tablet_stats_dark_zh.png differ diff --git a/client/test/golden/goldens/tablet_stats_light_en.png b/client/test/golden/goldens/tablet_stats_light_en.png index aaf6215..35e3135 100644 Binary files a/client/test/golden/goldens/tablet_stats_light_en.png and b/client/test/golden/goldens/tablet_stats_light_en.png differ diff --git a/client/test/golden/goldens/tablet_stats_light_zh.png b/client/test/golden/goldens/tablet_stats_light_zh.png index d3833e6..bdb3a6d 100644 Binary files a/client/test/golden/goldens/tablet_stats_light_zh.png and b/client/test/golden/goldens/tablet_stats_light_zh.png differ