Selaa lähdekoodia

fix: 修复windows下设备id的空字符问题,并添加格式化函数。

Tony 1 kuukausi sitten
vanhempi
commit
70bfe7dac3

+ 2 - 2
lib/app/modules/account/views/account_view.dart

@@ -12,6 +12,7 @@ import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
 import '../../../../config/theme/dark_theme_colors.dart';
 import '../../../../config/translations/strings_enum.dart';
 import '../../../../utils/device_manager.dart';
+import '../../../../utils/formater.dart';
 import '../../../constants/enums.dart';
 import '../../../data/sp/ix_sp.dart';
 import '../../../components/ix_snackbar.dart';
@@ -424,8 +425,7 @@ class AccountView extends BaseView<AccountController> {
             _buildSettingItem(
               icon: IconFont.icon14,
               iconColor: Get.reactiveTheme.shadowColor,
-              title:
-                  'UID ${DeviceManager.getCacheDeviceId().length > 12 ? '${DeviceManager.getCacheDeviceId().substring(0, 6)}***${DeviceManager.getCacheDeviceId().substring(DeviceManager.getCacheDeviceId().length - 6)}' : DeviceManager.getCacheDeviceId()}',
+              title: 'UID ${formatDeviceId(DeviceManager.getCacheDeviceId())}',
               showInfo: true,
               trailing: ClickOpacity(
                 onTap: () {

+ 2 - 3
lib/app/modules/precode/widgets/precode_save_dialog.dart

@@ -7,6 +7,7 @@ import 'package:nomo/app/widgets/click_opacity.dart';
 
 import '../../../../config/theme/dark_theme_colors.dart';
 import '../../../../config/translations/strings_enum.dart';
+import '../../../../utils/formater.dart';
 import '../../../constants/assets.dart';
 import '../../../widgets/ix_image.dart';
 import '../../../widgets/submit_btn.dart';
@@ -168,9 +169,7 @@ class PrecodeSaveDialog extends StatelessWidget {
   /// UID 信息
   Widget _buildUidInfo() {
     final uid = controller.uid;
-    final displayUid = uid.length > 12
-        ? 'UID ${uid.substring(0, 6)}***${uid.substring(uid.length - 6)}'
-        : 'UID $uid';
+    final displayUid = 'UID ${formatDeviceId(uid)}';
 
     return Text(
       displayUid,

+ 2 - 1
lib/app/modules/setting/views/setting_view.dart

@@ -15,6 +15,7 @@ import 'package:nomo/config/theme/theme_extensions/theme_extension.dart';
 import 'package:nomo/utils/device_manager.dart';
 import 'package:nomo/utils/misc.dart';
 
+import '../../../../utils/formater.dart';
 import '../../../constants/enums.dart';
 import '../../../data/sp/ix_sp.dart';
 import '../../../../config/theme/dark_theme_colors.dart';
@@ -164,7 +165,7 @@ class SettingView extends BaseView<SettingController> {
                 icon: IconFont.icon14,
                 iconColor: Get.reactiveTheme.shadowColor,
                 title:
-                    'UID ${DeviceManager.getCacheDeviceId().length > 12 ? '${DeviceManager.getCacheDeviceId().substring(0, 6)}***${DeviceManager.getCacheDeviceId().substring(DeviceManager.getCacheDeviceId().length - 6)}' : DeviceManager.getCacheDeviceId()}',
+                    'UID ${formatDeviceId(DeviceManager.getCacheDeviceId())}',
                 showInfo: true,
                 disableFeedback: true,
                 trailing: ClickOpacity(

+ 3 - 1
lib/utils/device_manager.dart

@@ -77,7 +77,9 @@ class DeviceManager {
 
   /// 获取缓存
   static String getCacheDeviceId() {
-    return IXSP.getDeviceId() ?? '';
+    return (IXSP.getDeviceId() ?? '')
+        .replaceAll(RegExp(r'[\u0000-\u001F\u007F]'), '')
+        .trim();
   }
 
   /// 从存储位置获取设备ID

+ 8 - 0
lib/utils/formater.dart

@@ -0,0 +1,8 @@
+/// 格式化设备 ID,超过 12 位时进行脱敏处理(保留前6后6)
+String formatDeviceId(String deviceId) {
+  final id = deviceId.trim();
+  if (id.length > 12) {
+    return '${id.substring(0, 6)}***${id.substring(id.length - 6)}';
+  }
+  return id;
+}

+ 25 - 10
lib/utils/machine_guid_windows.dart

@@ -23,7 +23,7 @@ String getMachineGuid() {
     } finally {
       _Native.RegCloseKey(hkey);
     }
-  });
+  }).replaceAll(RegExp(r'[\u0000-\u001F\u007F]'), '').trim();
 }
 
 class _Native {
@@ -31,21 +31,36 @@ class _Native {
   static final _advapi32 = DynamicLibrary.open('Advapi32.dll');
 
   // Define the RegOpenKeyExW function signature
-  static final _RegOpenKeyExA = _advapi32.lookupFunction<
-      Int32 Function(IntPtr, Pointer<Utf8>, Uint32, Uint32, Pointer<IntPtr>),
-      int Function(
-          int, Pointer<Utf8>, int, int, Pointer<IntPtr>)>('RegOpenKeyExA');
+  static final _RegOpenKeyExA = _advapi32
+      .lookupFunction<
+        Int32 Function(IntPtr, Pointer<Utf8>, Uint32, Uint32, Pointer<IntPtr>),
+        int Function(int, Pointer<Utf8>, int, int, Pointer<IntPtr>)
+      >('RegOpenKeyExA');
 
   // Define the RegCloseKey function signature
   static final _RegCloseKey = _advapi32
       .lookupFunction<Int32 Function(IntPtr), int Function(int)>('RegCloseKey');
 
   // Define the RegQueryValueExW function signature
-  static final _RegQueryValueExA = _advapi32.lookupFunction<
-      Int32 Function(IntPtr, Pointer<Utf8>, Pointer<IntPtr>, Pointer<Uint32>,
-          Pointer<Uint8>, Pointer<Uint32>),
-      int Function(int, Pointer<Utf8>, Pointer<IntPtr>, Pointer<Uint32>,
-          Pointer<Uint8>, Pointer<Uint32>)>('RegQueryValueExA');
+  static final _RegQueryValueExA = _advapi32
+      .lookupFunction<
+        Int32 Function(
+          IntPtr,
+          Pointer<Utf8>,
+          Pointer<IntPtr>,
+          Pointer<Uint32>,
+          Pointer<Uint8>,
+          Pointer<Uint32>,
+        ),
+        int Function(
+          int,
+          Pointer<Utf8>,
+          Pointer<IntPtr>,
+          Pointer<Uint32>,
+          Pointer<Uint8>,
+          Pointer<Uint32>,
+        )
+      >('RegQueryValueExA');
 
   // Define the HKEY_LOCAL_MACHINE constant
   static const _HKEY_LOCAL_MACHINE = 0x80000002;