2023-10-25 16:18:27 +08:00

383 lines
11 KiB
Dart

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<MassSendElectronicKeyPage> createState() =>
_MassSendElectronicKeyPageState();
}
class _MassSendElectronicKeyPageState extends State<MassSendElectronicKeyPage> {
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<void> 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<void> 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<String, dynamic>;
_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<String, dynamic>;
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<String, dynamic>;
_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";
}
}