1,登录接口新增是否VIP标识

2,群发电子钥匙代码结构重构及高级功能相关逻辑处理
3,选择锁分组、用户管理高级功能相关逻辑增加
4,新增公用高级功能顶部提示框组件
This commit is contained in:
Daisy 2024-05-03 17:53:15 +08:00
parent f5963a166d
commit 6d186ec0a4
27 changed files with 330 additions and 285 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -789,5 +789,6 @@
"文件校验失败 0x03": "File verification failed 0x03", "文件校验失败 0x03": "File verification failed 0x03",
"固件升级完成": "Firmware upgrade completed", "固件升级完成": "Firmware upgrade completed",
"记录":"Record", "记录":"Record",
"开通高级功能后才可以对锁进行管理":"You can manage locks only after the advanced function is enabled" "开通高级功能后才可以对锁进行管理":"You can manage locks only after the advanced function is enabled",
"去开通":"Go and Activate"
} }

View File

@ -816,5 +816,6 @@
"文件校验失败 0x03":"文件校验失败 0x03", "文件校验失败 0x03":"文件校验失败 0x03",
"固件升级完成":"固件升级完成", "固件升级完成":"固件升级完成",
"记录":"记录", "记录":"记录",
"开通高级功能后才可以对锁进行管理":"开通高级功能后才可以对锁进行管理" "开通高级功能后才可以对锁进行管理":"开通高级功能后才可以对锁进行管理",
"去开通":"去开通"
} }

View File

@ -819,5 +819,6 @@
"文件校验失败 0x02":"文件校验失败 0x02", "文件校验失败 0x02":"文件校验失败 0x02",
"文件校验失败 0x03":"文件校验失败 0x03", "文件校验失败 0x03":"文件校验失败 0x03",
"固件升级完成":"固件升级完成", "固件升级完成":"固件升级完成",
"开通高级功能后才可以对锁进行管理":"开通高级功能后才可以对锁进行管理" "开通高级功能后才可以对锁进行管理":"开通高级功能后才可以对锁进行管理",
"去开通":"去开通"
} }

View File

@ -1,15 +1,16 @@
class LoginData { class LoginData {
LoginData({ LoginData(
this.accessToken, {this.accessToken,
this.userid, this.userid,
this.expiresAt, this.expiresAt,
this.expiresAtString, this.expiresAtString,
this.mobile, this.mobile,
this.headUrl, this.headUrl,
this.email, this.email,
this.nickname, this.nickname,
this.haveSafeAnswer, this.haveSafeAnswer,
this.uid}); this.uid,
this.isVip});
LoginData.fromJson(dynamic json) { LoginData.fromJson(dynamic json) {
accessToken = json['accessToken']; accessToken = json['accessToken'];
@ -22,6 +23,7 @@ class LoginData {
nickname = json['nickname']; nickname = json['nickname'];
haveSafeAnswer = json['haveSafeAnswer']; haveSafeAnswer = json['haveSafeAnswer'];
uid = json['uid']; uid = json['uid'];
isVip = json['isVip'];
} }
String? accessToken; String? accessToken;
int? userid; int? userid;
@ -33,6 +35,7 @@ class LoginData {
String? nickname; String? nickname;
bool? haveSafeAnswer; bool? haveSafeAnswer;
int? uid; int? uid;
int? isVip;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
@ -46,7 +49,7 @@ class LoginData {
map['nickname'] = nickname; map['nickname'] = nickname;
map['haveSafeAnswer'] = haveSafeAnswer; map['haveSafeAnswer'] = haveSafeAnswer;
map['uid'] = uid; map['uid'] = uid;
map['isVip'] = isVip;
return map; return map;
} }
}
}

View File

@ -24,6 +24,7 @@ class StarLockLoginLogic extends BaseGetXController {
username: state.emailOrPhone.value); username: state.emailOrPhone.value);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
Storage.saveLoginData(entity.data); Storage.saveLoginData(entity.data);
Storage.setBool(saveIsVip, entity.data!.isVip! == 0 ? false : true);
eventBus.fire(MineInfoChangeRefreshUI()); eventBus.fire(MineInfoChangeRefreshUI());
// Get.back(); // Get.back();
// Get.toNamed(Routers.starLockMain); // Get.toNamed(Routers.starLockMain);

View File

