From e91e45d71a10f05327eb971141300624ae4533a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Tue, 29 Aug 2023 17:39:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=A0=E9=99=A4=E9=94=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=8E=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/baseWidget.dart | 23 +++++++++ .../lib/blue/io_protocol/io_deletUser.dart | 8 +++ .../lib/login/login/starLock_login_logic.dart | 2 +- .../lcokSet/lockSet/lockSet_logic.dart | 31 +++++++++++- .../lcokSet/lockSet/lockSet_state.dart | 7 +++ .../lockDetail/lockDetail_logic.dart | 13 ++++- .../lockDetail/lockDetail_page.dart | 13 +++-- .../lockMian/lockMain/lockMain_logic.dart | 35 ++++++++++++- .../main/lockMian/lockMain/lockMain_page.dart | 11 ++++- .../lockAddress/lockAddressGaoDe_page.dart | 2 +- .../mine/addLock/saveLock/saveLock_logic.dart | 2 +- .../lib/mine/mine/starLockMine_state.dart | 16 +++--- star_lock/lib/network/api.dart | 1 + star_lock/lib/network/api_provider.dart | 9 ++++ star_lock/lib/network/api_repository.dart | 7 +++ star_lock/lib/tools/refreshHeadFoot.dart | 49 +++++++++++++++++++ star_lock/pubspec.yaml | 3 ++ 17 files changed, 210 insertions(+), 22 deletions(-) create mode 100644 star_lock/lib/tools/refreshHeadFoot.dart diff --git a/star_lock/lib/baseWidget.dart b/star_lock/lib/baseWidget.dart index 4315f18e..f7fe1ed0 100644 --- a/star_lock/lib/baseWidget.dart +++ b/star_lock/lib/baseWidget.dart @@ -1,9 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/translations/trans_lib.dart'; +import 'tools/refreshHeadFoot.dart'; + mixin BaseWidget { double fs(double value) => value.sp; double w(double width) => width.w; @@ -44,4 +47,24 @@ mixin BaseWidget { ), ); } + + SmartRefresher smartRefresher(RefreshController refreshController,{ + Widget? child, + Function()? onRefresh, + Function()? onLoading, + bool enablePullDown = true, + bool enablePullUp = false, + bool enableTwoLevel = false, + }) => SmartRefresher( + controller: refreshController, + onRefresh: onRefresh, + onLoading: onLoading, + enablePullUp: enablePullUp, + enablePullDown: enablePullDown, + enableTwoLevel: enableTwoLevel, + header: const HeaderWidget(), + footer: const FooterWidget(), + child: child, + ); + } diff --git a/star_lock/lib/blue/io_protocol/io_deletUser.dart b/star_lock/lib/blue/io_protocol/io_deletUser.dart index 27996ec5..4a9d32c9 100644 --- a/star_lock/lib/blue/io_protocol/io_deletUser.dart +++ b/star_lock/lib/blue/io_protocol/io_deletUser.dart @@ -62,6 +62,14 @@ class DeletUserCommand extends SenderProtocol { data.addAll(utf8.encode(keyID!)); data = getFixedLengthList(data, 40 - keyIDLength); + //delUserID 20 + int delUserIDLength = utf8.encode(delUserID!).length; + // print("${commandType!.typeValue}authUserIDLength:$authUserIDLength utf8.encode(authUserID!)${utf8.encode(authUserID!)}"); + data.addAll(utf8.encode(delUserID!)); + data = getFixedLengthList(data, 20 - delUserIDLength); + + data.addAll(token!); + if(needAuthor == 0){ //AuthCodeLen 1 data.add(0); diff --git a/star_lock/lib/login/login/starLock_login_logic.dart b/star_lock/lib/login/login/starLock_login_logic.dart index 4b3369d2..35a33cdf 100644 --- a/star_lock/lib/login/login/starLock_login_logic.dart +++ b/star_lock/lib/login/login/starLock_login_logic.dart @@ -22,7 +22,7 @@ class StarLockLoginLogic extends BaseGetXController{ ); if(entity.errorCode!.codeIsSuccessful){ // await StoreService.to.saveLogInInfo(entity); - stateMyLogic.saveLoginData(entity); + stateMyLogic.saveLoginData(entity.data); // Get.back(); Get.toNamed(Routers.starLockMain); } diff --git a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_logic.dart b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_logic.dart index f84c95b5..ab996acb 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_logic.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_logic.dart @@ -1,16 +1,18 @@ - import 'dart:async'; 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 '../../../../appRouters.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_reply.dart'; import '../../../../blue/io_tool/io_manager.dart'; import '../../../../blue/io_tool/io_tool.dart'; import '../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../blue/sender_manage.dart'; +import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; import '../../../../tools/storage.dart'; import 'lockSet_state.dart'; @@ -18,6 +20,15 @@ import 'lockSet_state.dart'; class LockSetLogic extends BaseGetXController{ final LockSetState state = LockSetState(); + void deletLockInfoData() async{ + var entity = await ApiRepository.to.deletLockData( + lockId:state.getKeyInfosData.value.lockId.toString(), + ); + if(entity.errorCode!.codeIsSuccessful){ + Get.offAllNamed(Routers.starLockMain); + } + } + late StreamSubscription _replySubscription; void _initReplySubscription() { _replySubscription = EventBusManager().eventBus!.on().listen((reply) async { @@ -32,12 +43,28 @@ class LockSetLogic extends BaseGetXController{ case 0x00: //成功 print("${reply.commandType}解析成功"); - + deletLockInfoData(); break; case 0x06: //无权限 print("${reply.commandType}需要鉴权"); + var privateKey = await Storage.getStringList(saveBluePrivateKey); + List getPrivateKeyList = changeStringListToIntList(privateKey!); + + var publicKey = await Storage.getStringList(saveBluePublicKey); + List publicKeyDataList = changeStringListToIntList(publicKey!); + + IoSenderManage.deletUser( + lockID:BlueManage().connectDeviceName, + authUserID:"100001", + keyID:"1", + delUserID:"100001", + needAuthor:1, + publicKey:publicKeyDataList, + privateKey:getPrivateKeyList, + token: tokenData + ); break; case 0x07: //无权限 diff --git a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_state.dart b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_state.dart index 273feb6e..6e22dd2b 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_state.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_state.dart @@ -1,5 +1,12 @@ +import 'package:get/get.dart'; +import 'package:star_lock/main/lockMian/entity/lockInfoEntity.dart'; + class LockSetState { + var getKeyInfosData = KeyInfos().obs; + LockSetState() { + getKeyInfosData.value = Get.arguments as KeyInfos; + } } \ No newline at end of file diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index b634c785..1ccc156a 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'dart:convert'; import 'package:flutter_reactive_ble/flutter_reactive_ble.dart'; import 'package:star_lock/blue/io_protocol/io_editUser.dart'; @@ -14,6 +15,7 @@ import '../../../blue/io_tool/io_manager.dart'; import '../../../blue/io_tool/io_tool.dart'; import '../../../blue/io_tool/manager_event_bus.dart'; import '../../../blue/sender_manage.dart'; +import '../../../login/login/entity/LoginData.dart'; import '../../../tools/baseGetXController.dart'; import '../../../tools/storage.dart'; import 'lockDetail_state.dart'; @@ -308,11 +310,18 @@ class LockDetailLogic extends BaseGetXController{ List getTokenList = changeStringListToIntList(token!); print("openDoorTokenPubToken:$getTokenList"); + // var userId = ""; + // final data = await Storage.getString('userLoginData'); + // print("getLoginData:$data"); + // if (data != null && data.isNotEmpty) { + // userId = LoginData.fromJson(jsonDecode(data)).userid as String; + // } + IoSenderManage.senderOpenLock( keyID: "1", - userID: "100001", + userID: "10001", openMode: 1, - openTime: 0x11223344, + openTime: DateTime.now().millisecondsSinceEpoch, token: getTokenList, needAuthor: 1, signKey: signKeyDataList, diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart index 5fb2350a..311f26f8 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -9,9 +9,11 @@ import '../../lockMian/entity/lockInfoEntity.dart'; import 'lockDetail_logic.dart'; class LockDetailPage extends StatefulWidget { + final isFrist; + final KeyInfos keyInfo; final LockMainEntity lockMainEntity; - const LockDetailPage({Key? key, required this.lockMainEntity}) + const LockDetailPage({Key? key, required this.lockMainEntity, required this.isFrist, required this.keyInfo}) : super(key: key); @override @@ -26,10 +28,13 @@ class _LockDetailPageState extends State { Widget build(BuildContext context) { return Container( width: 1.sw, - height: 1.sh, + height: 1.sh - ScreenUtil().statusBarHeight*2, color: Colors.white, child: Column( - children: [topWidget(), Expanded(child: bottomWidget())], + children: [ + topWidget(), + Expanded(child: bottomWidget()) + ], ), ); } @@ -182,7 +187,7 @@ class _LockDetailPageState extends State { }), bottomItem('images/main/icon_main_set.png', TranslationLoader.lanKeys!.set!.tr, () { - Navigator.pushNamed(context, Routers.lockSetPage); + Navigator.pushNamed(context, Routers.lockSetPage, arguments: widget.keyInfo); }), ], ), diff --git a/star_lock/lib/main/lockMian/lockMain/lockMain_logic.dart b/star_lock/lib/main/lockMian/lockMain/lockMain_logic.dart index 425e48d1..6209cc7f 100644 --- a/star_lock/lib/main/lockMian/lockMain/lockMain_logic.dart +++ b/star_lock/lib/main/lockMian/lockMain/lockMain_logic.dart @@ -1,5 +1,7 @@ import 'dart:async'; +import 'package:get/get.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; import '../../../blue/io_tool/manager_event_bus.dart'; import '../../../network/api_repository.dart'; @@ -9,12 +11,38 @@ import 'lockMain_state.dart'; class LockMainLogic extends BaseGetXController { final LockMainState state = LockMainState(); + var page = 1; + // final RefreshController refreshController = RefreshController( + // initialRefresh: false + // ); + + /// 下拉刷新方法 + // void onRefresh() { + // page = 1; + // getLockInfo(); + // } + // + // void onLoading() { + // getLockInfo(); + // } + void getLockInfo() async{ var entity = await ApiRepository.to.getLockInfo( lastUpdateDate:DateTime.now().millisecondsSinceEpoch.toString(), - pageNo:"1", + pageNo:page.toString(), ); if(entity.errorCode!.codeIsSuccessful){ + // if (page == 0) { + // refreshController.refreshCompleted(); + // } else { + // if (entity.data!.keyInfos!.isEmpty) { + // refreshController.loadNoData(); + // } else { + // refreshController.loadComplete(); + // } + // } + // page++; + if(entity.data!.keyInfos!.isEmpty){ state.dataLength.value = 0; }else if(entity.data!.keyInfos!.length == 1){ @@ -23,7 +51,10 @@ class LockMainLogic extends BaseGetXController { state.dataLength.value = 2; } state.lockMainEntity.value = entity; + }else{ + // refreshController.loadFailed(); } + // refreshController.refreshCompleted(); } // 监听设备返回的数据 @@ -56,6 +87,8 @@ class LockMainLogic extends BaseGetXController { void onClose() { // TODO: implement onClose super.onClose(); + + // refreshController.dispose(); _addLockSubscription.cancel(); } diff --git a/star_lock/lib/main/lockMian/lockMain/lockMain_page.dart b/star_lock/lib/main/lockMian/lockMain/lockMain_page.dart index 2fedc169..75cfd68c 100644 --- a/star_lock/lib/main/lockMian/lockMain/lockMain_page.dart +++ b/star_lock/lib/main/lockMian/lockMain/lockMain_page.dart @@ -2,11 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import '../../../appRouters.dart'; import '../../../baseWidget.dart'; import '../../../mine/mine/starLockMine_page.dart'; +import '../../../tools/refreshHeadFoot.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; import '../../lockDetail/lockDetail/lockDetail_page.dart'; @@ -62,7 +64,12 @@ class _StarLockMainPageState extends State with BaseWidget { width: 1.sw / 3 * 2, child: const StarLockMinePage(), ), - body: Obx(() => getDataReturnUI(state.dataLength.value, )), + body: Obx(() => getDataReturnUI(state.dataLength.value)), + // body:smartRefresher( + // logic.refreshController, + // onRefresh:logic.onRefresh, + // onLoading:logic.onLoading, + // child:Obx(() => getDataReturnUI(state.dataLength.value))), // body: getLockList(), // body: unHaveData(), ); @@ -75,7 +82,7 @@ class _StarLockMainPageState extends State with BaseWidget { returnWidget = unHaveData(); break; case 1: - returnWidget = LockDetailPage(lockMainEntity: logic.state.lockMainEntity.value); + returnWidget = LockDetailPage(lockMainEntity: logic.state.lockMainEntity.value, isFrist: true, keyInfo:logic.state.lockMainEntity.value.data!.keyInfos![0]); break; case 2: returnWidget = LockListPage(lockMainEntity:logic.state.lockMainEntity.value); diff --git a/star_lock/lib/mine/addLock/lockAddress/lockAddressGaoDe_page.dart b/star_lock/lib/mine/addLock/lockAddress/lockAddressGaoDe_page.dart index 6544a567..85df2314 100644 --- a/star_lock/lib/mine/addLock/lockAddress/lockAddressGaoDe_page.dart +++ b/star_lock/lib/mine/addLock/lockAddress/lockAddressGaoDe_page.dart @@ -89,7 +89,7 @@ class _LockAddressGaoDePageState extends State{ if (addressInfo?['latitude'] == null || addressInfo?['longitude'] == null || addressInfo?['errorCode'] == 0) { - return const Text('Sorry'); + return const Center(child: Text('地图加载中,请稍候。。。')); } var latitude = 39.909187; diff --git a/star_lock/lib/mine/addLock/saveLock/saveLock_logic.dart b/star_lock/lib/mine/addLock/saveLock/saveLock_logic.dart index 368f53dc..043fe5e7 100644 --- a/star_lock/lib/mine/addLock/saveLock/saveLock_logic.dart +++ b/star_lock/lib/mine/addLock/saveLock/saveLock_logic.dart @@ -257,7 +257,7 @@ class SaveLockLogic extends BaseGetXController { ); if(entity.errorCode!.codeIsSuccessful){ EventBusManager().eventBusFir(RefreshLockListInfoDataEvent); - Get.toNamed(Routers.starLockMain); + Get.offAllNamed(Routers.starLockMain); } } diff --git a/star_lock/lib/mine/mine/starLockMine_state.dart b/star_lock/lib/mine/mine/starLockMine_state.dart index 0072755d..9f8f45c6 100644 --- a/star_lock/lib/mine/mine/starLockMine_state.dart +++ b/star_lock/lib/mine/mine/starLockMine_state.dart @@ -7,11 +7,11 @@ import '../../login/login/entity/LoginEntity.dart'; import '../../tools/storage.dart'; class StarLockMineState { - final loginData = LoginEntity().obs; + final loginData = LoginData().obs; ///本地存储 登录信息 - void saveLoginData(LoginEntity data) async { - print("saveLoginData:${data.data!.mobile}"); + void saveLoginData(LoginData? data) async { + print("saveLoginData:${data!.mobile}"); await Storage.setString('userLoginData', jsonEncode(data)); loginData.value = data; } @@ -21,28 +21,28 @@ class StarLockMineState { final data = await Storage.getString('userLoginData'); print("getLoginData:$data"); if (data != null && data.isNotEmpty) { - loginData.value = LoginEntity.fromJson(jsonDecode(data)); + loginData.value = LoginData.fromJson(jsonDecode(data)); } } ///退出登录 void logOut() async { await Storage.setString('userLoginData', ''); - loginData.value = LoginEntity(); + loginData.value = LoginData(); } ///用户登录token String token() { - return loginData.value.data?.accessToken ?? ''; + return loginData.value.accessToken ?? ''; } String mobile() { - return loginData.value.data?.mobile ?? '-'; + return loginData.value.mobile ?? '-'; } ///用户头像 String headUrl() { - return loginData.value.data!.headUrl ?? ''; + return loginData.value.headUrl ?? ''; // return "https://img2.woyaogexing.com/2022/04/14/156cdbabd5bc496abee2cd0fca527434!400x400.jpeg"; } diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 33992818..22f28692 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -27,6 +27,7 @@ abstract class Api { final String passwordKeyResetURL = '/keyboardPwd/reset'; //密码钥匙重置 final String getLockInfoURL = '/lock/syncDataPage'; // 获取锁信息 + final String deletLockURL = '/lock/delete'; // 删除锁 final String passwordKeyGetURL = '/keyboardPwd/get'; //获取密码 final String clearOperationRecordURL = '/lockRecords/clear'; //清空操作记录 diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index b17e7959..1bbc5c02 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -260,6 +260,15 @@ class ApiProvider extends BaseProvider { "pageNo": pageNo, })); + // 删除锁 + Future deletLockInfo( + String lockId) => + post( + deletLockURL.toUrl, + jsonEncode({ + 'lockId': lockId, + })); + Future passwordKeyList( String keyStatus, String lockId, diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index 59d2fabb..45191476 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -259,6 +259,13 @@ class ApiRepository { return LockMainEntity.fromJson(res.body); } + // 删除锁 + Future deletLockData({ + required String lockId}) async { + final res = await apiProvider.deletLockInfo(lockId); + return LockMainEntity.fromJson(res.body); + } + //获取密码 Future getPasswordKey( String endDate, diff --git a/star_lock/lib/tools/refreshHeadFoot.dart b/star_lock/lib/tools/refreshHeadFoot.dart new file mode 100644 index 00000000..5833a5aa --- /dev/null +++ b/star_lock/lib/tools/refreshHeadFoot.dart @@ -0,0 +1,49 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; + +//用于下拉刷新 头布局 +class HeaderWidget extends StatelessWidget { + const HeaderWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return const WaterDropHeader( + refresh: CupertinoActivityIndicator(), + complete: CupertinoActivityIndicator(), + idleIcon: CupertinoActivityIndicator(), + // waterDropColor: null, + ); + } +} +//用于上拉加载 底部布局 +class FooterWidget extends StatelessWidget { + const FooterWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return CustomFooter( + builder: (BuildContext context, LoadStatus? mode) { + Widget body; + if (mode == LoadStatus.idle) { + body = const Text("上拉加载"); + } else if (mode == LoadStatus.loading) { + body = const CupertinoActivityIndicator(); + } else if (mode == LoadStatus.failed) { + body = const Text("加载失败"); + } else if (mode == LoadStatus.canLoading) { + body = const Text("加载更多"); + } else if(mode == LoadStatus.noMore){ + body = const Text("没有更多数据"); + }else{ + // body = Text("没有更多数据"); + body = Text(""); + } + return Container( + height: 55.0, + child: Center(child: body), + ); + }, + ); + } +} diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index b48ff84b..36152f1d 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -89,6 +89,9 @@ dependencies: crypto: ^3.0.3 date_format: ^2.0.7 + # 下拉刷新 + pull_to_refresh: ^2.0.0 + #高德地图定位 amap_flutter_location: ^3.0.0 #权限使用