import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_pickers/pickers.dart'; import 'package:flutter_pickers/time_picker/model/date_mode.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/toast.dart'; import '../../../../../tools/commonItem.dart'; import '../../../../../tools/submitBtn.dart'; import '../../../../appRouters.dart'; import '../../../../translations/trans_lib.dart'; class MassSendElectronicKeyPage extends StatefulWidget { final String type; const MassSendElectronicKeyPage({Key? key, required this.type}) : super(key: key); @override State createState() => _MassSendElectronicKeyPageState(); } class _MassSendElectronicKeyPageState extends State { final FlutterContactPicker _contactPicker = FlutterContactPicker(); late Contact _contact; var _selectEffectiveDate = ''; //生效时间 var _selectFailureDate = ''; //失效时间 late DateTime _effectiveDateTime; late DateTime _failureDateTime; late bool _isSendSuccess; late bool _isRemote; //是否远程开锁 List _receiverList = []; //接受者列表 List _lockIdList = []; //选中的锁ID列表 String countryName = '中国'; String countryCode = '86'; List weekdaysList = []; bool _isCreateUser = false; //用户未注册时传1 已注册传0 @override Widget build(BuildContext context) { return indexChangeWidget(); } @override void initState() { super.initState(); DateTime dateTime = DateTime.now(); _effectiveDateTime = dateTime; _failureDateTime = dateTime; _selectEffectiveDate = '${dateTime.year}-${dateTime.month}-${dateTime.day} ${dateTime.hour}:${dateTime.minute}'; //默认为当前时间 _selectFailureDate = '${dateTime.year}-${dateTime.month}-${dateTime.day} ${dateTime.hour}:${dateTime.minute}'; //默认为当前时间 _isSendSuccess = false; _isRemote = false; } Widget indexChangeWidget() { if (_isSendSuccess) { return sendElectronicKeySucceed(); } else { switch (int.parse(widget.type)) { case 0: { // 限时 return Column( children: [ keyInfoWidget(), keyTimeWidget(), remoteUnlockingWidget(), keyBottomWidget() ], ); } case 1: { // 永久 return Column( children: [ keyInfoWidget(), remoteUnlockingWidget(), keyBottomWidget() ], ); } case 2: { // 单次 return Column( children: [ keyInfoWidget(), periodValidityWidget(), remoteUnlockingWidget(), keyBottomWidget() ], ); } default: return Container(); } } } // 发送电子钥匙成功 Widget sendElectronicKeySucceed() { return Column( children: [ Container( height: 250.h, width: 1.sw, color: Colors.white, child: Column( children: [ SizedBox( height: 30.h, ), Image.asset( 'images/icon_send_success.png', width: 100.w, height: 100.w, ), SizedBox( height: 20.h, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "发送成功", style: TextStyle( fontSize: 26.sp, color: Colors.black, fontWeight: FontWeight.w500), ), ], ), ], ), ), SizedBox( height: 20.h, ), SubmitBtn( btnName: '完成', onClick: () { _isSendSuccess = false; Navigator.pop(context, true); }), ], ); } //群发钥匙检查 Future MassKeyChecksRequest() async { String getFailureDateTime = '0'; if (int.parse(widget.type) != 1) { getFailureDateTime = _failureDateTime.millisecondsSinceEpoch.toString(); } var entity = await ApiRepository.to.canSendKey(getFailureDateTime, _lockIdList); if (entity.errorCode!.codeIsSuccessful) { for (int i = 0; i < _receiverList.length; i++) { LockUserData data = _receiverList[i]; batchSendElectronicKeyRequest(data.userid ?? ''); } } else { Toast.show(msg: '检查失败'); } } //批处理群发钥匙 Future batchSendElectronicKeyRequest(String receiverUserID) async { String getFailureDateTime = '0'; String getEffectiveDateTime = '0'; if (widget.type == '0') { getFailureDateTime = _failureDateTime.millisecondsSinceEpoch.toString(); getEffectiveDateTime = _effectiveDateTime.millisecondsSinceEpoch.toString(); } var entity = await ApiRepository.to.batchSendKey( getFailureDateTime, [], _lockIdList, _isCreateUser == true ? '1' : '0', _isRemote ? '1' : '2', receiverUserID, receiverUserID, getEffectiveDateTime, countryCode, '1', weekdaysList); if (entity.errorCode!.codeIsSuccessful) { print('群发电子钥匙成功'); _isSendSuccess = true; setState(() {}); } else { Toast.show(msg: '${entity.errorMsg}'); if (entity.errorCode == 425) { //用户未注册 _isCreateUser = true; batchSendElectronicKeyRequest(receiverUserID); } } } // 顶部钥匙信息widget Widget keyInfoWidget() { return Column( children: [ Container(height: 10.h), CommonItem( leftTitel: TranslationLoader.lanKeys!.receiver!.tr, rightTitle: _receiverList.isEmpty ? TranslationLoader.lanKeys!.pleaseAdd!.tr : _receiverList.length.toString(), isHaveLine: true, isHaveDirection: true, action: () { Navigator.pushNamed(context, Routers.massSendReceiverPage) .then((value) { if (value != null) { value as Map; _receiverList = value['lockUserList']; setState(() {}); } }); }), CommonItem( leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr, rightTitle: "", isHaveLine: true, isHaveRightWidget: true, isHaveDirection: true, rightWidget: Text( '$countryName +$countryCode', textAlign: TextAlign.end, style: TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor), ), action: () async { var result = await Navigator.pushNamed( context, Routers.seletCountryRegionPage); if (result != null) { result as Map; countryCode = result['code']; countryName = result['countryName']; setState(() {}); } }, ), CommonItem( leftTitel: TranslationLoader.lanKeys!.lock!.tr, rightTitle: _lockIdList.isEmpty ? TranslationLoader.lanKeys!.pleaseSelet!.tr : _lockIdList.length.toString(), isHaveDirection: true, action: () { Navigator.pushNamed(context, Routers.massSendLockGroupPage) .then((value) { //得到选中的锁ID列表 if (value != null) { value as Map; _lockIdList = value['selectLockIdList']; print("_lockIdList:$_lockIdList"); setState(() {}); } }); }), Container(height: 10.h), ], ); } // 生效失效时间 Widget keyTimeWidget() { return Column( children: [ CommonItem( leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, rightTitle: _selectEffectiveDate, isHaveLine: true, isHaveDirection: true, action: () { Pickers.showDatePicker(context, mode: DateMode.YMDHM, onConfirm: (p) { setState(() { _selectEffectiveDate = '${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; _effectiveDateTime = DateTime.parse(_selectEffectiveDate); }); }); }), CommonItem( leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, rightTitle: _selectFailureDate, isHaveDirection: true, action: () { Pickers.showDatePicker(context, mode: DateMode.YMDHM, onConfirm: (p) { setState(() { _selectFailureDate = '${p.year}-${intToStr(p.month!)}-${intToStr(p.day!)} ${intToStr(p.hour!)}:${intToStr(p.minute!)}'; _failureDateTime = DateTime.parse(_selectFailureDate); }); }); }), Container(height: 10.h), ], ); } // 远程开锁 Widget remoteUnlockingWidget() { return Column( children: [ CommonItem( leftTitel: TranslationLoader.lanKeys!.remoteUnlockingAllowed!.tr, rightTitle: "", isHaveRightWidget: true, rightWidget: SizedBox(width: 60.w, height: 50.h, child: _switch()), action: () {}), Container(height: 40.h), ], ); } // 有效期 Widget periodValidityWidget() { return Column( children: [ CommonItem( leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr, rightTitle: "", isHaveDirection: true, action: () { Navigator.pushNamed( context, Routers.electronicKeyPeriodValidityPage); }), Container(height: 10.h), ], ); } Widget keyBottomWidget() { return Column( children: [ SubmitBtn( btnName: TranslationLoader.lanKeys!.send!.tr, onClick: () { MassKeyChecksRequest(); }), ], ); } CupertinoSwitch _switch() { return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, trackColor: CupertinoColors.systemGrey5, thumbColor: CupertinoColors.white, value: _isRemote, onChanged: (value) { setState(() { _isRemote = !_isRemote; }); }, ); } String intToStr(int v) { return (v < 10) ? "0$v" : "$v"; } }