feat: bugfix

This commit is contained in:
speakeloudest 2025-11-27 22:05:44 -08:00
parent 83e742a9dc
commit adcde623c7
10 changed files with 65 additions and 48 deletions

View File

@ -1309,6 +1309,9 @@ class AppConfig {
/// ID
String kr_website_id = "";
///
String device_limit = '0';
///
bool kr_is_daytime = true;

View File

@ -63,6 +63,7 @@ class KRSiteInfo {
final String customHtml;
final String customData;
final String crispId;
final String deviceLimit;
KRSiteInfo({
required this.host,
@ -73,10 +74,12 @@ class KRSiteInfo {
required this.customHtml,
required this.customData,
required this.crispId,
required this.deviceLimit,
});
factory KRSiteInfo.fromJson(Map<String, dynamic> json) {
String crispId = '0';
String deviceLimit = '0';
// custom_data kr_website_id
try {
@ -89,6 +92,16 @@ class KRSiteInfo {
// 使
}
// custom_data deviceLimit
try {
final customDataStr = json['custom_data'] ?? '';
if (customDataStr.isNotEmpty) {
final customDataJson = jsonDecode(customDataStr) as Map<String, dynamic>;
deviceLimit = (customDataJson['deviceLimit'] ?? 0).toString();
}
} catch (e) {
// 使
}
return KRSiteInfo(
host: json['host'] ?? '',
siteName: json['site_name'] ?? '',
@ -98,6 +111,7 @@ class KRSiteInfo {
customHtml: json['custom_html'] ?? '',
customData: json['custom_data'] ?? '',
crispId: crispId,
deviceLimit: deviceLimit,
);
}

View File

@ -37,10 +37,12 @@ class HIMenuView extends GetView<HIMenuController> {
mainAxisSize: MainAxisSize.min, // Column
children: [
Obx(() {
final account = KRAppRunData.getInstance().kr_account.value ?? '未登录';
final account = KRAppRunData.getInstance().kr_account.value;
final isDeviceLogin = account != null && account.startsWith('9000');
final accountText = isDeviceLogin ? '待绑定' : 'ID: ${KRAppRunData.getInstance().kr_account.value.toString()}';
return UserInfoCard(
controller: controller,
userId: account,
userId: accountText,
);
}),

View File

@ -58,7 +58,7 @@ class UserInfoCard extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'ID: $userId',
userId,
overflow: TextOverflow.ellipsis,
maxLines: 1,
style: TextStyle(

View File

@ -222,22 +222,22 @@ class HIUserInfoController extends GetxController {
String iconName = 'devices';
if (userAgent.contains('Android') || userAgent.toLowerCase().contains('android')) {
deviceType = AppTranslations.kr_deviceManagement.deviceTypeAndroid;
deviceType = 'Android' ;// AppTranslations.kr_deviceManagement.deviceTypeAndroid;
iconName = 'phone_android';
} else if (userAgent.contains('iOS') || userAgent.contains('iPhone') || userAgent.toLowerCase().contains('ios')) {
deviceType = AppTranslations.kr_deviceManagement.deviceTypeIos;
deviceType = 'iPhone'; // AppTranslations.kr_deviceManagement.deviceTypeIos;
iconName = 'phone_iphone';
} else if (userAgent.contains('iPad')) {
deviceType = AppTranslations.kr_deviceManagement.deviceTypeIpad;
deviceType = 'iPad';// AppTranslations.kr_deviceManagement.deviceTypeIpad;
iconName = 'tablet';
} else if (userAgent.contains('macOS') || userAgent.contains('Mac') || userAgent.toLowerCase().contains('mac')) {
deviceType = AppTranslations.kr_deviceManagement.deviceTypeMacos;
deviceType = 'Mac';// AppTranslations.kr_deviceManagement.deviceTypeMacos;
iconName = 'desktop_mac';
} else if (userAgent.contains('Windows') || userAgent.toLowerCase().contains('windows')) {
deviceType = AppTranslations.kr_deviceManagement.deviceTypeWindows;
deviceType = 'Windows'; //AppTranslations.kr_deviceManagement.deviceTypeWindows;
iconName = 'computer';
} else if (userAgent.contains('Linux') || userAgent.toLowerCase().contains('linux')) {
deviceType = AppTranslations.kr_deviceManagement.deviceTypeLinux;
deviceType = 'Linux';//AppTranslations.kr_deviceManagement.deviceTypeLinux;
iconName = 'computer';
}

View File

@ -18,6 +18,7 @@ import 'package:kaer_with_panels/app/widgets/hi_help_entrance.dart';
import 'package:kaer_with_panels/app/common/app_run_data.dart';
import 'package:kaer_with_panels/app/modules/kr_home/controllers/kr_home_controller.dart';
import 'package:kaer_with_panels/app/widgets/dialogs/hi_dialog.dart';
import 'package:kaer_with_panels/app/common/app_config.dart';
class HIUserInfoView extends GetView<HIUserInfoController> {
const HIUserInfoView({super.key});
@ -70,32 +71,19 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
Obx(() {
final account = KRAppRunData.getInstance().kr_account.value;
final isDeviceLogin = account != null && account.startsWith('9000');
if (isDeviceLogin) return const SizedBox();
final accountText = isDeviceLogin ? '待绑定' : 'ID: ${KRAppRunData.getInstance().kr_account.value.toString()}';
return Text(
account ?? '',
accountText,
style: TextStyle(
color: Colors.white,
fontSize: 20.sp,
fontSize: 20,
fontWeight: FontWeight.bold,
height: 0.9,
//height: 0.9,
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
);
}),
Obx(() {
final userId = KRAppRunData.getInstance().kr_userId.value;
return Text(
'ID: ${(userId != null && userId.toString().isNotEmpty) ? userId : ''}',
style: TextStyle(
color: Colors.white.withOpacity(0.85),
fontSize: 14.sp,
fontWeight: FontWeight.w500,
),
);
}),
Obx(() {
final currentSubscribe =
controller.kr_subscribeService.kr_currentSubscribe.value;
@ -167,10 +155,10 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
}
},
child: Container(
margin: EdgeInsets.symmetric(horizontal: 0.w).copyWith(bottom: 10.w), //
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 10.w),
margin: EdgeInsets.symmetric(horizontal: 0).copyWith(bottom: 10), //
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(22.w),
borderRadius: BorderRadius.circular(22),
border: Border.all(color: Colors.white, width: 2),
),
child: Row(
@ -180,7 +168,7 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
isDeviceLogin ? '绑定邮箱' : '修改密码',
style: TextStyle(
color: Colors.white,
fontSize: 16.sp,
fontSize: 16,
fontWeight: FontWeight.w600,
),
),
@ -200,7 +188,7 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
if (controller.isLoading.value) {
// 使 Padding
return Padding(
padding: EdgeInsets.only(top: 20.w),
padding: EdgeInsets.only(top: 20),
child: const Center(
child: CircularProgressIndicator(),
),
@ -208,7 +196,7 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
}
return Padding(
padding: EdgeInsets.symmetric(horizontal: 0.w),
padding: EdgeInsets.symmetric(horizontal: 0),
child: GridView.builder(
// 1. GridView SingleChildScrollView
physics: const NeverScrollableScrollPhysics(),
@ -217,9 +205,10 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
// 3.
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, //
crossAxisSpacing: 10.w, //
mainAxisSpacing: 10.w, //
childAspectRatio: 1.5, //
crossAxisSpacing: 10, //
mainAxisSpacing: 10, //
mainAxisExtent: 76,
// childAspectRatio: 1.5, //
),
// 4. itemCount itemBuilder
itemCount: controller.devices.length + 1,
@ -233,13 +222,13 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
onDelete: (id) {
HIDialog.show(
customMessageWidget: Padding(
padding: EdgeInsets.only(top: 16.w),
padding: EdgeInsets.only(top: 16),
child: Text(
'请确认是否移除此设备?',
style: KrAppTextStyle(
color:
Theme.of(context).textTheme.bodyMedium?.color,
fontSize: 14.sp,
fontSize: 14,
fontWeight: FontWeight.w600,
),
),
@ -411,9 +400,9 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
children: [
//
Container(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 14.w),
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 14),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.w), //
borderRadius: BorderRadius.circular(24), //
border: Border.all(color: Colors.white, width: 2),
),
child: Column(
@ -422,25 +411,25 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
children: [
Row(
children: [
Icon(_getIconData(iconName), color: Colors.white, size: 18.w),
SizedBox(width: 6.w),
Icon(_getIconData(iconName), color: Colors.white, size: 18),
SizedBox(width: 6),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'设备:${_extractDeviceModel(userAgent, deviceType)}',
'设备:${deviceType}',
style: TextStyle(
color: Colors.white,
fontSize: 10.sp, //
fontSize: 10, //
fontWeight: FontWeight.w600),
),
SizedBox(height: 4.h),
SizedBox(height: 4),
Text(
'SN: ${identifier.substring(0, identifier.length > 4 ? 4 : identifier.length)}$id',
style: TextStyle(
color: Colors.white.withOpacity(0.9),
fontSize: 10.sp,
fontSize: 10,
fontWeight: FontWeight.w500),
maxLines: 1,
overflow: TextOverflow.ellipsis,
@ -494,8 +483,8 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
Widget _buildAddDeviceCard() {
return GestureDetector(
onTap: () {
print('可用设备 ${controller.kr_subscribeService.kr_currentSubscribe}');
//
final device_limit = AppConfig.getInstance().device_limit;
HIDialog.show(
customMessageWidget: Padding(
padding: EdgeInsets.only(top: 16.w, bottom: 16.w),
@ -514,7 +503,7 @@ class HIUserInfoView extends GetView<HIUserInfoController> {
),
SizedBox(height: 20.w),
Text(
'每个账号最多允许同时使用2台设备同时在线',
"每个账号最多允许同时使用${device_limit}台设备同时在线",
style: KrAppTextStyle(
color: Colors.black,
fontSize: 14.sp,

View File

@ -201,6 +201,7 @@ class KRDeleteAccountView extends GetView<KRDeleteAccountController> {
child: TextField(
controller: controller.kr_codeController,
keyboardType: TextInputType.number,
textInputAction: TextInputAction.done,
style: KrAppTextStyle(
fontSize: 16,
color: Colors.white,

View File

@ -416,4 +416,4 @@ class KRLoginView extends GetView<KRLoginController> {
controller.kr_check();
}
}
}
}

View File

@ -170,13 +170,16 @@ class KRSplashController extends GetxController {
print('📞 准备调用 KRSiteConfigService().initialize()...');
final success = await KRSiteConfigService().initialize();
final crispId = await KRSiteConfigService().getCrispId();
final device_limit = await KRSiteConfigService().getDeviceLimit();
print('📞 KRSiteConfigService().initialize() 返回: $success');
if (success) {
final config = AppConfig.getInstance();
config.kr_website_id = crispId;
config.device_limit = device_limit;
print('📞 KRSiteConfigService().initialize() 返回: $crispId');
print('AppConfig website_id 已更新为: ${config.kr_website_id}');
print('AppConfig device_limit 已更新为: ${config.device_limit}');
// print('[SPLASH_TIMING] ✅ 网站配置初始化成功');
// await _kr_checkAndPerformDeviceLogin();

View File

@ -341,6 +341,11 @@ class KRSiteConfigService extends ChangeNotifier {
return _siteConfig?.site.crispId ?? '0';
}
///
String getDeviceLimit() {
return _siteConfig?.site.deviceLimit ?? '0';
}
///
void reset() {
_siteConfig = null;