fix: 修复开锁页-给邮箱发电子钥匙、授权管理员、群发钥匙-接收者、批量授权选其他国家都能发送—关联多个bug

This commit is contained in:
“DaisyWu” 2025-03-03 18:41:57 +08:00
parent 4ec711fcc7
commit 484416255f
10 changed files with 184 additions and 129 deletions

View File

@ -333,6 +333,16 @@ class AuthorizedAdminLogic extends BaseGetXController {
} }
} }
@override
void onInit() {
super.onInit();
//
state.emailOrPhoneController.addListener(() {
state.emailOrPhone.value = state.emailOrPhoneController.text;
});
}
@override @override
void onReady() { void onReady() {
super.onReady(); super.onReady();

View File

@ -10,6 +10,7 @@ import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart';
import 'package:star_lock/tools/regularExpression.dart';
import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
@ -114,7 +115,10 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
// isHaveRightWidget: true, // isHaveRightWidget: true,
// rightWidget: getTFWidget(true, '请输入手机号或者邮箱'.tr, 1)), // rightWidget: getTFWidget(true, '请输入手机号或者邮箱'.tr, 1)),
perpetualKeyWidget('接收者'.tr, '请输入手机号或者邮箱'.tr), perpetualKeyWidget('接收者'.tr, '请输入手机号或者邮箱'.tr),
CommonItem( Obx(() => Visibility(
visible: RegularExpression()
.isPhoneNumber(logic.state.emailOrPhone.value),
child: CommonItem(
leftTitel: '国家/地区'.tr, leftTitel: '国家/地区'.tr,
rightTitle: '', rightTitle: '',
isHaveLine: true, isHaveLine: true,
@ -123,8 +127,8 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
rightWidget: Text( rightWidget: Text(
'${state.countryName.value} +${state.countryCode.value}', '${state.countryName.value} +${state.countryCode.value}',
textAlign: TextAlign.end, textAlign: TextAlign.end,
style: style: TextStyle(
TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), fontSize: 22.sp, color: AppColors.darkGrayTextColor),
), ),
action: () async { action: () async {
final Object? result = await Navigator.pushNamed( final Object? result = await Navigator.pushNamed(
@ -136,7 +140,7 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
setState(() {}); setState(() {});
} }
}, },
), ))),
KeyNameItem( KeyNameItem(
leftTitel: '姓名'.tr, leftTitel: '姓名'.tr,
rightTitle: '请输入'.tr, rightTitle: '请输入'.tr,
@ -268,6 +272,10 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
) )
], ],
), ),
),
Container(
color: AppColors.greyLineColor, //
height: 2.0.h, //
) )
], ],
); );
@ -571,6 +579,9 @@ class _AuthorizedAdminPageState extends State<AuthorizedAdminPage>
BorderSide(width: 0, color: Colors.transparent)), BorderSide(width: 0, color: Colors.transparent)),
contentPadding: const EdgeInsets.symmetric(vertical: 0), contentPadding: const EdgeInsets.symmetric(vertical: 0),
), ),
onChanged: (value) {
logic.update();
},
), ),
), ),
SizedBox( SizedBox(

View File

@ -6,6 +6,7 @@ import 'package:star_lock/tools/dateTool.dart';
class AuthorizedAdminState { class AuthorizedAdminState {
final TextEditingController emailOrPhoneController = final TextEditingController emailOrPhoneController =
TextEditingController(); /// TextEditingController(); ///
RxString emailOrPhone = ''.obs; // logic的state中添加一个Rx变量
final TextEditingController keyNameController = final TextEditingController keyNameController =
TextEditingController(); // TextEditingController(); //
late TabController tabController; late TabController tabController;

View File

@ -1,4 +1,3 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart'; import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
@ -57,4 +56,13 @@ class VolumeAuthorizationLockLogic extends BaseGetXController {
} }
} }
@override
void onInit() {
super.onInit();
//
state.emailOrPhoneController.addListener(() {
state.emailOrPhone.value = state.emailOrPhoneController.text;
});
}
} }

View File

