326 lines
9.9 KiB
Dart
326 lines
9.9 KiB
Dart
import 'package:flutter/cupertino.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() {
|
|
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();
|
|
}
|
|
}
|
|
|
|
//群发钥匙检查
|
|
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,
|
|
'1',
|
|
_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;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 顶部钥匙信息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);
|
|
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'];
|
|
|
|
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";
|
|
}
|
|
}
|