提交修复卡、指纹模块bug
This commit is contained in:
parent
4041c9dd83
commit
f618546d86
@ -5,6 +5,7 @@ import 'package:get/get.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../network/api_repository.dart';
|
||||
import '../../../../tools/toast.dart';
|
||||
import 'addCardType_state.dart';
|
||||
|
||||
@ -89,7 +90,16 @@ class AddCardTypeLogic extends BaseGetXController{
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 校验卡名字是否重复
|
||||
void checkCardNameDuplicated(String cardName) async{
|
||||
var entity = await ApiRepository.to.checkCardNameDuplicatedData(
|
||||
lockId: state.lockId.value.toString(),
|
||||
cardName: cardName,
|
||||
);
|
||||
if(entity.errorCode!.codeIsSuccessful){
|
||||
addCardData();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
|
||||
@ -200,7 +200,7 @@ class _AddCardPageState extends State<AddCardPage> {
|
||||
return;
|
||||
}
|
||||
|
||||
logic.addCardData();
|
||||
logic.checkCardNameDuplicated(state.nameController.text);
|
||||
} else {
|
||||
// Get.toNamed(Routers.seletLockTypePage);
|
||||
Toast.show(msg: "演示模式");
|
||||
|
||||
@ -214,8 +214,13 @@ class AddICCardLogic extends BaseGetXController{
|
||||
|
||||
// 添加卡片
|
||||
Future<void> senderAddICCard() async {
|
||||
showBlueConnetctToastTimer(action: (){
|
||||
print("没有任何响应");
|
||||
Get.close(1);
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == DeviceConnectionState.connected){
|
||||
cancelBlueConnetctToastTimer();
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
@ -241,8 +246,11 @@ class AddICCardLogic extends BaseGetXController{
|
||||
token: getTokenList,
|
||||
);
|
||||
} else if (deviceConnectionState == DeviceConnectionState.disconnected){
|
||||
showBlueConnetctToast();
|
||||
Get.close(2);
|
||||
if(state.ifCurrentScreen.value == true){
|
||||
showBlueConnetctToast();
|
||||
}
|
||||
cancelBlueConnetctToastTimer();
|
||||
Get.close(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -4,6 +4,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../tools/appRouteObserver.dart';
|
||||
import '../../../../tools/titleAppBar.dart';
|
||||
import '../../../../translations/trans_lib.dart';
|
||||
import 'addICCard_logic.dart';
|
||||
@ -15,7 +17,7 @@ class AddICCardPage extends StatefulWidget {
|
||||
State<AddICCardPage> createState() => _AddICCardPageState();
|
||||
}
|
||||
|
||||
class _AddICCardPageState extends State<AddICCardPage> {
|
||||
class _AddICCardPageState extends State<AddICCardPage> with RouteAware {
|
||||
final logic = Get.put(AddICCardLogic());
|
||||
final state = Get.find<AddICCardLogic>().state;
|
||||
|
||||
@ -29,16 +31,18 @@ class _AddICCardPageState extends State<AddICCardPage> {
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor,
|
||||
),
|
||||
body: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
body: ListView(
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(height: 200.h),
|
||||
Image.asset(
|
||||
'images/main/icon_addCard.png',
|
||||
width: 234.w,
|
||||
height: 211.h,
|
||||
fit: BoxFit.cover,
|
||||
Center(
|
||||
child: Image.asset(
|
||||
'images/main/icon_addCard.png',
|
||||
width: 234.w,
|
||||
height: 211.h,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 90.h),
|
||||
CupertinoActivityIndicator(
|
||||
@ -67,4 +71,59 @@ class _AddICCardPageState extends State<AddICCardPage> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 从上级界面进入 当前界面即将出现
|
||||
@override
|
||||
void didPush() {
|
||||
super.didPush();
|
||||
print("lockSet===didPush");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 返回上一个界面 当前界面即将消失
|
||||
@override
|
||||
void didPop() {
|
||||
super.didPop();
|
||||
print("lockSet===didPop");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
|
||||
/// 从下级返回 当前界面即将出现
|
||||
@override
|
||||
void didPopNext() {
|
||||
super.didPopNext();
|
||||
print("lockSet===didPopNext");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 进入下级界面 当前界面即将消失
|
||||
@override
|
||||
void didPushNext() {
|
||||
super.didPushNext();
|
||||
print("lockSet===didPushNext");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
|
||||
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,8 @@ import 'package:get/get.dart';
|
||||
|
||||
class AddICCardState{
|
||||
var ifConnectScuess = false.obs;
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
|
||||
var addFingerprintProcessNumber = 0.obs;
|
||||
final lockId = 0.obs;
|
||||
final endDate = "".obs;
|
||||
|
||||
@ -40,6 +40,7 @@ class CardDetailLogic extends BaseGetXController{
|
||||
case 0x00:
|
||||
//成功
|
||||
print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
dismissEasyLoading();
|
||||
deletICCardData();
|
||||
break;
|
||||
case 0x06:
|
||||
@ -88,6 +89,16 @@ class CardDetailLogic extends BaseGetXController{
|
||||
|
||||
// 删除卡片
|
||||
Future<void> senderAddICCard() async {
|
||||
if(state.sureBtnState.value == 1){
|
||||
return;
|
||||
}
|
||||
state.sureBtnState.value = 1;
|
||||
|
||||
showEasyLoading();
|
||||
showBlueConnetctToastTimer(action: (){
|
||||
dismissEasyLoading();
|
||||
state.sureBtnState.value = 0;
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == DeviceConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
@ -113,6 +124,13 @@ class CardDetailLogic extends BaseGetXController{
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
} else if (deviceConnectionState == DeviceConnectionState.disconnected) {
|
||||
dismissEasyLoading();
|
||||
cancelBlueConnetctToastTimer();
|
||||
state.sureBtnState.value = 0;
|
||||
if(state.ifCurrentScreen.value == true){
|
||||
showBlueConnetctToast();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../tools/appRouteObserver.dart';
|
||||
import '../../../../tools/commonItem.dart';
|
||||
import '../../../../tools/dateTool.dart';
|
||||
import '../../../../tools/showIosTipView.dart';
|
||||
@ -24,7 +27,7 @@ class CardDetailPage extends StatefulWidget {
|
||||
State<CardDetailPage> createState() => _CardDetailPageState();
|
||||
}
|
||||
|
||||
class _CardDetailPageState extends State<CardDetailPage> {
|
||||
class _CardDetailPageState extends State<CardDetailPage> with RouteAware {
|
||||
final logic = Get.put(CardDetailLogic());
|
||||
final state = Get.find<CardDetailLogic>().state;
|
||||
|
||||
@ -33,7 +36,7 @@ class _CardDetailPageState extends State<CardDetailPage> {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle: "${TranslationLoader.lanKeys!.card!.tr}${TranslationLoader.lanKeys!.number!.tr}",
|
||||
barTitle: "卡详情",
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor,
|
||||
// actionsList: [
|
||||
@ -359,4 +362,61 @@ class _CardDetailPageState extends State<CardDetailPage> {
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 从上级界面进入 当前界面即将出现
|
||||
@override
|
||||
void didPush() {
|
||||
super.didPush();
|
||||
print("lockSet===didPush");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 返回上一个界面 当前界面即将消失
|
||||
@override
|
||||
void didPop() {
|
||||
super.didPop();
|
||||
print("lockSet===didPop");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
state.sureBtnState.value = 0;
|
||||
}
|
||||
|
||||
/// 从下级返回 当前界面即将出现
|
||||
@override
|
||||
void didPopNext() {
|
||||
super.didPopNext();
|
||||
print("lockSet===didPopNext");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 进入下级界面 当前界面即将消失
|
||||
@override
|
||||
void didPushNext() {
|
||||
super.didPushNext();
|
||||
print("lockSet===didPushNext");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
state.sureBtnState.value = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -11,6 +11,9 @@ class CardDetailState{
|
||||
|
||||
final TextEditingController changeNameController = TextEditingController();
|
||||
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用)
|
||||
|
||||
final typeNumber = "".obs;// 指纹号
|
||||
final typeName = "".obs;// 指纹名字
|
||||
var effectiveDateTime = 0.obs;// 生效时间
|
||||
|
||||
@ -260,6 +260,10 @@ class CardListLogic extends BaseGetXController {
|
||||
|
||||
// 删除卡片
|
||||
Future<void> senderAddICCard() async {
|
||||
showEasyLoading();
|
||||
showBlueConnetctToastTimer(action: (){
|
||||
dismissEasyLoading();
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == DeviceConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
@ -284,6 +288,12 @@ class CardListLogic extends BaseGetXController {
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
} else if (deviceConnectionState == DeviceConnectionState.disconnected) {
|
||||
dismissEasyLoading();
|
||||
cancelBlueConnetctToastTimer();
|
||||
if(state.ifCurrentScreen.value == true){
|
||||
showBlueConnetctToast();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -364,7 +374,8 @@ class CardListLogic extends BaseGetXController {
|
||||
if(isDemoMode == false) {
|
||||
// senderQueryingFingerprintStatus();
|
||||
// senderCheckingCardStatus();
|
||||
senderCheckingUserInfoCount();
|
||||
|
||||
// senderCheckingUserInfoCount();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,11 +2,14 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../tools/appRouteObserver.dart';
|
||||
import '../../../../tools/dateTool.dart';
|
||||
import '../../../../tools/keySearchWidget.dart';
|
||||
import '../../../../tools/left_slide_actions.dart';
|
||||
@ -27,7 +30,7 @@ class CardListPage extends StatefulWidget {
|
||||
State<CardListPage> createState() => _CardListPageState();
|
||||
}
|
||||
|
||||
class _CardListPageState extends State<CardListPage> {
|
||||
class _CardListPageState extends State<CardListPage> with RouteAware {
|
||||
final logic = Get.put(CardListLogic());
|
||||
final state = Get.find<CardListLogic>().state;
|
||||
|
||||
@ -248,7 +251,7 @@ class _CardListPageState extends State<CardListPage> {
|
||||
builder: (context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: const Text("提示"),
|
||||
content: const Text('重置后信息都会清除哦,确认要重置吗?'),
|
||||
content: const Text('重置后该锁的卡都将被删除哦,确认要重置吗?'),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
|
||||
@ -273,4 +276,59 @@ class _CardListPageState extends State<CardListPage> {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 从上级界面进入 当前界面即将出现
|
||||
@override
|
||||
void didPush() {
|
||||
super.didPush();
|
||||
print("lockSet===didPush");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 返回上一个界面 当前界面即将消失
|
||||
@override
|
||||
void didPop() {
|
||||
super.didPop();
|
||||
print("lockSet===didPop");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
|
||||
/// 从下级返回 当前界面即将出现
|
||||
@override
|
||||
void didPopNext() {
|
||||
super.didPopNext();
|
||||
print("lockSet===didPopNext");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 进入下级界面 当前界面即将消失
|
||||
@override
|
||||
void didPushNext() {
|
||||
super.didPushNext();
|
||||
print("lockSet===didPushNext");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,6 +16,8 @@ class CardListState {
|
||||
final fingerprintItemListData = <FingerprintItemData>[].obs;
|
||||
final TextEditingController searchController = TextEditingController();
|
||||
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
|
||||
CardListState() {
|
||||
Map map = Get.arguments;
|
||||
lockId.value = map["lockId"];
|
||||
|
||||
@ -59,6 +59,10 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
//成功
|
||||
print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
state.ifConnectScuess.value = true;
|
||||
|
||||
// 最大图片数
|
||||
state.maxRegCount.value = reply.data[10];
|
||||
|
||||
// state.fingerprintNumber.value = reply.data.last.toString();
|
||||
break;
|
||||
case 0x06:
|
||||
@ -122,8 +126,11 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
Toast.show(msg: "添加失败");
|
||||
Get.close(2);
|
||||
}else{
|
||||
state.addFingerprintProcessNumber.value++;
|
||||
print("state.addFingerprintProcessNumber.value:${state.addFingerprintProcessNumber.value}");
|
||||
// state.addFingerprintProcessNumber.value++;
|
||||
|
||||
// 当前注册数
|
||||
state.regIndex.value = reply.data[6];
|
||||
print("state.addFingerprintProcessNumber.value:${state.regIndex.value}");
|
||||
}
|
||||
break;
|
||||
case 0x06:
|
||||
@ -252,9 +259,12 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
|
||||
// 添加指纹开始
|
||||
Future<void> senderAddFingerprint() async {
|
||||
showBlueConnetctToastTimer(action: (){
|
||||
Get.close(1);
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState deviceConnectionState) async {
|
||||
// print("66666666:$deviceConnectionState");
|
||||
if (deviceConnectionState == DeviceConnectionState.connected){
|
||||
cancelBlueConnetctToastTimer();
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> publicKeyDataList = changeStringListToIntList(publicKey!);
|
||||
|
||||
@ -280,8 +290,11 @@ class AddFingerprintLogic extends BaseGetXController {
|
||||
token: getTokenList,
|
||||
);
|
||||
}else if (deviceConnectionState == DeviceConnectionState.disconnected){
|
||||
showBlueConnetctToast();
|
||||
Get.close(2);
|
||||
if(state.ifCurrentScreen.value == true){
|
||||
showBlueConnetctToast();
|
||||
}
|
||||
cancelBlueConnetctToastTimer();
|
||||
Get.close(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -3,11 +3,11 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../../appRouters.dart';
|
||||
import '../../../../../app_settings/app_colors.dart';
|
||||
import '../../../../../tools/submitBtn.dart';
|
||||
import '../../../../../tools/titleAppBar.dart';
|
||||
import '../../../../../translations/trans_lib.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../tools/appRouteObserver.dart';
|
||||
import 'addFingerprint_logic.dart';
|
||||
|
||||
class AddFingerprintPage extends StatefulWidget {
|
||||
@ -17,7 +17,7 @@ class AddFingerprintPage extends StatefulWidget {
|
||||
State<AddFingerprintPage> createState() => _AddFingerprintPageState();
|
||||
}
|
||||
|
||||
class _AddFingerprintPageState extends State<AddFingerprintPage> {
|
||||
class _AddFingerprintPageState extends State<AddFingerprintPage> with RouteAware {
|
||||
final logic = Get.put(AddFingerprintLogic());
|
||||
final state = Get.find<AddFingerprintLogic>().state;
|
||||
|
||||
@ -58,7 +58,7 @@ class _AddFingerprintPageState extends State<AddFingerprintPage> {
|
||||
),
|
||||
SizedBox(height: 10.h),
|
||||
Text(
|
||||
"(${state.addFingerprintProcessNumber.value}/4)",
|
||||
"(${state.regIndex.value}/${state.maxRegCount.value})",
|
||||
// TranslationLoader.lanKeys!.lightTouchScreenTip!.tr,
|
||||
textAlign: TextAlign.center,
|
||||
maxLines:null,
|
||||
@ -89,7 +89,7 @@ class _AddFingerprintPageState extends State<AddFingerprintPage> {
|
||||
height: 100.h,
|
||||
),
|
||||
Obx(() => Image.asset(
|
||||
getIconNumber(state.addFingerprintProcessNumber.value),
|
||||
getIconNumber(state.regIndex.value),
|
||||
width: 185.w,
|
||||
height: 295.h,
|
||||
),),
|
||||
@ -138,4 +138,59 @@ class _AddFingerprintPageState extends State<AddFingerprintPage> {
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 从上级界面进入 当前界面即将出现
|
||||
@override
|
||||
void didPush() {
|
||||
super.didPush();
|
||||
print("lockSet===didPush");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 返回上一个界面 当前界面即将消失
|
||||
@override
|
||||
void didPop() {
|
||||
super.didPop();
|
||||
print("lockSet===didPop");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
|
||||
/// 从下级返回 当前界面即将出现
|
||||
@override
|
||||
void didPopNext() {
|
||||
super.didPopNext();
|
||||
print("lockSet===didPopNext");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 进入下级界面 当前界面即将消失
|
||||
@override
|
||||
void didPushNext() {
|
||||
super.didPushNext();
|
||||
print("lockSet===didPushNext");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
|
||||
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,8 +2,12 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class AddFingerprintState{
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
|
||||
var ifConnectScuess = false.obs;
|
||||
var addFingerprintProcessNumber = 0.obs;
|
||||
var maxRegCount = 0.obs;// 最大注册次数
|
||||
var regIndex = 0.obs;// 当前注册次数
|
||||
|
||||
final lockId = 0.obs;
|
||||
final endDate = "".obs;
|
||||
final addType = "".obs;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../network/api_repository.dart';
|
||||
import '../../../../tools/toast.dart';
|
||||
import 'addFingerprintType_state.dart';
|
||||
|
||||
@ -87,4 +88,15 @@ class AddFingerprintTypeLogic extends BaseGetXController{
|
||||
});
|
||||
}
|
||||
|
||||
// 校验指纹名字是否重复
|
||||
void checkFingerprintNameDuplicated(String fingerprintName) async{
|
||||
var entity = await ApiRepository.to.checkFingerprintNameDuplicatedData(
|
||||
lockId: state.lockId.value.toString(),
|
||||
fingerprintName: fingerprintName,
|
||||
);
|
||||
if(entity.errorCode!.codeIsSuccessful){
|
||||
addFingerprintsData();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -201,8 +201,7 @@ class _AddFingerprintTypePageState extends State<AddFingerprintTypePage> {
|
||||
Toast.show(msg: "请输入姓名");
|
||||
return;
|
||||
}
|
||||
|
||||
logic.addFingerprintsData();
|
||||
logic.checkFingerprintNameDuplicated(state.nameController.text);
|
||||
} else {
|
||||
// Get.toNamed(Routers.seletLockTypePage);
|
||||
Toast.show(msg: "演示模式");
|
||||
|
||||
@ -41,6 +41,8 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
case 0x00:
|
||||
//成功
|
||||
print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
state.sureBtnState.value = 0;
|
||||
dismissEasyLoading();
|
||||
deletFingerprintsData();
|
||||
break;
|
||||
case 0x06:
|
||||
@ -89,6 +91,16 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
|
||||
// 删除指纹
|
||||
Future<void> senderAddFingerprint() async {
|
||||
if(state.sureBtnState.value == 1){
|
||||
return;
|
||||
}
|
||||
state.sureBtnState.value = 1;
|
||||
|
||||
showEasyLoading();
|
||||
showBlueConnetctToastTimer(action: (){
|
||||
dismissEasyLoading();
|
||||
state.sureBtnState.value = 0;
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == DeviceConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
@ -114,6 +126,13 @@ class FingerprintDetailLogic extends BaseGetXController{
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
} else if (deviceConnectionState == DeviceConnectionState.disconnected) {
|
||||
dismissEasyLoading();
|
||||
cancelBlueConnetctToastTimer();
|
||||
state.sureBtnState.value = 0;
|
||||
if(state.ifCurrentScreen.value == true){
|
||||
showBlueConnetctToast();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../tools/appRouteObserver.dart';
|
||||
import '../../../../tools/commonItem.dart';
|
||||
import '../../../../tools/dateTool.dart';
|
||||
import '../../../../tools/showIosTipView.dart';
|
||||
@ -23,7 +26,7 @@ class FingerprintDetailPage extends StatefulWidget {
|
||||
State<FingerprintDetailPage> createState() => _FingerprintDetailPageState();
|
||||
}
|
||||
|
||||
class _FingerprintDetailPageState extends State<FingerprintDetailPage> {
|
||||
class _FingerprintDetailPageState extends State<FingerprintDetailPage> with RouteAware {
|
||||
final logic = Get.put(FingerprintDetailLogic());
|
||||
final state = Get.find<FingerprintDetailLogic>().state;
|
||||
|
||||
@ -80,6 +83,7 @@ class _FingerprintDetailPageState extends State<FingerprintDetailPage> {
|
||||
// 限时
|
||||
var data = await Get.toNamed(Routers.otherTypeKeyChangeDatePage, arguments: {
|
||||
"fingerprintItemData": state.fingerprintItemData.value,
|
||||
"pushType": 1,
|
||||
});
|
||||
if(data != null) {
|
||||
setState(() {
|
||||
@ -321,4 +325,61 @@ class _FingerprintDetailPageState extends State<FingerprintDetailPage> {
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 从上级界面进入 当前界面即将出现
|
||||
@override
|
||||
void didPush() {
|
||||
super.didPush();
|
||||
print("lockSet===didPush");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 返回上一个界面 当前界面即将消失
|
||||
@override
|
||||
void didPop() {
|
||||
super.didPop();
|
||||
print("lockSet===didPop");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
state.sureBtnState.value = 0;
|
||||
}
|
||||
|
||||
/// 从下级返回 当前界面即将出现
|
||||
@override
|
||||
void didPopNext() {
|
||||
super.didPopNext();
|
||||
print("lockSet===didPopNext");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 进入下级界面 当前界面即将消失
|
||||
@override
|
||||
void didPushNext() {
|
||||
super.didPushNext();
|
||||
print("lockSet===didPushNext");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
state.sureBtnState.value = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,6 +19,9 @@ class FingerprintDetailState{
|
||||
var addTime = 0.obs;// 添加时间
|
||||
var keyId = 0.obs;
|
||||
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
var sureBtnState = 0.obs;// 0普通状态(可用) 1连接中(不可用)
|
||||
|
||||
final isStressFingerprint = false.obs;
|
||||
FingerprintDetailState() {
|
||||
Map map = Get.arguments;
|
||||
|
||||
@ -41,9 +41,8 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
});
|
||||
}
|
||||
|
||||
// 添加指纹开始
|
||||
// 添加指纹开始---这里用作删除指纹
|
||||
Future<void> _replyAddFingerprintBegin(Reply reply) async {
|
||||
|
||||
int status = reply.data[2];
|
||||
print("status:$status");
|
||||
|
||||
@ -52,6 +51,7 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
//成功
|
||||
print("${reply.commandType!.typeValue} 数据解析成功");
|
||||
state.isDeletFingerprintData = false;
|
||||
dismissEasyLoading();
|
||||
deletAllFingerprintsData();
|
||||
break;
|
||||
case 0x06:
|
||||
@ -293,6 +293,10 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
|
||||
// 删除指纹
|
||||
Future<void> senderAddFingerprint() async {
|
||||
showEasyLoading();
|
||||
showBlueConnetctToastTimer(action: (){
|
||||
dismissEasyLoading();
|
||||
});
|
||||
BlueManage().bludSendData(BlueManage().connectDeviceName, (DeviceConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == DeviceConnectionState.connected){
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
@ -316,6 +320,12 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
privateKey:getPrivateKeyList,
|
||||
token: getTokenList,
|
||||
);
|
||||
} else if (deviceConnectionState == DeviceConnectionState.disconnected) {
|
||||
dismissEasyLoading();
|
||||
cancelBlueConnetctToastTimer();
|
||||
if(state.ifCurrentScreen.value == true){
|
||||
showBlueConnetctToast();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -395,7 +405,8 @@ class FingerprintListLogic extends BaseGetXController{
|
||||
if(isDemoMode == false) {
|
||||
// senderQueryingFingerprintStatus();
|
||||
// senderCheckingCardStatus();
|
||||
senderCheckingUserInfoCount();
|
||||
|
||||
// senderCheckingUserInfoCount();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,11 +2,14 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../app_settings/app_colors.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../tools/appRouteObserver.dart';
|
||||
import '../../../../tools/dateTool.dart';
|
||||
import '../../../../tools/keySearchWidget.dart';
|
||||
import '../../../../tools/left_slide_actions.dart';
|
||||
@ -27,7 +30,7 @@ class FingerprintListPage extends StatefulWidget {
|
||||
State<FingerprintListPage> createState() => _FingerprintListPageState();
|
||||
}
|
||||
|
||||
class _FingerprintListPageState extends State<FingerprintListPage> {
|
||||
class _FingerprintListPageState extends State<FingerprintListPage> with RouteAware {
|
||||
final logic = Get.put(FingerprintListLogic());
|
||||
final state = Get.find<FingerprintListLogic>().state;
|
||||
|
||||
@ -247,7 +250,7 @@ class _FingerprintListPageState extends State<FingerprintListPage> {
|
||||
builder: (context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: const Text("提示"),
|
||||
content: const Text('重置后信息都会清除哦,确认要重置吗?'),
|
||||
content: const Text('重置后,改为该锁的指纹都将被删除哦,确认要重置吗?'),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
|
||||
@ -272,4 +275,60 @@ class _FingerprintListPageState extends State<FingerprintListPage> {
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
// TODO: implement didChangeDependencies
|
||||
super.didChangeDependencies();
|
||||
|
||||
/// 路由订阅
|
||||
AppRouteObserver().routeObserver.subscribe(this, ModalRoute.of(context)!);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
/// 取消路由订阅
|
||||
AppRouteObserver().routeObserver.unsubscribe(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
/// 从上级界面进入 当前界面即将出现
|
||||
@override
|
||||
void didPush() {
|
||||
super.didPush();
|
||||
print("lockSet===didPush");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 返回上一个界面 当前界面即将消失
|
||||
@override
|
||||
void didPop() {
|
||||
super.didPop();
|
||||
print("lockSet===didPop");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
|
||||
/// 从下级返回 当前界面即将出现
|
||||
@override
|
||||
void didPopNext() {
|
||||
super.didPopNext();
|
||||
print("lockSet===didPopNext");
|
||||
state.ifCurrentScreen.value = true;
|
||||
}
|
||||
|
||||
/// 进入下级界面 当前界面即将消失
|
||||
@override
|
||||
void didPushNext() {
|
||||
super.didPushNext();
|
||||
print("lockSet===didPushNext");
|
||||
logic.cancelBlueConnetctToastTimer();
|
||||
if (EasyLoading.isShow) EasyLoading.dismiss(animation: true);
|
||||
BlueManage().stopScan();
|
||||
state.ifCurrentScreen.value = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -17,6 +17,8 @@ class FingerprintListState{
|
||||
final fingerprintItemListData = <FingerprintItemData>[].obs;
|
||||
final TextEditingController searchController = TextEditingController();
|
||||
|
||||
var ifCurrentScreen = true.obs; // 是否是当前界面,用于判断是否需要针对当前界面进行展示
|
||||
|
||||
FingerprintListState() {
|
||||
Map map = Get.arguments;
|
||||
lockId.value = map["lockId"];
|
||||
|
||||
@ -2,13 +2,11 @@ import 'dart:async';
|
||||
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
|
||||
import 'package:star_lock/blue/io_type.dart';
|
||||
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
import '../../../../blue/io_protocol/io_factoryDataReset.dart';
|
||||
import '../../../../blue/io_protocol/io_readSupportFunctionsNoParameters.dart';
|
||||
|
||||
@ -302,8 +302,8 @@ class LockDetailLogic extends BaseGetXController {
|
||||
case 0x00:
|
||||
//成功
|
||||
print("添加用户数据解析成功");
|
||||
state.lockUserNo = reply.data[47] + 1;
|
||||
// updateLockUserNo();
|
||||
state.lockUserNo = reply.data[47];
|
||||
_updateLockUserNo();
|
||||
|
||||
if (state.isOpenLockNeedOnline.value == 0) {
|
||||
openDoorAction(1);
|
||||
@ -592,7 +592,7 @@ class LockDetailLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
// 普通用户接收电子钥匙之后 更新锁用户NO
|
||||
void updateLockUserNo() async {
|
||||
void _updateLockUserNo() async {
|
||||
LockNetTokenEntity entity = await ApiRepository.to.updateLockUserNo(
|
||||
keyId: state.keyInfos.value.keyId.toString(),
|
||||
lockUserNo: state.lockUserNo.toString());
|
||||
|
||||
@ -222,8 +222,7 @@ class LockOperatingRecordLogic extends BaseGetXController{
|
||||
|
||||
// 操作记录上传
|
||||
void lockRecordUploadData(List list) async {
|
||||
KeyOperationRecordEntity entity =
|
||||
await ApiRepository.to.lockRecordUploadData(
|
||||
KeyOperationRecordEntity entity = await ApiRepository.to.lockRecordUploadData(
|
||||
lockId: state.keyInfos.value.lockId.toString(),
|
||||
records: list);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
|
||||
@ -105,15 +105,15 @@ abstract class Api {
|
||||
final String addFingerprintURL = '/fingerprint/add'; // 添加指纹
|
||||
final String editFingerprintURL = '/fingerprint/changePeriod'; // 编辑指纹
|
||||
final String deleteFingerprintURL = '/fingerprint/delete'; // 删除指纹
|
||||
final String updateFingerprintUserNoURL =
|
||||
'/fingerprint/updateFingerprintUserNo'; // 更新指纹用户序号
|
||||
final String updateFingerprintUserNoURL = '/fingerprint/updateFingerprintUserNo'; // 更新指纹用户序号
|
||||
final String checkFingerprintNameURL = '/fingerprint/checkFingerprintName'; // 校验指纹名字是否存在
|
||||
|
||||
final String getICCardListURL = '/identityCard/list'; // IC卡列表
|
||||
final String addICCardURL = '/identityCard/add'; // 添加IC卡
|
||||
final String editICCardURL = '/identityCard/update'; // 编辑IC卡
|
||||
final String deleteICCardURL = '/identityCard/delete'; // 删除IC卡
|
||||
final String updateICCardUserNoURL =
|
||||
'/identityCard/updateCardUserNo'; // 更新ic卡用户序号
|
||||
final String updateICCardUserNoURL = '/identityCard/updateCardUserNo'; // 更新ic卡用户序号
|
||||
final String checkCardNameURL = '/identityCard/checkIdentityCardName'; // 校验卡名字是否存在
|
||||
|
||||
final String transferLockListURL = '/room/listForTransfer'; // 转移锁锁列表
|
||||
final String transferLockConfirmURL = '/room/transferLockConfirm'; // 转移智能锁确认
|
||||
|
||||
@ -1004,6 +1004,17 @@ class ApiProvider extends BaseProvider {
|
||||
'fingerprintUserNo': fingerprintUserNo
|
||||
}));
|
||||
|
||||
// 校验指纹名字是否重复
|
||||
Future<Response> checkFingerprintNameDuplicatedData(
|
||||
String lockId,
|
||||
String fingerprintName) =>
|
||||
post(
|
||||
checkFingerprintNameURL.toUrl,
|
||||
jsonEncode({
|
||||
'lockId': lockId,
|
||||
'fingerprintName': fingerprintName
|
||||
}));
|
||||
|
||||
// 获取IC卡列表
|
||||
Future<Response> getICCardListData(
|
||||
String lockId, String pageNo, String pageSize, String searchStr) =>
|
||||
@ -1078,6 +1089,17 @@ class ApiProvider extends BaseProvider {
|
||||
jsonEncode(
|
||||
{'cardId': cardId, 'lockId': lockId, 'cardUserNo': cardUserNo}));
|
||||
|
||||
// 校验卡名字是否重复
|
||||
Future<Response> checkCardNameDuplicatedData(
|
||||
String lockId,
|
||||
String cardName) =>
|
||||
post(
|
||||
checkCardNameURL.toUrl,
|
||||
jsonEncode({
|
||||
'lockId': lockId,
|
||||
'cardName': cardName
|
||||
}));
|
||||
|
||||
// 获取转移锁锁列表
|
||||
Future<Response> getTransferLockListData() =>
|
||||
post(transferLockListURL.toUrl, jsonEncode({}));
|
||||
|
||||
@ -1157,6 +1157,15 @@ class ApiRepository {
|
||||
return LoginEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
// 校验指纹名字是否重复
|
||||
Future<LoginEntity> checkFingerprintNameDuplicatedData(
|
||||
{required String lockId,
|
||||
required String fingerprintName}) async {
|
||||
final res = await apiProvider.checkFingerprintNameDuplicatedData(
|
||||
lockId, fingerprintName);
|
||||
return LoginEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
// 获取Ic卡列表
|
||||
Future<FingerprintListDataEntity> getICCardListData({
|
||||
required String lockId,
|
||||
@ -1222,6 +1231,15 @@ class ApiRepository {
|
||||
return LoginEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
// 校验卡名字是否重复
|
||||
Future<LoginEntity> checkCardNameDuplicatedData(
|
||||
{required String lockId,
|
||||
required String cardName}) async {
|
||||
final res = await apiProvider.checkCardNameDuplicatedData(
|
||||
lockId, cardName);
|
||||
return LoginEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
// 退出登录
|
||||
Future<LoginEntity> userLogout() async {
|
||||
final res = await apiProvider.userLogout();
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
part of lib_trans;
|
||||
|
||||
|
||||
|
||||
class TranslationLoader {
|
||||
|
||||
static bool get isZh => Get.locale?.languageCode.toLowerCase() == 'zh';
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user