Browse Source

feat(设置): 添加调试信息显示功能和设备信息获取

- 在VersionUpdateService中添加国家地区编码、语言编码和服务器地址的获取
- 在SettingsController中实现隐藏点击功能,可显示调试信息
- 在设置页面添加调试信息展示区域,显示应用版本和设备信息
weicu
lxm 1 year ago
parent
commit
e78e266bf7
  1. 13
      lib/data/services/version_update_service.dart
  2. 68
      lib/modules/settings/controllers/settings_controller.dart
  3. 44
      lib/modules/settings/views/settings_view.dart

13
lib/data/services/version_update_service.dart

@ -27,6 +27,10 @@ class VersionUpdateService extends GetxService {
static bool? _isShowTourists = false; //是否显示游客登录
static DateTime? _lastCheckTime; //上次检查时间
static const int _cacheIntervalMinutes = 10; // 可配置化
static final String? _countryCode = Get.deviceLocale?.countryCode; //国家地区编码
static final String? _languageCode = Get.deviceLocale?.languageCode; //语言编码
// ignore: non_constant_identifier_names
static final String? _SERVER_URL = dotenv.env['SERVER_URL']; //服务器地址
// 添加 getter 方法来访问缓存的静态数据
/// 获取缓存的应用版本
@ -62,6 +66,15 @@ class VersionUpdateService extends GetxService {
/// 获取上次检查时间
DateTime? get lastCheckTime => _lastCheckTime;
/// 获取缓存的国家地区编码
String get cachedCountryCode => _countryCode ?? '';
/// 获取缓存的语言编码
String get cachedLanguageCode => _languageCode ?? '';
/// 获取缓存的服务器地址
String get cachedServerUrl => _SERVER_URL ?? '';
final Logger _logger = Logger();
/// 获取当前应用版本信息

68
lib/modules/settings/controllers/settings_controller.dart

@ -1,18 +1,19 @@
import 'dart:async';
import 'package:agent_service/agent_service.dart';
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:get_storage/get_storage.dart';
import 'package:logger/logger.dart';
import 'package:package_info_plus/package_info_plus.dart';
import '../../../core/themes/theme_service.dart';
import '../../../data/services/speech_factory.dart';
import '../../../routes/app_routes.dart';
import '../models/language_model.dart';
import 'package:logger/logger.dart';
import '../../../data/services/ble_manager.dart';
import '../../../data/services/language_manager.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'dart:async';
import '../../../data/services/version_update_service.dart';
import '../../common/widgets/version_update_dialog.dart';
@ -128,7 +129,10 @@ class SettingsController extends GetxController {
bool isCheckingUpdate = false; //状态锁,防止重复检查
DateTime? lastCheckTime; // 添加上次检查时间记录
// 隐藏功能变量
int _clickCount = 0; // 点击计数
DateTime? _lastClickTime; // 上次点击时间
final RxBool showDebugInfo = false.obs; // 是否显示调试信息
@override
void onInit() {
@ -548,4 +552,58 @@ class SettingsController extends GetxController {
isCheckingUpdate = false;
}
}
/// 处理隐藏功能点击
void handleSecretTap() {
final now = DateTime.now();
// 如果距离上次点击超过2秒,重置计数
if (_lastClickTime != null &&
now.difference(_lastClickTime!).inSeconds > 2) {
_clickCount = 0;
}
_lastClickTime = now;
_clickCount++;
// 点击5次后显示版本信息
if (_clickCount >= 5) {
showDebugInfo.value = !showDebugInfo.value;
_clickCount = 0;
// Get.snackbar(
// showDebugInfo.value ? '调试信息已显示' : '调试信息已隐藏',
// '版本服务数据',
// snackPosition: SnackPosition.TOP,
// backgroundColor: Colors.blue.withOpacity(0.8),
// colorText: Colors.white,
// duration: const Duration(seconds: 1),
// );
}
}
/// 获取当前应用数据
String getSomeAppData() {
try {
final versionService = Get.find<VersionUpdateService>();
return '''
应用版本: ${versionService.cachedAppVersion}
构建号: ${versionService.cachedBuildNumber}
平台: ${versionService.cachedPlatform}
设备品牌: ${versionService.cachedDeviceBrand}
渠道: ${versionService.cachedChannel}
最新版本: ${versionService.cachedLatestVersion}
有更新: ${versionService.cachedHasUpdate}
强制更新: ${versionService.cachedIsForceUpdate}
更新链接: ${versionService.cachedUpdateUrl}
游客模式: ${versionService.cachedShowTourists}
最近版本检查时间: ${versionService.lastCheckTime ?? '未检查'}
国家地区编码: ${versionService.cachedCountryCode}
语言编码: ${versionService.cachedLanguageCode}
服务器地址: ${versionService.cachedServerUrl}
''';
} catch (e) {
return '获取版本服务数据失败: $e';
}
}
}

44
lib/modules/settings/views/settings_view.dart

@ -657,8 +657,7 @@ class SettingsView extends GetView<SettingsController> {
),
],
),
child: ClipRRect(
borderRadius: BorderRadius.circular(16.r),
clipBehavior: Clip.antiAlias,
child: BackdropFilter(
filter: isDarkMode
? ImageFilter.blur(sigmaX: 5, sigmaY: 5)
@ -668,7 +667,9 @@ class SettingsView extends GetView<SettingsController> {
// 左侧应用信息区域 - 使用固定宽度
Row(
children: [
Container(
GestureDetector(
onTap: controller.handleSecretTap, // 点击事件
child: Container(
width: 40.w,
height: 40.w,
decoration: BoxDecoration(
@ -690,6 +691,7 @@ class SettingsView extends GetView<SettingsController> {
color: Colors.white,
),
),
),
SizedBox(width: 12.w),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -768,7 +770,6 @@ class SettingsView extends GetView<SettingsController> {
),
),
),
),
SizedBox(height: 16.h),
Center(
child: Column(
@ -793,7 +794,7 @@ class SettingsView extends GetView<SettingsController> {
Get.locale?.countryCode == 'CN')
InkWell(
onTap: () => Get.to(
() => WebViewPage(
() => const WebViewPage(
url: 'https://beian.miit.gov.cn',
title: 'ICP备案信息',
),
@ -809,6 +810,39 @@ class SettingsView extends GetView<SettingsController> {
],
),
),
// 隐藏的调试信息
Obx(() => controller.showDebugInfo.value
? Container(
margin: EdgeInsets.only(top: 12.h),
padding: EdgeInsets.all(12.w),
decoration: BoxDecoration(
color: isDarkMode ? Colors.grey[800] : Colors.grey[100],
borderRadius: BorderRadius.circular(8.r),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'版本服务调试信息',
style: TextStyle(
fontSize: 12.sp,
fontWeight: FontWeight.bold,
color: isDarkMode ? Colors.white : Colors.black,
),
),
SizedBox(height: 8.h),
Text(
controller.getSomeAppData(),
style: TextStyle(
fontSize: 10.sp,
fontFamily: 'monospace',
color: isDarkMode ? Colors.white70 : Colors.black87,
),
),
],
),
)
: const SizedBox.shrink()),
],
);
}

Loading…
Cancel
Save