From 879f42bd81e5c3c802537e4b92854a4fc47fce66 Mon Sep 17 00:00:00 2001 From: DaisyWu <18682150237@163.com> Date: Wed, 28 May 2025 11:03:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DiOS=E7=AB=AF=E9=80=9A?= =?UTF-8?q?=E8=AE=AF=E5=BD=95=E7=82=B9=E5=87=BB=E8=8E=B7=E5=8F=96=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/sendElectronicKeyView_page.dart | 158 ++++++------------ .../view/sendElectronicKeyView_state.dart | 4 +- 2 files changed, 49 insertions(+), 113 deletions(-) diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart index c4e62f99..118b2123 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart @@ -32,13 +32,7 @@ class SendElectronicKeyView extends StatefulWidget { class _SendElectronicKeyViewState extends State with AutomaticKeepAliveClientMixin { - late FlutterContactPicker _contactPicker; - @override - void initState() { - super.initState(); - _contactPicker = FlutterContactPicker(); - } @override Widget build(BuildContext context) { @@ -224,81 +218,44 @@ class _SendElectronicKeyViewState extends State alignment: Alignment.center, child: InkWell( onTap: () async { - try { - final PermissionStatus status = - await Permission.contacts.request(); - if (status.isGranted) { - // 保存当前路由 - final currentRoute = ModalRoute.of(context); + final Contact? currentContact = + await logic.state.contactPicker.selectContact(); + if (currentContact != null) { + setState(() { + logic.state.contact = currentContact; - final Contact? currentContact = - await _contactPicker.selectContact(); - - // 检查路由是否仍然存在且组件是否挂载 - if (currentRoute?.isCurrent == true && mounted) { - // 检查 GetX 控制器是否仍然存在 - if (Get.isRegistered( - tag: widget.type)) { - final logic = Get.find( - tag: widget.type); - - if (currentContact != null) { - // 处理手机号 - if (currentContact.phoneNumbers != null && - currentContact.phoneNumbers!.isNotEmpty) { - String phoneNumber = - currentContact.phoneNumbers![0]; - // 移除所有空格、括号、连字符等特殊字符 - phoneNumber = phoneNumber.replaceAll( - RegExp(r'[\s\(\)\-]'), ''); - // 如果号码以+开头,保留+号 - if (phoneNumber.startsWith('+')) { - phoneNumber = '+' + - phoneNumber - .substring(1) - .replaceAll(RegExp(r'[^\d]'), ''); - } else { - phoneNumber = phoneNumber.replaceAll( - RegExp(r'[^\d]'), ''); - } - logic.state.emailOrPhoneController.text = - phoneNumber; - logic.state.emailOrPhone.value = phoneNumber; - } - - // 处理姓名 - if (currentContact.fullName != null && - currentContact.fullName!.isNotEmpty) { - logic.state.keyNameController.text = - currentContact.fullName!; - } - - // 更新UI - logic.update(); - } + // 处理手机号 + if (currentContact.phoneNumbers != null && + currentContact.phoneNumbers!.isNotEmpty) { + // 获取第一个手机号并清理格式 + String phoneNumber = currentContact.phoneNumbers![0]; + // 移除所有空格、括号、连字符等特殊字符 + phoneNumber = + phoneNumber.replaceAll(RegExp(r'[\s\(\)\-]'), ''); + // 如果号码以+开头,保留+号 + if (phoneNumber.startsWith('+')) { + phoneNumber = '+' + + phoneNumber + .substring(1) + .replaceAll(RegExp(r'[^\d]'), ''); + } else { + phoneNumber = + phoneNumber.replaceAll(RegExp(r'[^\d]'), ''); } + logic.state.emailOrPhoneController.text = phoneNumber; + } else { + logic.state.emailOrPhoneController.text = ''; } - } else { - // 权限被拒绝,显示提示 - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('需要通讯录权限才能选择联系人'.tr), - duration: const Duration(seconds: 2), - ), - ); + + // 处理姓名 + if (currentContact.fullName != null && + currentContact.fullName!.isNotEmpty) { + logic.state.keyNameController.text = + currentContact.fullName!; + } else { + logic.state.keyNameController.text = ''; } - } - } catch (e) { - print('Error selecting contact: $e'); - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('获取通讯录失败,请检查权限设置'.tr), - duration: const Duration(seconds: 2), - ), - ); - } + }); } }, ), @@ -684,16 +641,16 @@ class _SendElectronicKeyViewState extends State alignment: Alignment.center, child: InkWell( onTap: () async { - try { - final PermissionStatus status = - await Permission.contacts.request(); - if (status.isGranted) { - final Contact? currentContact = - await _contactPicker.selectContact(); - if (currentContact != null && mounted) { + final Contact? currentContact = + await logic.state.contactPicker.selectContact(); + if (currentContact != null) { + setState(() { + logic.state.contact = currentContact; + // 处理手机号 if (currentContact.phoneNumbers != null && currentContact.phoneNumbers!.isNotEmpty) { + // 获取第一个手机号并清理格式 String phoneNumber = currentContact.phoneNumbers![0]; // 移除所有空格、括号、连字符等特殊字符 phoneNumber = @@ -709,7 +666,8 @@ class _SendElectronicKeyViewState extends State phoneNumber.replaceAll(RegExp(r'[^\d]'), ''); } logic.state.emailOrPhoneController.text = phoneNumber; - logic.state.emailOrPhone.value = phoneNumber; + } else { + logic.state.emailOrPhoneController.text = ''; } // 处理姓名 @@ -717,34 +675,12 @@ class _SendElectronicKeyViewState extends State currentContact.fullName!.isNotEmpty) { logic.state.keyNameController.text = currentContact.fullName!; + } else { + logic.state.keyNameController.text = ''; } - - // 更新UI - logic.update(); - } - } else { - // 权限被拒绝,显示提示 - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('需要通讯录权限才能选择联系人'.tr), - duration: const Duration(seconds: 2), - ), - ); - } + }); } - } catch (e) { - print('Error selecting contact: $e'); - if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('获取通讯录失败,请检查权限设置'.tr), - duration: const Duration(seconds: 2), - ), - ); - } - } - }, + }, ), ) else diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart index 61121249..7ada2123 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_state.dart @@ -15,8 +15,8 @@ class SendElectronicKeyViewState { TextEditingController realNameController = TextEditingController(); //真实姓名输入框 TextEditingController idCardController = TextEditingController(); //身份证号输入框 - // final FlutterContactPicker contactPicker = FlutterContactPicker(); - // late Contact contact; + final FlutterContactPicker contactPicker = FlutterContactPicker(); + late Contact contact; RxBool isRemoteUnlock = false.obs; //是否允许远程开锁 RxBool isAuthentication = false.obs; //是否可以实名认证