安卓15部分机型出现界面不兼容并且UI库有BUG,MD
Build Android APK / 编译 libcore.aar (push) Has been cancelled
Build Android APK / 编译 Android APK (release) (push) Has been cancelled
Build Android APK / 创建 GitHub Release (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Android) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Windows) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (macOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Linux) (push) Has been cancelled
Build Multi-Platform / 构建 Android APK (push) Has been cancelled
Build Multi-Platform / 构建 Windows (push) Has been cancelled
Build Multi-Platform / 构建 macOS (push) Has been cancelled
Build Multi-Platform / 构建 Linux (push) Has been cancelled
Build Multi-Platform / 构建 iOS (push) Has been cancelled
Build Multi-Platform / 创建 Release (push) Has been cancelled
Build Windows / 编译 libcore (Windows) (push) Has been cancelled
Build Windows / build (push) Has been cancelled
Build Multi-Platform / 编译 libcore (iOS/tvOS) (push) Has been cancelled

(cherry picked from commit 010405edda74bdb0251dcff2e32482edae2c9976)
This commit is contained in:
2025-11-02 02:38:07 -08:00
committed by speakeloudest
parent 0ec2f72a93
commit 7a223d614b
7 changed files with 96 additions and 314 deletions
@@ -12,8 +12,6 @@ import '../widgets/kr_subscription_card.dart';
import 'kr_home_trial_card.dart';
import 'kr_home_last_day_card.dart';
import '../../../utils/kr_log_util.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
class KRHomeBottomPanel extends GetView<KRHomeController> {
const KRHomeBottomPanel({super.key});
@@ -109,25 +107,6 @@ class KRHomeBottomPanel extends GetView<KRHomeController> {
Builder(builder: (context) {
KRLogUtil.kr_i('🔹 渲染订阅卡片,margin: top=${12}, left=${12}, right=${12}', tag: 'HomeBottomPanel');
// 🔧 紧急诊断:异步写文件确认订阅卡片被渲染(不阻塞UI)
Future.microtask(() async {
try {
final dir = await getApplicationDocumentsDirectory();
final debugFile = File('${dir.path}/SUBSCRIPTION_CARD_RENDER_DEBUG.txt');
await debugFile.writeAsString(
'=' * 60 + '\n'
'🔹 订阅卡片正在渲染!\n'
'时间: ${DateTime.now()}\n'
'版本标识: Android15_Fix_v6_Final\n'
'=' * 60 + '\n',
mode: FileMode.append,
);
print('🔹 [BottomPanel] ✅ 订阅卡片渲染日志已写入文件: ${debugFile.path}');
} catch (e) {
print('🔹 [BottomPanel] ❌ 写入订阅卡片渲染日志失败: $e');
}
});
return Container(
margin: EdgeInsets.only(top: 12, left: 12, right: 12),
child: const KRSubscriptionCard(),
@@ -1,7 +1,6 @@
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:kaer_with_panels/app/localization/app_translations.dart';
import 'package:kaer_with_panels/app/widgets/kr_app_text_style.dart';
import 'package:kaer_with_panels/app/widgets/kr_country_flag.dart';
@@ -71,20 +70,20 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
/// 构建专用服务器列表
Widget _buildServerList(BuildContext context) {
return Container(
width: ScreenUtil().screenWidth,
height: 360.h, // 减小高度比例
width: MediaQuery.of(context).size.width,
height: 360, // 减小高度比例
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.w),
topRight: Radius.circular(20.w),
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
),
child: Column(
children: [
// 标题栏
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 12.h),
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 12),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@@ -103,7 +102,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
},
child: Icon(
Icons.close,
size: 24.w,
size: 24,
color: Theme.of(context).textTheme.bodyMedium?.color,
),
),
@@ -125,19 +124,19 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
);
}
return ListView.builder(
padding: EdgeInsets.symmetric(horizontal: 16.w),
padding: EdgeInsets.symmetric(horizontal: 16),
itemCount: controller.kr_subscribeService.groupOutboundList.length,
itemBuilder: (context, index) {
final group =
controller.kr_subscribeService.groupOutboundList[index];
return Container(
margin: EdgeInsets.only(bottom: 8.w),
margin: EdgeInsets.only(bottom: 8),
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(12.w),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: Theme.of(context).dividerColor.withOpacity(0.1),
width: 1.w,
width: 1,
),
),
child: InkWell(
@@ -146,18 +145,18 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
controller.kr_currentListStatus.value =
KRHomeViewsListStatus.kr_serverSubscribeList;
},
borderRadius: BorderRadius.circular(12.w),
borderRadius: BorderRadius.circular(12),
child: Padding(
padding: EdgeInsets.all(12.w),
padding: EdgeInsets.all(12),
child: Row(
children: [
KRNetworkImage(
kr_imageUrl: group.icon,
kr_width: 32.w,
kr_height: 32.w,
kr_width: 32,
kr_height: 32,
kr_fit: BoxFit.cover,
),
SizedBox(width: 12.w),
SizedBox(width: 12),
Expanded(
child: Text(
group.tag,
@@ -171,7 +170,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
Icon(
Icons.arrow_forward_ios,
size: 16.w,
size: 16,
color: Theme.of(context).textTheme.bodySmall?.color,
),
],
@@ -208,7 +207,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
return _kr_buildListContainer(
context,
child: ListView.builder(
padding: EdgeInsets.fromLTRB(16.w, 8.w, 16.w, 0),
padding: EdgeInsets.fromLTRB(16, 8, 16, 0),
itemCount:
controller.kr_subscribeService.countryOutboundList.length,
itemBuilder: (context, index) {
@@ -222,15 +221,15 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
country.isExpand.value = !country.isExpand.value;
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 12.h),
padding: EdgeInsets.symmetric(vertical: 12),
child: Row(
children: [
KRCountryFlag(
countryCode: country.country,
width: 40.w,
height: 40.w,
width: 40,
height: 40,
),
SizedBox(width: 12.w),
SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -255,7 +254,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
country.isExpand.value
? Icons.keyboard_arrow_down
: Icons.arrow_forward_ios,
size: 16.w,
size: 16,
color:
Theme.of(context).textTheme.bodySmall?.color,
);
@@ -272,7 +271,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
return ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
padding: EdgeInsets.only(left: 24.w),
padding: EdgeInsets.only(left: 24),
itemCount: country.outboundList.length,
itemBuilder: (context, index) {
final server = country.outboundList[index];
@@ -311,13 +310,13 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
},
child: Container(
padding: EdgeInsets.symmetric(
vertical: 8.h,
horizontal: 16.w,
vertical: 8,
horizontal: 16,
),
decoration: BoxDecoration(
// 添加轻微的背景色以区分点击区域
color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(8.w),
borderRadius: BorderRadius.circular(8),
),
child: _kr_buildNodeListItem(
context,
@@ -328,9 +327,9 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
// 添加分隔线
if (index < country.outboundList.length - 1)
Divider(
height: 1.w,
indent: 16.w,
endIndent: 16.w,
height: 1,
indent: 16,
endIndent: 16,
color: Theme.of(context)
.dividerColor
.withOpacity(0.1),
@@ -341,7 +340,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
);
}),
Divider(
height: 1.w,
height: 1,
color: Theme.of(context).dividerColor.withOpacity(0.1),
),
],
@@ -377,7 +376,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
return _kr_buildListContainer(
context,
child: ListView.builder(
padding: EdgeInsets.fromLTRB(16.w, 16.w, 16.w, 0),
padding: EdgeInsets.fromLTRB(16, 16, 16, 0),
itemCount: servers.length,
itemBuilder: (context, index) {
final server = servers[index];
@@ -406,7 +405,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
}
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 4.h),
padding: EdgeInsets.symmetric(vertical: 4),
child: _kr_buildNodeListItem(
context,
item: server,
@@ -415,7 +414,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
if (index < servers.length - 1)
Divider(
height: 1.w,
height: 1,
color: Theme.of(context).dividerColor.withOpacity(0.1),
),
],
@@ -435,12 +434,12 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
required Widget listContent,
}) {
return Container(
width: ScreenUtil().screenWidth,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20.w),
topRight: Radius.circular(20.w),
topLeft: Radius.circular(20),
topRight: Radius.circular(20),
),
),
child: Column(
@@ -453,13 +452,13 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
onClose: () =>
controller.kr_currentListStatus.value = KRHomeViewsListStatus.kr_none,
),
SizedBox(height: 16.h),
SizedBox(height: 16),
Expanded(
child: Column(
children: [
Expanded(child: listContent),
// 添加底部间距
SizedBox(height: 12.h),
SizedBox(height: 12),
],
),
),
@@ -476,7 +475,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
VoidCallback? onClose,
}) {
return Padding(
padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 16.w),
padding: EdgeInsets.only(left: 16, right: 16, top: 16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@@ -487,11 +486,11 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
onTap: onBack,
child: Icon(
Icons.arrow_back_ios,
size: 20.w,
size: 20,
color: Theme.of(context).textTheme.bodyMedium?.color,
),
),
SizedBox(width: 8.w),
SizedBox(width: 8),
],
Text(
title,
@@ -508,7 +507,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
onTap: onClose,
child: Icon(
Icons.close,
size: 24.w,
size: 24,
color: Theme.of(context).textTheme.bodyMedium?.color,
),
),
@@ -524,10 +523,10 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
required Widget child,
}) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 16.w),
margin: EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
color: Theme.of(context).cardColor,
borderRadius: BorderRadius.circular(12.w),
borderRadius: BorderRadius.circular(12),
),
child: child,
);
@@ -553,17 +552,17 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
return Container(
key: ValueKey(item.id),
padding: EdgeInsets.symmetric(vertical: 8.h),
padding: EdgeInsets.symmetric(vertical: 8),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// 🔧 修改:显示国旗代替图标
KRCountryFlag(
countryCode: item.country,
width: 36.w,
height: 36.w,
width: 36,
height: 36,
),
SizedBox(width: 8.w),
SizedBox(width: 8),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -582,12 +581,12 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
Obx(
() => controller.kr_cutTag.value == item.tag
? Container(
margin: EdgeInsets.only(left: 4.w),
margin: EdgeInsets.only(left: 4),
padding: EdgeInsets.symmetric(
horizontal: 4.w, vertical: 1.h),
horizontal: 4, vertical: 1),
decoration: BoxDecoration(
color: krModernGreenLight.withOpacity(0.1),
borderRadius: BorderRadius.circular(4.w),
borderRadius: BorderRadius.circular(4),
),
child: Text(
AppTranslations.kr_home.selected,
@@ -602,7 +601,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
],
),
SizedBox(height: 2.h),
SizedBox(height: 2),
Text(
item.city,
style: KrAppTextStyle(
@@ -669,20 +668,20 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
return _kr_buildListContainer(
context,
child: ListView(
padding: EdgeInsets.fromLTRB(16.w, 0, 16.w, 0),
padding: EdgeInsets.fromLTRB(16, 0, 16, 0),
children: [
// 延迟测试按钮作为第一个列表项
InkWell(
onTap: () => controller.kr_urlTest(),
child: Container(
padding: EdgeInsets.symmetric(vertical: 8.h),
margin: EdgeInsets.only(top: 8.w), // 添加上方间距
padding: EdgeInsets.symmetric(vertical: 8),
margin: EdgeInsets.only(top: 8), // 添加上方间距
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 36.w,
height: 36.w,
width: 36,
height: 36,
decoration: BoxDecoration(
color: krModernGreenLight.withOpacity(0.1),
shape: BoxShape.circle,
@@ -691,17 +690,17 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
child: controller.kr_isLatency.value
? KRSimpleLoading(
color: krModernGreen,
size: 24.w,
size: 24,
duration: const Duration(milliseconds: 800),
)
: Icon(
Icons.speed,
size: 24.w,
size: 24,
color: krModernGreen,
),
),
),
SizedBox(width: 8.w),
SizedBox(width: 8),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
@@ -728,7 +727,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
),
if (!controller.kr_isLatency.value) ...[
SizedBox(height: 2.h),
SizedBox(height: 2),
Text(
AppTranslations.kr_home.refreshLatencyDesc,
style: KrAppTextStyle(
@@ -746,7 +745,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
if (!controller.kr_isLatency.value)
Icon(
Icons.arrow_forward_ios,
size: 12.w,
size: 12,
color: Theme.of(context).textTheme.bodySmall?.color,
),
],
@@ -755,7 +754,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
// 分隔线
Divider(
height: 16.w,
height: 16,
color: Theme.of(context).dividerColor.withOpacity(0.1),
),
// Auto 选项
@@ -775,19 +774,19 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
}
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 8.h),
padding: EdgeInsets.symmetric(vertical: 8),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
KrLocalImage(
imageName: "home_list_location",
width: 36.w,
height: 36.w,
width: 36,
height: 36,
color: controller.kr_cutTag.value == 'auto'
? Colors.green
: null,
),
SizedBox(width: 8.w),
SizedBox(width: 8),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -808,13 +807,13 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
if (controller.kr_cutTag.value == 'auto')
Container(
margin: EdgeInsets.only(left: 4.w),
margin: EdgeInsets.only(left: 4),
padding: EdgeInsets.symmetric(
horizontal: 4.w, vertical: 1.h),
horizontal: 4, vertical: 1),
decoration: BoxDecoration(
color:
krModernGreenLight.withOpacity(0.1),
borderRadius: BorderRadius.circular(4.w),
borderRadius: BorderRadius.circular(4),
),
child: Text(
AppTranslations.kr_home.selected,
@@ -827,7 +826,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
],
),
SizedBox(height: 2.h),
SizedBox(height: 2),
Obx(() {
// 获取当前自动选择的节点
String selectedNode =
@@ -903,7 +902,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
),
// 分隔线
Divider(
height: 16.w,
height: 16,
color: Theme.of(context).dividerColor.withOpacity(0.1),
),
// 节点列表
@@ -929,7 +928,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
}
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 4.h),
padding: EdgeInsets.symmetric(vertical: 4),
child: _kr_buildNodeListItem(
context,
item: node,
@@ -939,7 +938,7 @@ class KRHomeNodeListView extends GetView<KRHomeController> {
if (node !=
controller.kr_subscribeService.allList.last)
Divider(
height: 1.w,
height: 1,
color: Theme.of(context)
.dividerColor
.withOpacity(0.1),