@ -1,4 +1,3 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -11,6 +10,7 @@ import 'package:star_lock/main/lockDetail/authorizedAdmin/volumeAuthorizationLoc
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart';
import 'package:star_lock/tools/regularExpression.dart';
import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/showTipView.dart';
import '../../../../appRouters.dart'; import '../../../../appRouters.dart';
@ -90,10 +90,11 @@ class _VolumeAuthorizationLockPageState
isHaveLine: true, isHaveLine: true,
isHaveRightWidget: true, isHaveRightWidget: true,
rightWidget: getTFWidget( rightWidget: getTFWidget(
true, true, '请输入手机号或者邮箱'.tr, state.emailOrPhoneController)),
'请输入手机号或者邮箱'.tr, Obx(() => Visibility(
state.emailOrPhoneController)), visible: RegularExpression()
CommonItem( .isPhoneNumber(logic.state.emailOrPhone.value),
child: CommonItem(
leftTitel: '国家/地区'.tr, leftTitel: '国家/地区'.tr,
rightTitle: '', rightTitle: '',
isHaveLine: true, isHaveLine: true,
@ -102,8 +103,8 @@ class _VolumeAuthorizationLockPageState
rightWidget: Text( rightWidget: Text(
'${state.countryName.value} +${state.countryCode.value}', '${state.countryName.value} +${state.countryCode.value}',
textAlign: TextAlign.end, textAlign: TextAlign.end,
style: style: TextStyle(
TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), fontSize: 22.sp, color: AppColors.darkGrayTextColor),
), ),
action: () async { action: () async {
final Object? result = await Navigator.pushNamed( final Object? result = await Navigator.pushNamed(
@ -115,15 +116,12 @@ class _VolumeAuthorizationLockPageState
// setState(() {}); // setState(() {});
} }
}, },
), ))),
CommonItem( CommonItem(
leftTitel: '姓名'.tr, leftTitel: '姓名'.tr,
rightTitle: '', rightTitle: '',
isHaveRightWidget: true, isHaveRightWidget: true,
rightWidget: getTFWidget( rightWidget: getTFWidget(false, '请输入'.tr, state.keyNameController)),
false,
'请输入'.tr,
state.keyNameController)),
Container(height: 10.h), Container(height: 10.h),
], ],
); );
@ -186,7 +184,8 @@ class _VolumeAuthorizationLockPageState
: state.lockIdList.length.toString(), : state.lockIdList.length.toString(),
isHaveDirection: true, isHaveDirection: true,
action: () async { action: () async {
final result = await Get.toNamed(Routers.massSendLockGroupListPage, final result = await Get.toNamed(
Routers.massSendLockGroupListPage,
arguments: <String, Object>{ arguments: <String, Object>{
'keyLimits': '1', 'keyLimits': '1',
'lockIdList': state.lockIdList.value 'lockIdList': state.lockIdList.value

View File

@ -4,8 +4,11 @@ import 'package:get/get.dart';
class VolumeAuthorizationLockState { class VolumeAuthorizationLockState {
final FlutterContactPicker contactPicker = FlutterContactPicker(); final FlutterContactPicker contactPicker = FlutterContactPicker();
final TextEditingController emailOrPhoneController = TextEditingController(); /// final TextEditingController emailOrPhoneController =
final TextEditingController keyNameController = TextEditingController(); // TextEditingController(); ///
RxString emailOrPhone = ''.obs; // logic的state中添加一个Rx变量
final TextEditingController keyNameController =
TextEditingController(); //
late Contact contact; late Contact contact;
RxList<int> lockIdList = <int>[].obs; RxList<int> lockIdList = <int>[].obs;
RxBool isSendSuccess = false.obs; RxBool isSendSuccess = false.obs;

View File

@ -1,4 +1,3 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -17,7 +16,8 @@ import 'massSendElectronicKey_logic.dart';
import 'massSendElectronicKey_state.dart'; import 'massSendElectronicKey_state.dart';
class MassSendElectronicKeyPage extends StatefulWidget { class MassSendElectronicKeyPage extends StatefulWidget {
const MassSendElectronicKeyPage({required this.type, Key? key}) : super(key: key); const MassSendElectronicKeyPage({required this.type, Key? key})
: super(key: key);
final String type; final String type;
@override @override
@ -26,8 +26,10 @@ class MassSendElectronicKeyPage extends StatefulWidget {
} }
class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> { class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
final MassSendElectronicKeyLogic logic = Get.put(MassSendElectronicKeyLogic()); final MassSendElectronicKeyLogic logic =
final MassSendElectronicKeyState state = Get.find<MassSendElectronicKeyLogic>().state; Get.put(MassSendElectronicKeyLogic());
final MassSendElectronicKeyState state =
Get.find<MassSendElectronicKeyLogic>().state;
@override @override
initState() { initState() {
@ -47,9 +49,7 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
state.type.value = widget.type; state.type.value = widget.type;
return SingleChildScrollView( return SingleChildScrollView(
child: state.isDemoMode child: state.isDemoMode ? indexChangeWidget() : Obx(indexChangeWidget),
? indexChangeWidget()
: Obx(indexChangeWidget),
); );
} }
@ -202,7 +202,8 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
: state.lockIdList.length.toString(), : state.lockIdList.length.toString(),
isHaveDirection: true, isHaveDirection: true,
action: () async { action: () async {
final result = await Get.toNamed(Routers.massSendLockGroupListPage, final result = await Get.toNamed(
Routers.massSendLockGroupListPage,
arguments: <String, Object>{ arguments: <String, Object>{
'keyLimits': '2', 'keyLimits': '2',
'lockIdList': state.lockIdList 'lockIdList': state.lockIdList
@ -235,7 +236,8 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
PDuration selectDate = PDuration selectDate =
PDuration.parse(DateTime.tryParse(state.beginTime.value)); PDuration.parse(DateTime.tryParse(state.beginTime.value));
Pickers.showDatePicker(context, Pickers.showDatePicker(context,
selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { selectDate: selectDate,
mode: DateMode.YMDHM, onConfirm: (PDuration p) {
state.beginTime.value = DateTool().getYMDHNDateString(p, 1); state.beginTime.value = DateTool().getYMDHNDateString(p, 1);
}); });
})), })),
@ -244,8 +246,11 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
rightTitle: state.endTime.value, rightTitle: state.endTime.value,
isHaveDirection: true, isHaveDirection: true,
action: () { action: () {
PDuration selectDate = PDuration.parse(DateTime.tryParse(state.endTime.value)); PDuration selectDate =
Pickers.showDatePicker(context, selectDate: selectDate, mode: DateMode.YMDHM, onConfirm: (PDuration p) { PDuration.parse(DateTime.tryParse(state.endTime.value));
Pickers.showDatePicker(context,
selectDate: selectDate,
mode: DateMode.YMDHM, onConfirm: (PDuration p) {
state.endTime.value = DateTool().getYMDHNDateString(p, 1); state.endTime.value = DateTool().getYMDHNDateString(p, 1);
}); });
})), })),
@ -279,8 +284,8 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
isHaveDirection: true, isHaveDirection: true,
isHaveLine: true, isHaveLine: true,
action: () async { action: () async {
var result = var result = await Get.toNamed(Routers.seletKeyCyclicDatePage,
await Get.toNamed(Routers.seletKeyCyclicDatePage, arguments: <String, Object>{ arguments: <String, Object>{
'validityValue': state.weekdaysList.value, 'validityValue': state.weekdaysList.value,
'starDate': state.beginTime.value, 'starDate': state.beginTime.value,
'endDate': state.endTime.value, 'endDate': state.endTime.value,
@ -376,5 +381,4 @@ class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
}, },
); );
} }
} }

View File

@ -39,6 +39,11 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
void onInit() { void onInit() {
super.onInit(); super.onInit();
//
state.emailOrPhoneController.addListener(() {
state.emailOrPhone.value = state.emailOrPhoneController.text;
});
Storage.getBool(ifIsDemoModeOrNot) Storage.getBool(ifIsDemoModeOrNot)
.then((bool? value) => state.isDemoMode = value ?? false); .then((bool? value) => state.isDemoMode = value ?? false);
} }
@ -187,7 +192,8 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
ApmHelper.instance.trackEvent('add_electronic_key', { ApmHelper.instance.trackEvent('add_electronic_key', {
'lock_name': BlueManage().connectDeviceName, 'lock_name': BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date': DateTool().getNowDateWithType(1), 'date': DateTool().getNowDateWithType(1),
'add_electronic_key_result': '成功', 'add_electronic_key_result': '成功',
}); });
@ -203,7 +209,8 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
} else { } else {
ApmHelper.instance.trackEvent('add_electronic_key', { ApmHelper.instance.trackEvent('add_electronic_key', {
'lock_name': BlueManage().connectDeviceName, 'lock_name': BlueManage().connectDeviceName,
'account':getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!, 'account':
getMobile.isNotEmpty ? getMobile : (await Storage.getEmail())!,
'date': DateTool().getNowDateWithType(1), 'date': DateTool().getNowDateWithType(1),
'add_electronic_key_result': '${entity.errorCode}--${entity.errorMsg}', 'add_electronic_key_result': '${entity.errorCode}--${entity.errorMsg}',
}); });

View File

@ -17,6 +17,7 @@ import 'package:star_lock/tools/dateTool.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart'; import 'package:star_lock/tools/pickers/time_picker/model/date_mode.dart';
import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart'; import 'package:star_lock/tools/pickers/time_picker/model/pduration.dart';
import 'package:star_lock/tools/regularExpression.dart';
import 'package:star_lock/tools/showTipView.dart'; import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';
@ -114,7 +115,10 @@ class _SendElectronicKeyViewState extends State<SendElectronicKeyView>
// 1, // 1,
// logic)), // logic)),
perpetualKeyWidget(logic, '接收者'.tr, '请输入手机号或者邮箱'.tr), perpetualKeyWidget(logic, '接收者'.tr, '请输入手机号或者邮箱'.tr),
CommonItem( Obx(() => Visibility(
visible: RegularExpression()
.isPhoneNumber(logic.state.emailOrPhone.value),
child: CommonItem(
leftTitel: '国家/地区'.tr, leftTitel: '国家/地区'.tr,
rightTitle: '', rightTitle: '',
isHaveLine: true, isHaveLine: true,
@ -123,8 +127,8 @@ class _SendElectronicKeyViewState extends State<SendElectronicKeyView>
rightWidget: Text( rightWidget: Text(
'${logic.state.countryName} +${logic.state.countryCode}', '${logic.state.countryName} +${logic.state.countryCode}',
textAlign: TextAlign.end, textAlign: TextAlign.end,
style: style: TextStyle(
TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), fontSize: 22.sp, color: AppColors.darkGrayTextColor),
), ),
action: () async { action: () async {
final Object? result = await Navigator.pushNamed( final Object? result = await Navigator.pushNamed(
@ -137,6 +141,7 @@ class _SendElectronicKeyViewState extends State<SendElectronicKeyView>
} }
}, },
), ),
)),
CommonItem( CommonItem(
leftTitel: '姓名'.tr, leftTitel: '姓名'.tr,
rightTitle: '', rightTitle: '',
@ -589,6 +594,9 @@ class _SendElectronicKeyViewState extends State<SendElectronicKeyView>
), ),
style: TextStyle( style: TextStyle(
fontSize: 22.sp, textBaseline: TextBaseline.alphabetic), fontSize: 22.sp, textBaseline: TextBaseline.alphabetic),
onChanged: (String value) {
logic.update();
},
), ),
), ),
SizedBox( SizedBox(

View File

@ -4,8 +4,12 @@ import 'package:get/get.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
class SendElectronicKeyViewState { class SendElectronicKeyViewState {
//
TextEditingController emailOrPhoneController = TextEditingController emailOrPhoneController =
TextEditingController(); /// TextEditingController(); ///
//
RxString emailOrPhone = ''.obs; // logic的state中添加一个Rx变量
TextEditingController keyNameController = TextEditingController(); // TextEditingController keyNameController = TextEditingController(); //
TextEditingController realNameController = TextEditingController(); // TextEditingController realNameController = TextEditingController(); //
TextEditingController idCardController = TextEditingController(); // TextEditingController idCardController = TextEditingController(); //
@ -37,5 +41,5 @@ class SendElectronicKeyViewState {
final String timeLimitTips = '接收者在有效期内可以不限次数使用'.tr; // final String timeLimitTips = '接收者在有效期内可以不限次数使用'.tr; //
final String permanentTips = '接收者可以使用此App开关锁'.tr; // final String permanentTips = '接收者可以使用此App开关锁'.tr; //
final String onceLimitTips = '单次钥匙有效期为1小时只能使用一次'.tr; // final String onceLimitTips = '单次钥匙有效期为1小时只能使用一次'.tr; //
final String cycleLimitTips = '接收者可以在有效期内的固定时间段里,不限次数使用'.tr; // final String cycleLimitTips = '接收者可以在有效期内的固定时间段里,不限次数使用'.tr;
} }