@ -1,37 +1,35 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../../../../common/XSConstantMacro/XSConstantMacro.dart'; import '../../../../../common/XSConstantMacro/XSConstantMacro.dart';
import '../../../../../network/api_repository.dart'; import '../../../../../network/api_repository.dart';
import '../../../../../tools/dateTool.dart'; import '../../../../../tools/dateTool.dart';
import '../massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import '../massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'massSendElectronicKey_state.dart'; import 'massSendElectronicKey_state.dart';
class MassSendElectronicKeyLogic extends BaseGetXController{ class MassSendElectronicKeyLogic extends BaseGetXController {
MassSendElectronicKeyState state = MassSendElectronicKeyState(); MassSendElectronicKeyState state = MassSendElectronicKeyState();
// //
Future<void> massKeyChecksRequest() async { Future<void> massKeyChecksRequest() async {
String getFailureDateTime = '0'; String getFailureDateTime = '0';
if (int.parse(state.type.value) != 1) { if (int.parse(state.type.value) != 1) {
getFailureDateTime = DateTool().dateToTimestamp(state.endTime.value, 1).toString(); getFailureDateTime =
DateTool().dateToTimestamp(state.endTime.value, 1).toString();
} }
if(state.lockIdList.isEmpty){ if (state.lockIdList.isEmpty) {
showToast("请选择锁".tr); showToast("请选择锁".tr);
return; return;
} }
if(state.receiverList.isEmpty){ if (state.receiverList.isEmpty) {
showToast("请选择接收者".tr); showToast("请选择接收者".tr);
return; return;
} }
var entity = await ApiRepository.to.canSendKey( var entity =
getFailureDateTime, await ApiRepository.to.canSendKey(getFailureDateTime, state.lockIdList);
state.lockIdList
);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
for (int i = 0; i < state.receiverList.length; i++) { for (int i = 0; i < state.receiverList.length; i++) {
LockUserData data = state.receiverList[i]; LockUserItemData data = state.receiverList[i];
batchSendElectronicKeyRequest(data.userid ?? '', data.nickname ?? ''); batchSendElectronicKeyRequest(data.userid ?? '', data.nickname ?? '');
} }
} else { } else {
@ -40,7 +38,8 @@ class MassSendElectronicKeyLogic extends BaseGetXController{
} }
// //
Future<void> batchSendElectronicKeyRequest(String receiverUserID, String receiverUserName) async { Future<void> batchSendElectronicKeyRequest(
String receiverUserID, String receiverUserName) async {
// //
var startDate = "0"; var startDate = "0";
var endDate = "0"; var endDate = "0";
@ -51,8 +50,10 @@ class MassSendElectronicKeyLogic extends BaseGetXController{
case 0: case 0:
{ {
typeValue = XSConstantMacro.keyTypeTime; typeValue = XSConstantMacro.keyTypeTime;
startDate = DateTool().dateToTimestamp(state.beginTime.value, 1).toString(); startDate =
endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString(); DateTool().dateToTimestamp(state.beginTime.value, 1).toString();
endDate =
DateTool().dateToTimestamp(state.endTime.value, 1).toString();
startTime = "0"; startTime = "0";
endTime = "0"; endTime = "0";
@ -88,10 +89,15 @@ class MassSendElectronicKeyLogic extends BaseGetXController{
showToast("请选择有效期".tr); showToast("请选择有效期".tr);
return; return;
} }
startDate = DateTool().dateToTimestamp(state.beginTime.value, 1).toString(); startDate =
DateTool().dateToTimestamp(state.beginTime.value, 1).toString();
endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString(); endDate = DateTool().dateToTimestamp(state.endTime.value, 1).toString();
startTime = DateTool().dateToTimestamp(state.effectiveDateTime.value, 0).toString(); startTime = DateTool()
endTime = DateTool().dateToTimestamp(state.failureDateTime.value, 0).toString(); .dateToTimestamp(state.effectiveDateTime.value, 0)
.toString();
endTime = DateTool()
.dateToTimestamp(state.failureDateTime.value, 0)
.toString();
break; break;
default: default:
typeValue = XSConstantMacro.keyTypeTime; typeValue = XSConstantMacro.keyTypeTime;
@ -112,8 +118,7 @@ class MassSendElectronicKeyLogic extends BaseGetXController{
startTime: int.parse(startTime), startTime: int.parse(startTime),
endTime: int.parse(endTime), endTime: int.parse(endTime),
remoteUnlockSwitch: state.isRemoteUnlock.value ? 1 : 2, remoteUnlockSwitch: state.isRemoteUnlock.value ? 1 : 2,
keyRight: 0 keyRight: 0);
);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
state.isSendSuccess.value = true; state.isSendSuccess.value = true;
resetData(); resetData();
@ -128,12 +133,14 @@ class MassSendElectronicKeyLogic extends BaseGetXController{
} }
void resetData() { void resetData() {
if(state.type.value == "0"){ if (state.type.value == "0") {
state.beginTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString()); // state.beginTime.value = DateTool().dateToYMDHNString(
state.endTime.value = DateTool().dateToYMDHNString(DateTime.now().millisecondsSinceEpoch.toString());// DateTime.now().millisecondsSinceEpoch.toString()); //
}else{ state.endTime.value = DateTool().dateToYMDHNString(
DateTime.now().millisecondsSinceEpoch.toString()); //
} else {
state.beginTime.value = ""; // state.beginTime.value = ""; //
state.endTime.value = "";// state.endTime.value = ""; //
} }
} }
} }

View File

@ -2,7 +2,7 @@ class LockUserListEntity {
int? errorCode; int? errorCode;
String? description; String? description;
String? errorMsg; String? errorMsg;
List<LockUserData>? data; List<LockUserItemData>? data;
LockUserListEntity( LockUserListEntity(
{this.errorCode, this.description, this.errorMsg, this.data}); {this.errorCode, this.description, this.errorMsg, this.data});
@ -12,9 +12,9 @@ class LockUserListEntity {
description = json['description']; description = json['description'];
errorMsg = json['errorMsg']; errorMsg = json['errorMsg'];
if (json['data'] != null) { if (json['data'] != null) {
data = <LockUserData>[]; data = <LockUserItemData>[];
json['data'].forEach((v) { json['data'].forEach((v) {
data!.add(LockUserData.fromJson(v)); data!.add(LockUserItemData.fromJson(v));
}); });
} }
} }
@ -31,17 +31,17 @@ class LockUserListEntity {
} }
} }
class LockUserData { class LockUserItemData {
int? uid; int? uid;
String? nickname; String? nickname;
String? headUrl; String? headUrl;
String? userid; String? userid;
bool? isCheck = false; bool? isCheck = false;
LockUserData( LockUserItemData(
{this.uid, this.nickname, this.headUrl, this.userid, this.isCheck}); {this.uid, this.nickname, this.headUrl, this.userid, this.isCheck});
LockUserData.fromJson(Map<String, dynamic> json) { LockUserItemData.fromJson(Map<String, dynamic> json) {
uid = json['uid']; uid = json['uid'];
nickname = json['nickname']; nickname = json['nickname'];
headUrl = json['headUrl']; headUrl = json['headUrl'];

View File

@ -0,0 +1,18 @@
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_state.dart';
import 'package:star_lock/network/api_repository.dart';
import 'package:star_lock/tools/baseGetXController.dart';
class LockUserListLogic extends BaseGetXController {
LockUserListState state = LockUserListState();
//
Future<void> lockUserListRequest() async {
LockUserListEntity entity = await ApiRepository.to.lockUserList(
state.pageNo.value.toString(), state.pageSize.value.toString(), '');
if (entity.errorCode!.codeIsSuccessful) {
state.dataList.value = entity.data!;
state.dataList.refresh();
}
}
}

View File

@ -1,13 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/utils.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_colors.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/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_logic.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/keySearchWidget.dart';
import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/noData.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';
import 'package:star_lock/translations/trans_lib.dart';
class LockUserListPage extends StatefulWidget { class LockUserListPage extends StatefulWidget {
const LockUserListPage({Key? key}) : super(key: key); const LockUserListPage({Key? key}) : super(key: key);
@ -19,14 +18,14 @@ class LockUserListPage extends StatefulWidget {
} }
class _LockUserListPageState extends State<LockUserListPage> { class _LockUserListPageState extends State<LockUserListPage> {
List<LockUserData> dataList = []; final logic = Get.put(LockUserListLogic());
List selectUserIdList = []; final state = Get.find<LockUserListLogic>().state;
List<LockUserData> selectDataList = [];
@override @override
void initState() { void initState() {
super.initState(); super.initState();
lockUserListRequest(); logic.lockUserListRequest();
} }
@override @override
@ -52,24 +51,29 @@ class _LockUserListPageState extends State<LockUserListPage> {
SizedBox( SizedBox(
height: 20.h, height: 20.h,
), ),
_searchWidget(), KeySearchWidget(
editingController: state.searchController,
onSubmittedAction: () {
logic.lockUserListRequest();
},
),
SizedBox( SizedBox(
height: 20.h, height: 20.h,
), ),
Expanded( Obx(() => Expanded(
child: dataList.isEmpty child: state.dataList.isEmpty
? NoData() ? NoData()
: ListView.separated( : ListView.separated(
itemBuilder: (context, index) { itemBuilder: (context, index) {
LockUserData indexEntity = dataList[index]; LockUserItemData indexEntity = state.dataList[index];
return _electronicKeyItem(indexEntity); return _electronicKeyItem(indexEntity);
}, },
itemCount: dataList.length, itemCount: state.dataList.length,
separatorBuilder: (context, index) { separatorBuilder: (context, index) {
return const Divider( return const Divider(
height: 1, color: AppColors.greyLineColor); height: 1, color: AppColors.greyLineColor);
}, },
)), ))),
Container( Container(
height: 120.h, height: 120.h,
padding: EdgeInsets.only(left: 20.w, right: 20.w, top: 0.h), padding: EdgeInsets.only(left: 20.w, right: 20.w, top: 0.h),
@ -77,22 +81,22 @@ class _LockUserListPageState extends State<LockUserListPage> {
color: Colors.white, color: Colors.white,
child: Row( child: Row(
children: [ children: [
Text( Obx(() => Text(
'${"已选中".tr}${selectUserIdList.length}', '${"已选中".tr}${state.selectUserIdList.length}',
style: TextStyle(color: Colors.black, fontSize: 24.sp), style: TextStyle(color: Colors.black, fontSize: 24.sp),
), )),
Expanded( Expanded(
child: SizedBox( child: SizedBox(
width: 20.w, width: 20.w,
)), )),
SizedBox( SizedBox(
width: 120.w, width: 160.w,
height: 60.h, height: 60.h,
child: SubmitBtn( child: SubmitBtn(
btnName: '确定'.tr, btnName: '确定'.tr,
onClick: () { onClick: () {
Map<String, dynamic> resultMap = {}; Map<String, dynamic> resultMap = {};
resultMap['lockUserList'] = selectDataList; resultMap['lockUserList'] = state.selectDataList.value;
Navigator.pop(context, resultMap); Navigator.pop(context, resultMap);
}, },
), ),
@ -104,42 +108,7 @@ class _LockUserListPageState extends State<LockUserListPage> {
)); ));
} }
Widget _searchWidget() { Widget _electronicKeyItem(LockUserItemData itemData) {
return Container(
height: 60.h,
margin: EdgeInsets.only(left: 20.w, right: 10.w),
decoration: BoxDecoration(
color: Colors.white, borderRadius: BorderRadius.circular(5)),
child: TextField(
//
maxLines: 1,
// controller: _controller,
autofocus: false,
decoration: InputDecoration(
//
contentPadding: const EdgeInsets.only(
top: 12.0, left: -19.0, right: -15.0, bottom: 8.0),
hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr,
hintStyle: TextStyle(fontSize: 22.sp, height: 3.0),
//线
border: InputBorder.none,
//
icon: Padding(
padding: EdgeInsets.only(
top: 20.h, bottom: 20.h, right: 20.w, left: 10.w),
child: Image.asset(
'images/main/icon_main_search.png',
width: 40.w,
height: 40.w,
),
),
),
),
);
}
Widget _electronicKeyItem(LockUserData itemData) {
return Container( return Container(
color: Colors.white, color: Colors.white,
height: 90.h, height: 90.h,
@ -188,16 +157,15 @@ class _LockUserListPageState extends State<LockUserListPage> {
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
setState(() { itemData.isCheck = !itemData.isCheck!;
itemData.isCheck = !itemData.isCheck!; if (itemData.isCheck == true) {
if (itemData.isCheck == true) { state.selectUserIdList.add(itemData.userid);
selectUserIdList.add(itemData.userid); state.selectDataList.add(itemData);
selectDataList.add(itemData); } else {
} else { state.selectUserIdList.remove(itemData.userid);
selectUserIdList.remove(itemData.userid); state.selectDataList.remove(itemData);
selectDataList.remove(itemData); }
} setState(() {});
});
}, },
child: Image.asset( child: Image.asset(
itemData.isCheck! itemData.isCheck!
@ -211,16 +179,4 @@ class _LockUserListPageState extends State<LockUserListPage> {
), ),
); );
} }
//
Future<List<LockUserData>> lockUserListRequest() async {
LockUserListEntity entity =
await ApiRepository.to.lockUserList('1', '20', '');
if (entity.errorCode!.codeIsSuccessful) {
setState(() {
dataList = entity.data!;
});
}
return dataList;
}
} }

View File

@ -0,0 +1,12 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
class LockUserListState {
final TextEditingController searchController = TextEditingController();
var dataList = <LockUserItemData>[].obs;
var selectUserIdList = [].obs;
var selectDataList = <LockUserItemData>[].obs;
var pageNo = 1.obs;
var pageSize = 20.obs;
}

View File

@ -1,4 +1,3 @@
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart';
import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/network/api_repository.dart';
@ -26,6 +25,5 @@ class MassSendLockGroupListLogic extends BaseGetXController {
var isVip = await Storage.getBool(saveIsVip); var isVip = await Storage.getBool(saveIsVip);
state.isVip.value = isVip ?? false; state.isVip.value = isVip ?? false;
AppLog.log('isVip: ${state.isVip.value}');
} }
} }

View File

@ -7,6 +7,7 @@ import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/ma
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart';
import 'package:star_lock/tools/ExpandedListView.dart'; import 'package:star_lock/tools/ExpandedListView.dart';
import 'package:star_lock/tools/advancedFunctionHandle.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
@ -53,39 +54,8 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
children: [ children: [
Obx(() => Visibility( Obx(() => Visibility(
visible: state.isVip.value ? false : true, visible: state.isVip.value ? false : true,
child: Container( child: AdvancedFunctionHandle()
color: AppColors.vipFeatureBgColor, .topTipsAdvancedFeatures('开通高级功能后才可以对锁进行管理'.tr))),
padding: EdgeInsets.only(left: 20.w, right: 20.w),
height: 80.h,
child: Row(
children: [
Text('开通高级功能后才可以对锁进行管理'.tr,
style: TextStyle(
color: AppColors.vipFeatureBtnTextColor,
fontSize: 22.sp)),
Expanded(
child: SizedBox(
width: 10.w,
)),
SizedBox(
width: 150.w,
height: 46.h,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.vipFeatureBtnBgColor,
),
onPressed: () {
Get.toNamed(Routers.advancedFeaturesWebPage);
},
child: Text(
'去开通',
style: TextStyle(
color: Colors.white, fontSize: 22.sp),
)),
)
],
),
))),
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),

View File

@ -2,15 +2,14 @@ import 'package:flutter/material.dart';
import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get_utils/get_utils.dart'; import 'package:get/get_utils/get_utils.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
import '../../../../../../app_settings/app_colors.dart'; import '../../../../../../app_settings/app_colors.dart';
class MassSendReceiverCell extends StatelessWidget { class MassSendReceiverCell extends StatelessWidget {
final int currentIndex; final int currentIndex;
LockUserData userData; LockUserItemData userData;
final VoidCallback clickDeleteUser; final VoidCallback clickDeleteUser;
final FlutterContactPicker contactPicker = FlutterContactPicker(); final FlutterContactPicker contactPicker = FlutterContactPicker();
late Contact contact; late Contact contact;
@ -103,17 +102,16 @@ class MassSendReceiverCell extends StatelessWidget {
return controller; return controller;
} }
Widget massSendReceiverCellWidget( Widget massSendReceiverCellWidget({
{ String? leftTitel,
String? leftTitel, String? rightTitle,
String? rightTitle, bool? isHaveDirection,
bool? isHaveDirection, bool? isHaveLine,
bool? isHaveLine, bool? isHaveRightWidget,
bool? isHaveRightWidget, Widget? rightWidget,
Widget? rightWidget, Function()? action,
Function()? action, double? allHeight,
double? allHeight, }) {
}){
return Column( return Column(
// mainAxisAlignment: MainAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
@ -132,14 +130,14 @@ class MassSendReceiverCell extends StatelessWidget {
isHaveRightWidget! isHaveRightWidget!
? rightWidget! ? rightWidget!
: Text( : Text(
rightTitle ?? "", rightTitle ?? "",
textAlign: TextAlign.end, textAlign: TextAlign.end,
// overflow: TextOverflow.ellipsis, // overflow: TextOverflow.ellipsis,
// maxLines: 1, // maxLines: 1,
style: TextStyle( style: TextStyle(
fontSize: 22.sp, fontSize: 22.sp,
color: AppColors.darkGrayTextColor), color: AppColors.darkGrayTextColor),
) )
], ],
) )
], ],
@ -151,7 +149,7 @@ class MassSendReceiverCell extends StatelessWidget {
// //
Widget getTFWidget( Widget getTFWidget(
bool isHaveBtn, String tfStr, int lineIndex, LockUserData userData) { bool isHaveBtn, String tfStr, int lineIndex, LockUserItemData userData) {
return SizedBox( return SizedBox(
height: 50.h, height: 50.h,
width: 380.w, width: 380.w,

View File

@ -0,0 +1,20 @@
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/storage.dart';
class MassSendReceiverLogic extends BaseGetXController {
MassSendReceiverState state = MassSendReceiverState();
@override
Future<void> onReady() async {
super.onReady();
LockUserItemData data = LockUserItemData();
state.lockUserList.add(data);
var isVip = await Storage.getBool(saveIsVip);
state.isVip.value = isVip ?? false;
state.isVip.refresh();
}
}

View File

@ -1,10 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/utils.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_colors.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/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiverCell.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiverCell.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendReceiver/massSendReceiver_logic.dart';
import 'package:star_lock/tools/advancedFunctionHandle.dart';
import 'package:star_lock/tools/commonItem.dart'; import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/translations/trans_lib.dart'; import 'package:star_lock/translations/trans_lib.dart';
@ -18,20 +20,8 @@ class MassSendReceiverPage extends StatefulWidget {
} }
class _MassSendReceiverPageState extends State<MassSendReceiverPage> { class _MassSendReceiverPageState extends State<MassSendReceiverPage> {
late List<LockUserData> _lockUserList = []; final logic = Get.put(MassSendReceiverLogic());
TextEditingController emailOrPhoneController = TextEditingController(); final state = Get.find<MassSendReceiverLogic>().state;
TextEditingController keyNameController = TextEditingController();
String countryCode = '86';
String countryName = '中国';
@override
void initState() {
super.initState();
LockUserData data = LockUserData();
_lockUserList.add(data);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -57,8 +47,11 @@ class _MassSendReceiverPageState extends State<MassSendReceiverPage> {
style: TextStyle(color: Colors.white, fontSize: 24.sp), style: TextStyle(color: Colors.white, fontSize: 24.sp),
), ),
onPressed: () { onPressed: () {
if (!state.isVip.value) {
return;
}
Map<String, dynamic> resultMap = {}; Map<String, dynamic> resultMap = {};
resultMap['lockUserList'] = _lockUserList; resultMap['lockUserList'] = state.lockUserList.value;
Navigator.pop(context, resultMap); Navigator.pop(context, resultMap);
}, },
), ),
@ -66,52 +59,60 @@ class _MassSendReceiverPageState extends State<MassSendReceiverPage> {
), ),
body: Column( body: Column(
children: [ children: [
CommonItem( Obx(() => Visibility(
leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr, visible: state.isVip.value ? false : true,
rightTitle: "", child: AdvancedFunctionHandle()
isHaveLine: true, .topTipsAdvancedFeatures('开通高级功能后才可以选择和添加接收者'.tr))),
isHaveRightWidget: true, Obx(() => Visibility(
isHaveDirection: true, visible: state.isVip.value ? true : false,
rightWidget: Text( child: CommonItem(
'$countryName +$countryCode', leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr,
textAlign: TextAlign.end, rightTitle: "",
style: TextStyle( isHaveLine: true,
fontSize: 22.sp, color: AppColors.darkGrayTextColor), isHaveRightWidget: true,
), isHaveDirection: true,
action: () async { rightWidget: Text(
var result = await Navigator.pushNamed( '${state.countryName.value} +${state.countryCode.value}',
context, Routers.selectCountryRegionPage); textAlign: TextAlign.end,
if (result != null) { style: TextStyle(
result as Map<String, dynamic>; fontSize: 22.sp, color: AppColors.darkGrayTextColor),
countryCode = result['code']; ),
countryName = result['countryName']; action: () async {
setState(() {}); var result = await Navigator.pushNamed(
} context, Routers.selectCountryRegionPage);
}, if (result != null) {
), result as Map<String, dynamic>;
Row( state.countryCode.value = result['code'];
children: [controlViewTitle(0), controlViewTitle(1)], state.countryName.value = result['countryName'];
), setState(() {});
}
},
))),
Obx(() => Row(
children: [controlViewTitle(0), controlViewTitle(1)],
)),
SizedBox( SizedBox(
height: 2.h, height: 2.h,
), ),
Expanded( Obx(() => Visibility(
child: ListView.separated( visible: state.isVip.value ? true : false,
itemBuilder: (BuildContext context, int index) { child: Expanded(
LockUserData data = _lockUserList[index]; child: ListView.separated(
emailOrPhoneController.text = data.userid ?? ''; itemBuilder: (BuildContext context, int index) {
keyNameController.text = data.nickname ?? ''; LockUserItemData data = state.lockUserList.value[index];
state.emailOrPhoneController.text = data.userid ?? '';
state.keyNameController.text = data.nickname ?? '';
return _itemBuilder(index, data); return _itemBuilder(index, data);
}, },
itemCount: _lockUserList.length, itemCount: state.lockUserList.value.length,
separatorBuilder: (BuildContext context, int index) { separatorBuilder: (BuildContext context, int index) {
return Divider( return Divider(
height: 20.h, height: 20.h,
color: AppColors.greyBackgroundColor, color: AppColors.greyBackgroundColor,
); );
}, },
)), )))),
], ],
), ),
); );
@ -130,7 +131,9 @@ class _MassSendReceiverPageState extends State<MassSendReceiverPage> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Image.asset( Image.asset(
'images/icon_btn_add.png', state.isVip.value
? 'images/icon_btn_add.png'
: 'images/icon_btn_disableAdd.png',
width: 28.w, width: 28.w,
height: 28.w, height: 28.w,
), ),
@ -140,7 +143,9 @@ class _MassSendReceiverPageState extends State<MassSendReceiverPage> {
Text( Text(
btnIndex == 0 ? '已有' : '新增', btnIndex == 0 ? '已有' : '新增',
style: TextStyle( style: TextStyle(
color: AppColors.mainColor, color: state.isVip.value
? AppColors.mainColor
: AppColors.placeholderTextColor,
fontSize: 24.sp, fontSize: 24.sp,
fontWeight: FontWeight.bold), fontWeight: FontWeight.bold),
) )
@ -148,32 +153,35 @@ class _MassSendReceiverPageState extends State<MassSendReceiverPage> {
), ),
), ),
onTap: () async { onTap: () async {
if (!state.isVip.value) {
return;
}
if (btnIndex == 0) { if (btnIndex == 0) {
// //
Navigator.pushNamed(context, Routers.lockUserListPage).then((val) { Navigator.pushNamed(context, Routers.lockUserListPage).then((val) {
if (val != null) { if (val != null) {
val as Map<String, dynamic>; val as Map<String, dynamic>;
_lockUserList = val['lockUserList']; state.lockUserList.value = val['lockUserList'];
setState(() {}); setState(() {});
} }
}); });
} else if (btnIndex == 1) { } else if (btnIndex == 1) {
// //
_lockUserList.add(LockUserData()); state.lockUserList.value.add(LockUserItemData());
setState(() {}); setState(() {});
} }
}, },
); );
} }
Widget _itemBuilder(int index, LockUserData userData) { Widget _itemBuilder(int index, LockUserItemData userData) {
return MassSendReceiverCell( return MassSendReceiverCell(
index, index,
currentIndex: index, currentIndex: index,
userData: userData, userData: userData,
clickDeleteUser: () { clickDeleteUser: () {
_lockUserList.removeAt(index - 1); state.lockUserList.value.removeAt(index - 1);
setState(() {}); setState(() {});
}, },
); );

View File

@ -0,0 +1,13 @@
import 'package:flutter/widgets.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
class MassSendReceiverState {
var isVip = false.obs;
var lockUserList = <LockUserItemData>[].obs;
TextEditingController emailOrPhoneController = TextEditingController();
TextEditingController keyNameController = TextEditingController();
var countryCode = '86'.obs;
var countryName = '中国'.obs;
}

View File

@ -4,7 +4,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/main/lockDetail/messageWarn/addFamily/addFamily_logic.dart'; import 'package:star_lock/main/lockDetail/messageWarn/addFamily/addFamily_logic.dart';
import 'package:star_lock/tools/advancedFunctionAlert.dart'; import 'package:star_lock/tools/advancedFunctionHandle.dart';
import 'package:star_lock/tools/commonItem.dart'; import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/tools/showTFView.dart'; import 'package:star_lock/tools/showTFView.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';

View File

@ -3,7 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprint/coerceFingerprint_logic.dart'; import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprint/coerceFingerprint_logic.dart';
import 'package:star_lock/tools/advancedFunctionAlert.dart'; import 'package:star_lock/tools/advancedFunctionHandle.dart';
import 'package:star_lock/tools/commonItem.dart'; import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';

View File

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/tools/advancedFunctionAlert.dart'; import 'package:star_lock/tools/advancedFunctionHandle.dart';
import 'package:star_lock/tools/commonItem.dart'; import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/submitBtn.dart';

View File

@ -4,7 +4,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/msgNotification/msgNotification_entity.dart'; import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/msgNotification/msgNotification_entity.dart';
import 'package:star_lock/tools/advancedFunctionAlert.dart'; import 'package:star_lock/tools/advancedFunctionHandle.dart';
import 'package:star_lock/tools/commonItem.dart'; import 'package:star_lock/tools/commonItem.dart';
import 'package:star_lock/tools/pickers/pickers.dart'; import 'package:star_lock/tools/pickers/pickers.dart';
import 'package:star_lock/tools/pickers/style/default_style.dart'; import 'package:star_lock/tools/pickers/style/default_style.dart';

View File

@ -1,6 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart'; import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.dart';
import 'package:star_lock/tools/dateTool.dart'; import 'package:star_lock/tools/dateTool.dart';
@ -14,10 +12,10 @@ class PasswordKeyPerpetualState {
final isPermanent = true.obs; // final isPermanent = true.obs; //
var getPwdStr = ''.obs; var getPwdStr = ''.obs;
var pwdNameStr = ''; var pwdNameStr = '';
final isAdministrator = false.obs;// final isAdministrator = false.obs; //
var beginTime = DateTool().getNowDateWithType(3).obs; // var beginTime = DateTool().getNowDateWithType(3).obs; //
var endTime = DateTool().getNowDateWithType(3).obs;// var endTime = DateTool().getNowDateWithType(3).obs; //
var loopEffectiveDate = DateTool().getNowDateWithType(7).obs; // var loopEffectiveDate = DateTool().getNowDateWithType(7).obs; //
var loopFailureDate = DateTool().getNowDateWithType(7).obs; // var loopFailureDate = DateTool().getNowDateWithType(7).obs; //
@ -26,23 +24,22 @@ class PasswordKeyPerpetualState {
var loopModeStr = '周末'.obs; // var loopModeStr = '周末'.obs; //
var customBeginTime = DateTool().getNowDateWithType(2).obs; // var customBeginTime = DateTool().getNowDateWithType(2).obs; //
var customEndTime = DateTool().getNowDateWithType(2).obs;// var customEndTime = DateTool().getNowDateWithType(2).obs; //
final widgetType = 0.obs; final widgetType = 0.obs;
final sendSucceedType = 0.obs; final sendSucceedType = 0.obs;
final keyInfo = LockListInfoItemEntity().obs; final keyInfo = LockListInfoItemEntity().obs;
var ifCurrentScreen = true.obs; // , var ifCurrentScreen = true.obs; // ,
var sureBtnState = 0.obs;// 0() 1() var sureBtnState = 0.obs; // 0() 1()
var pwdNumber = 0.obs;// var pwdNumber = 0.obs; //
late TabController tabController; late TabController tabController;
PasswordKeyPerpetualState() { PasswordKeyPerpetualState() {
Map map = Get.arguments; Map map = Get.arguments;
if(map["keyInfo"] != null){ if (map["keyInfo"] != null) {
keyInfo.value = map["keyInfo"]; keyInfo.value = map["keyInfo"];
} }
} }
} }

View File

@ -4,7 +4,7 @@ import 'dart:async';
import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../../main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import '../../../../main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import '../../../../network/api_repository.dart'; import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../../tools/eventBusEventManage.dart'; import '../../../../tools/eventBusEventManage.dart';

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/noData.dart';
import '../../../../../appRouters.dart'; import '../../../../../appRouters.dart';
@ -26,8 +26,8 @@ class _LockUserManageListPageState extends State<LockUserManageListPage> {
final state = Get.find<LockUserManageListLogic>().state; final state = Get.find<LockUserManageListLogic>().state;
Future<void> getHttpData() async { Future<void> getHttpData() async {
logic.lockUserListRequest().then((LockUserListEntity value){ logic.lockUserListRequest().then((LockUserListEntity value) {
if(mounted) setState(() {}); if (mounted) setState(() {});
}); });
} }
@ -59,11 +59,11 @@ class _LockUserManageListPageState extends State<LockUserManageListPage> {
], ],
), ),
body: EasyRefreshTool( body: EasyRefreshTool(
onRefresh: (){ onRefresh: () {
logic.pageNo = 1; logic.pageNo = 1;
getHttpData(); getHttpData();
}, },
onLoad: (){ onLoad: () {
getHttpData(); getHttpData();
}, },
child: Column( child: Column(
@ -112,21 +112,26 @@ class _LockUserManageListPageState extends State<LockUserManageListPage> {
Widget _buildMainUI() { Widget _buildMainUI() {
return state.dataList.isEmpty return state.dataList.isEmpty
? NoData(noDataHeight: 1.sh - ScreenUtil().statusBarHeight - ScreenUtil().bottomBarHeight - 190.h - 64.h) ? NoData(
noDataHeight: 1.sh -
ScreenUtil().statusBarHeight -
ScreenUtil().bottomBarHeight -
190.h -
64.h)
: SlidableAutoCloseBehavior( : SlidableAutoCloseBehavior(
child: ListView.separated( child: ListView.separated(
itemCount: state.dataList.length, itemCount: state.dataList.length,
itemBuilder: (c, index) { itemBuilder: (c, index) {
LockUserData indexEntity = state.dataList[index]; LockUserItemData indexEntity = state.dataList[index];
if (index < state.dataList.length) { if (index < state.dataList.length) {
return Slidable( return Slidable(
key:ValueKey(indexEntity.uid), key: ValueKey(indexEntity.uid),
endActionPane: ActionPane( endActionPane: ActionPane(
extentRatio: 0.2, extentRatio: 0.2,
motion: const ScrollMotion(), motion: const ScrollMotion(),
children: [ children: [
SlidableAction( SlidableAction(
onPressed: (BuildContext context){ onPressed: (BuildContext context) {
showIosTipViewDialog(context, indexEntity); showIosTipViewDialog(context, indexEntity);
}, },
backgroundColor: Colors.red, backgroundColor: Colors.red,
@ -149,10 +154,10 @@ class _LockUserManageListPageState extends State<LockUserManageListPage> {
); );
}, },
), ),
); );
} }
Widget _electronicKeyItem(LockUserData itemData) { Widget _electronicKeyItem(LockUserItemData itemData) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
Navigator.pushNamed(context, Routers.ownedKeyListPage, Navigator.pushNamed(context, Routers.ownedKeyListPage,
@ -220,7 +225,8 @@ class _LockUserManageListPageState extends State<LockUserManageListPage> {
); );
} }
void showIosTipViewDialog(BuildContext context, LockUserData lockUserData) { void showIosTipViewDialog(
BuildContext context, LockUserItemData lockUserData) {
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -235,8 +241,6 @@ class _LockUserManageListPageState extends State<LockUserManageListPage> {
Get.back(); Get.back();
}, },
); );
} });
);
} }
} }

View File

@ -1,11 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../../main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import '../../../../main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
class LockUserManageListState { class LockUserManageListState {
final dataList = <LockUserData>[].obs; final dataList = <LockUserItemData>[].obs;
final TextEditingController searchController = TextEditingController(); final TextEditingController searchController = TextEditingController();
}
}

View File

@ -3,7 +3,7 @@ import 'package:star_lock/login/selectCountryRegion/common/countryRegionEntity.d
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyDetail/keyOperationRecord/keyOperationRecord_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/electronicKeyList/entity/ElectronicKeyListEntity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/lockUserList/lockUserList_entity.dart';
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
import 'package:star_lock/main/lockDetail/face/addFace/addFace_entity.dart'; import 'package:star_lock/main/lockDetail/face/addFace/addFace_entity.dart';
import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart'; import 'package:star_lock/main/lockDetail/lockSet/basicInformation/basicInformation/KeyDetailEntity.dart';

View File

@ -1,4 +1,5 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
@ -43,4 +44,42 @@ class AdvancedFunctionHandle {
); );
}); });
} }
//
Widget topTipsAdvancedFeatures(String tipsText) {
return Container(
color: AppColors.vipFeatureBgColor,
padding: EdgeInsets.only(left: 20.w),
height: 80.h,
child: Row(
children: [
Text(tipsText,
style: TextStyle(
color: AppColors.vipFeatureBtnTextColor, fontSize: 22.sp)),
SizedBox(
width: 10.w,
),
SizedBox(
width: 146.w,
height: 46.h,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: AppColors.vipFeatureBtnBgColor,
),
onPressed: () {
Get.toNamed(Routers.advancedFeaturesWebPage);
},
child: Text(
'去开通'.tr,
style: TextStyle(color: Colors.white, fontSize: 22.sp),
)),
),
Expanded(
child: SizedBox(
width: 2.w,
))
],
),
);
}
} }