From 485fac6b51dfe775300288f3e224264080a691f6 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Wed, 17 Jan 2024 13:52:45 +0800 Subject: [PATCH 1/6] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E7=94=BB=E9=9D=A2=E9=A1=B5=E9=9D=A2=202=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=8C=AB=E7=9C=BC=E5=85=B6=E4=BB=96=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=9F=A5=E7=9C=8B=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lockSet_liveVideo.png | Bin 0 -> 119119 bytes star_lock/lib/appRouters.dart | 3 + star_lock/lib/main.dart | 41 +---- .../catEyeCustomMode_page.dart | 3 + .../catEyeWorkMode/catEyeWorkMode_page.dart | 114 ++++++++++++-- .../lcokSet/liveVideo/liveVideo_logic.dart | 6 + .../lcokSet/liveVideo/liveVideo_page.dart | 144 ++++++++++++++++++ .../lcokSet/liveVideo/liveVideo_state.dart | 5 + star_lock/lib/tools/xs_aliyunPush.dart | 13 +- 9 files changed, 275 insertions(+), 54 deletions(-) create mode 100644 star_lock/images/lockSet_liveVideo.png create mode 100644 star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_logic.dart create mode 100644 star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_page.dart create mode 100644 star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_state.dart diff --git a/star_lock/images/lockSet_liveVideo.png b/star_lock/images/lockSet_liveVideo.png new file mode 100644 index 0000000000000000000000000000000000000000..394a8fb1dc05bfef174e7dd6efdc1a9f602e2dc9 GIT binary patch literal 119119 zcmeGE_dD0`{|Ag~?}hU~=qU9Z=i?mr`)!@MT$R7PV=Kc}Dk`cSSER%hsi@X0P*JVFuz4f? zW<=)1Dt_ByDy3pUMYWBZ{8~fhA4pHNrgqI0ak1;xfy3E0511M)2N!H^OsiIYFP!Vkb@;&@{vo^fq#Pkc*)!S>^<6R z?Nayfu8fb4np?8sUiSNkCCoah_AXZ;0ZbGvl!-c^tJ^2LqIN^5kzU3vSH z)_1)n9%BZ^#;eN8@tP|aEi8CqV`H~(-@e;L{H0{LILn^f3G_ZX+O20*4Gdc~M~$~V zW#$xe*8bpKz`b3z?kLSxPft%VfrH179C2!EQ$NAMp_2WGufD!sR5Sb0jMi{dLhrcw z+|omFmt&&m$8wfNmE}W3Ry34LTU%OwkB!ZVx2?FA^nO%iSNPRF_LO;Z!F1Z~F^9PY zyY)_D7en97y~C$#YBKis_jgd;s*9APJfN(ubgGT6#@`k1GwF&=?N}_d7_3?;T9_Kt zH#Gc+XY1(Dbar;8-@jk`?%ij1&!o4t)2tUu>m6TOxvQ)D*3a+C!-r=#Y}i0UN2jE$ zeEHI)bwiEu6y;sQ<9S-AtVEUfT4j~yPE`qMi8`(>I~p4rRv78)hsMUbr=*;1X>I*8 zGSV-fD}teN?2n+q=Xk$+cTH1M-o{4o#*G`l>g#v#^71Zc+Ky$<#rtM@l$RZ1pJcM1 zuDzsJ6}T|loTN9T5F%39U+$a!aD>6h$%*AJJ}ULJG`qRE`OW0}v<3|^+IUXGrmx*U zi`@@6Iu2F^#dBFveEfwZ`>F#4l{%Z6<}0TLs~!92CwlGXyI=60J?lE8v3vbt_lczy z3?RXv@zlfNCb3JG3g`a*{kz(WkKsCL)#>x}8{NWOhwa!leB_c__+<~DgM#MIc=W1X ze#NS`J(*u|IBVQidVa30F!;RfxyE=cO8o3-`%-WJXyfg-DJ+!yO-#azf4{`9{v8yh z2!_~AZt;}5o1S@e^Hb)S-Dl36Y09wV@DN=U*d@9=ekapv%)u;u=^OpWpwf_YmiMPT z9Hzs)L>Fs4(jLv6h`xUR|K51jPJ{{jMR;Ypj{H(PYtmtNAMbnf(Y-W8*v5RykupYE z=@VTp6qTY1V&43eo3-t6HkZSM+p?SE1Xqe-bKx;{bHqYW6X1-8H^Pa4u=%g?4F&V3QQo5XWF|Ks) za-9F-tNF+UON}ig-nIef#wOgGMMx-Ma?)I6%CCA{D0fOIbtG`bh;`E4-93LW*!I-y z7p)anr6~E@_V$zgcgTA-lyGl%b#-mZvf=SKKTEG5JR$!3q1w&Cl)Vc~l=+ge)xXNQ zEmrg6+N!FmFH20m7@WiuwmDkG__(>%mEG9eg{41!+@2b!JSc4a<}x;0%FTm%MQ+QTl$A~`yV3N) zzvL}0{&efbcKgusZ>4nQI|)yGr}oX6j^K*b7!{E#aiv|Ti&AK$U|bpVlodw`6WuBG z-Dcz+|819MZ-`YZ5na-wyeeU|H5`eQ3;6G@UmGp^q)GNn1Cz*91&`yz%9vwFXlQ8v zXq7j;vl#R4@dlxt8=bJFOf>Ema$l8}o6l9mlH)^P3-`-eN<8s{`TUDcPxIgd)?cni!|uDl{IyMkcDwB3OtDw!~(f0QC zn?C*avFiOk|D1Ss(qIPN7O-MMuc;VarbZ%+I z+t)YAVo*NCxLq2>?AWnmc-ZRxQ*l<#$ZMRHv`$SrT=%{ec(5OezZS~BD?r13%eWiO&X=Hped>Ze~!o%Zb zJDUE =Cc@^^J>Gbj=;15!C4UNAk`0>EEm+l347KqM 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Ð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%0D6HBSzstCV|=w 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 G!2bbuUUXpq literal 0 HcmV?d00001 diff --git a/star_lock/lib/appRouters.dart b/star_lock/lib/appRouters.dart index e908a97d..1e62292e 100644 --- a/star_lock/lib/appRouters.dart +++ b/star_lock/lib/appRouters.dart @@ -12,6 +12,7 @@ import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/catEyeSet/catEyeSet_ import 'package:star_lock/main/lockDetail/lcokSet/catEyeSet/videoSlot/videoSlot_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/faceUnlock/faceUnlock_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/familyDetails/familyDetails_page.dart'; +import 'package:star_lock/main/lockDetail/lcokSet/liveVideo/liveVideo_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/lockUser/lockUser_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/motorPower/motorPower_page.dart'; import 'package:star_lock/main/lockDetail/lcokSet/msgNotification/msgNotification/msgNotification_page.dart'; @@ -414,6 +415,7 @@ abstract class Routers { static const doorLockLogPage = '/doorLockLogPage'; //门锁日志 static const catEyeCustomModePage = '/catEyeCustomModePage'; //猫眼自定义模式 static const videoSlotPage = '/videoSlotPage'; //录像时段 + static const liveVideoPage = '/liveVideoPage'; //实时画面 } abstract class AppRouters { @@ -1005,5 +1007,6 @@ abstract class AppRouters { name: Routers.catEyeCustomModePage, page: () => const CatEyeCustomModePage()), GetPage(name: Routers.videoSlotPage, page: (() => const VideoSlotPage())), + GetPage(name: Routers.liveVideoPage, page: (() => const LiveVideoPage())) ]; } diff --git a/star_lock/lib/main.dart b/star_lock/lib/main.dart index 08fb6721..317f32f1 100644 --- a/star_lock/lib/main.dart +++ b/star_lock/lib/main.dart @@ -1,12 +1,8 @@ import 'package:aliyun_push/aliyun_push.dart'; -import 'package:audioplayers/audioplayers.dart'; -// import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_pcm_sound/flutter_pcm_sound.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:flutter_sound/flutter_sound.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/talk/udp/udp_talkClass.dart'; @@ -16,7 +12,6 @@ import 'package:star_lock/tools/device_info_service.dart'; import 'package:star_lock/tools/platform_info_services.dart'; import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/xs_aliyunPush.dart'; -// import 'package:star_lock/tools/store_service.dart'; import 'package:star_lock/translations/app_dept.dart'; import 'package:star_lock/translations/trans_lib.dart'; @@ -54,12 +49,6 @@ class MyApp extends StatefulWidget { // final RouteObserver routeObserver = RouteObserver(); class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { - final _aliyunPush = AliyunPush(); - var _deviceId = ""; - // final audioPlayer = AudioPlayer(); - final FlutterSoundPlayer _audioPlayer = FlutterSoundPlayer(); - late List allDataBytes; - @override Widget build(BuildContext context) { return ScreenUtilInit( @@ -139,47 +128,31 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { //初始化阿里云推送 void initAliyunPush() { - XSAliyunPushProvider().init(_aliyunPush); + final aliyunPush = AliyunPush(); + XSAliyunPushProvider().init(aliyunPush); XSAliyunPushProvider().initAliyunPush(); if (Platform.isAndroid) { XSAliyunPushProvider().initAliyunThirdPush(); } - //暂不使用DeviceID推送 - _aliyunPush.getDeviceId().then((deviceId) async { + //暂使用DeviceID推送 + aliyunPush.getDeviceId().then((deviceId) async { + // print('得到的DeviceId$deviceId'); final data = await Storage.getString('userLoginData'); - if (data!.isNotEmpty) { + if (data!.isNotEmpty && deviceId.isNotEmpty) { XSAliyunPushProvider() .pushBindDeviceID(deviceId, Platform.isAndroid ? 10 : 20); } }); - - // //使用userid根据账号推送 - // _aliyunPush.bindAccount(Storage.getUid().toString()).then((value) { - // print("得到了value$value"); - // }); } @override void dispose() { - WidgetsBinding.instance?.removeObserver(this); + WidgetsBinding.instance.removeObserver(this); super.dispose(); } - void didChangeAppLifecycleState(AppLifecycleState state) { - if (state == AppLifecycleState.resumed) { - // 应用进入前台 - print("应用进入前台"); - } else if (state == AppLifecycleState.paused) { - // 应用进入后台 - print("应用进入后台"); - if (UDPTalkClass().isBeCall == true) { - UDPTalkClass().playLocalAudio(); - } - } - } -} // 设置国际化信息 Future _initTranslation() async => TranslationLoader.loadTranslation( diff --git a/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeCustomMode/catEyeCustomMode_page.dart b/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeCustomMode/catEyeCustomMode_page.dart index e2b13e7b..e7cba823 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeCustomMode/catEyeCustomMode_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeCustomMode/catEyeCustomMode_page.dart @@ -63,6 +63,9 @@ class _CatEyeCustomModePageState extends State { isHaveLine: false, isHaveDirection: true, isHaveRightWidget: false, + action: () { + Get.toNamed(Routers.liveVideoPage); + }, ) ], )); diff --git a/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeWorkMode/catEyeWorkMode_page.dart b/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeWorkMode/catEyeWorkMode_page.dart index 653ff378..bab2a18c 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeWorkMode/catEyeWorkMode_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/catEyeSet/catEyeWorkMode/catEyeWorkMode_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; +import 'package:star_lock/tools/submitBtn.dart'; import '../../../../../app_settings/app_colors.dart'; import '../../../../../tools/titleAppBar.dart'; @@ -114,10 +115,12 @@ class _CatEyeWorkModePageState extends State { ), ), onTap: () { + //自定义模式跳转 if (clickIndex == 3) { Get.toNamed(Routers.catEyeCustomModePage); } else { - // Get.toNamed(Routes.catEyeWorkModeDetailPage); + //其他模式弹框 + showBottomSheet(context, clickIndex); } }, ), @@ -159,34 +162,119 @@ class _CatEyeWorkModePageState extends State { } //显示底部弹框的功能 - void showBottomSheet(BuildContext context) { - //用于在底部打开弹框的效果 + void showBottomSheet(BuildContext context, int clickIndex) { showModalBottomSheet( builder: (BuildContext context) { //构建弹框中的内容 - return _buildBottomSheetWidget(context); + if (clickIndex == 0) { + return _buildBottomSheetWidget(context, '省电模式', '有人按门铃或发生\n异常事件时', + '不录像', '/', '有人按门铃或发生\n异常事件时'); + } else if (clickIndex == 1) { + return _buildBottomSheetWidget(context, '逗留抓拍模式', + '有人出现、按门铃\n或发生异常事件时', '逗留达到10秒', '约1.5米', '随时'); + } else if (clickIndex == 2) { + return _buildBottomSheetWidget( + context, '实时监控模式', '有人出现、按门铃\n或发生异常事件时', '立即录像', '约1.5米', '随时'); + } else { + return Container(); + } }, context: context); } - _buildBottomSheetWidget(BuildContext context) { + _buildBottomSheetWidget(BuildContext context, String modeTitle, String tips1, + String tips2, String tips3, String tips4) { return Container( margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.h), child: Column( children: [ Row( children: [ - Text( - '省电模式', - style: TextStyle( - fontSize: 24.sp, - color: Colors.black, - fontWeight: FontWeight.w500), - ) + //居中显示 + Expanded( + child: Center( + child: Text( + modeTitle, + style: TextStyle( + fontSize: 26.sp, + color: Colors.black, + fontWeight: FontWeight.w600), + ), + ), + ), ], - ) + ), + SizedBox( + height: 40.h, + ), + _buildRowWidget('录像时机', tips1), + _buildRowWidget('有人出现时录像', tips2), + _buildRowWidget('人体侦测距离', tips3), + _buildRowWidget('查看实时画面', tips4), + _buildIKnowBtn(), ], ), ); } + + _buildRowWidget(String titleStr, String subTitleStr) { + return Container( + margin: EdgeInsets.only(top: 26.h, bottom: 26.h), + child: Row( + //Row两端对齐的方法 + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + titleStr, + style: TextStyle( + fontSize: 24.sp, + color: Colors.black, + fontWeight: FontWeight.w600), + ), + Expanded( + child: SizedBox( + width: 20.sp, + ), + ), + Text( + subTitleStr, + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20.sp, + color: AppColors.placeholderTextColor, + ), + ), + SizedBox( + width: 20.sp, + ), + ], + ), + ); + } + + _buildIKnowBtn() { + return GestureDetector( + child: Container( + width: ScreenUtil().screenWidth - 40.w, + height: 80.h, + margin: EdgeInsets.only(top: 40.h, bottom: 40.h), + decoration: BoxDecoration( + color: AppColors.btnDisableColor, + borderRadius: BorderRadius.circular(80.h / 2), + ), + child: Center( + child: Text( + '我知道了', + style: TextStyle( + color: AppColors.darkGrayTextColor, + fontSize: 24.sp, + fontWeight: FontWeight.w500), + ), + ), + ), + onTap: () { + Navigator.pop(context); + }, + ); + } } diff --git a/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_logic.dart b/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_logic.dart new file mode 100644 index 00000000..2ad94803 --- /dev/null +++ b/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_logic.dart @@ -0,0 +1,6 @@ +import 'package:star_lock/main/lockDetail/lcokSet/liveVideo/liveVideo_state.dart'; +import 'package:star_lock/tools/baseGetXController.dart'; + +class LiveVideoLogic extends BaseGetXController { + final LiveVideoState state = LiveVideoState(); +} diff --git a/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_page.dart b/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_page.dart new file mode 100644 index 00000000..688b4d5e --- /dev/null +++ b/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_page.dart @@ -0,0 +1,144 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/lcokSet/liveVideo/liveVideo_logic.dart'; +import 'package:star_lock/translations/trans_lib.dart'; + +import '../../../../../app_settings/app_colors.dart'; +import '../../../../../tools/titleAppBar.dart'; + +class LiveVideoPage extends StatefulWidget { + const LiveVideoPage({Key? key}) : super(key: key); + + @override + State createState() => _LiveVideoPageState(); +} + +class _LiveVideoPageState extends State { + final logic = Get.put(LiveVideoLogic()); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: '实时画面', + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + child: Text( + TranslationLoader.lanKeys!.save!.tr, + style: TextStyle(color: Colors.white, fontSize: 24.sp), + ), + onPressed: () { + Get.back(); + }, + ), + ], + ), + body: Column( + children: [ + SizedBox( + height: 80.h, + ), + Image.asset( + 'images/lockSet_liveVideo.png', + height: 541.h, + width: 255.w, + ), + SizedBox( + height: 86.h, + ), + _buildTipsView('发生事件时查看\n', '仅当门锁发生事件或有人按门铃时,才能在门锁首页查看实时画面。', 0), + SizedBox( + height: 16.h, + ), + _buildTipsView('实时查看\n', + '指定时问内,无论门锁是否发生安全事件或有人按门铃,都能在门锁首页随时查看实时画面;电池续航时问将会缩短。', 1), + ], + )); + } + + Widget _buildTipsView(String titleStr, String subTitle, int clickIndex) { + return Obx(() => GestureDetector( + child: Container( + width: ScreenUtil().screenWidth - 40.w, + margin: EdgeInsets.only(left: 20.w, right: 20.w, bottom: 10.h), + decoration: BoxDecoration( + color: clickIndex == 0 + ? (state.isLiveView.value == false + ? AppColors.blueViewBgColor + : AppColors.greyBackgroundColor) + : (state.isLiveView.value == true + ? AppColors.blueViewBgColor + : AppColors.greyBackgroundColor), + borderRadius: BorderRadius.circular(10.0), + ), + child: Padding( + padding: EdgeInsets.only( + left: 20.w, top: 30.h, bottom: 30.h, right: 20.w), + child: Row( + children: [ + clickIndex == 0 + ? (state.isLiveView.value == false + ? Image.asset( + 'images/mine/icon_mine_blueSelect.png', + width: 20.w, + height: 14.w, + ) + : SizedBox( + width: 20.w, + height: 14.w, + )) + : (state.isLiveView.value == true + ? Image.asset( + 'images/mine/icon_mine_blueSelect.png', + width: 20.w, + height: 14.w, + ) + : SizedBox( + width: 20.w, + height: 14.w, + )), + SizedBox(width: 10.w), + Expanded( + child: _buildRichText( + titleStr, + subTitle, + clickIndex == 0 + ? (state.isLiveView.value == false ? true : false) + : (state.isLiveView.value == true + ? true + : false)), + ), + ], + )), + ), + onTap: () { + state.isLiveView.value = !state.isLiveView.value; + }, + )); + } + + Widget _buildRichText(String titleStr, String subTitle, bool isClick) { + //高亮样式 + final TextStyle titleStyle = TextStyle( + color: isClick ? AppColors.blueTextTipsColor : Colors.black, + fontSize: 24.sp, + fontWeight: FontWeight.w500); + //默认样式 + final TextStyle subTipsStyle = TextStyle( + color: isClick + ? AppColors.blueTextTipsColor + : AppColors.placeholderTextColor, + fontSize: 20.sp); + + late InlineSpan tipsPreviewSpan = TextSpan(children: [ + TextSpan(text: titleStr, style: titleStyle), + TextSpan(text: subTitle, style: subTipsStyle), + ]); + return RichText(text: tipsPreviewSpan); + } +} diff --git a/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_state.dart b/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_state.dart new file mode 100644 index 00000000..d239cc81 --- /dev/null +++ b/star_lock/lib/main/lockDetail/lcokSet/liveVideo/liveVideo_state.dart @@ -0,0 +1,5 @@ +import 'package:get/get.dart'; + +class LiveVideoState { + var isLiveView = false.obs; //是否实时查看 +} diff --git a/star_lock/lib/tools/xs_aliyunPush.dart b/star_lock/lib/tools/xs_aliyunPush.dart index 6858289e..d735ad18 100644 --- a/star_lock/lib/tools/xs_aliyunPush.dart +++ b/star_lock/lib/tools/xs_aliyunPush.dart @@ -3,7 +3,6 @@ import 'dart:io'; import 'package:aliyun_push/aliyun_push.dart'; import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; -import 'package:star_lock/tools/toast.dart'; class XSAliyunPushProvider { late AliyunPush _aliyunPush = AliyunPush(); @@ -17,29 +16,29 @@ class XSAliyunPushProvider { } Future _onNotification(Map message) async { - // Toast.show(msg: 'onNotification: $message'); + print('onNotification: $message'); } Future _onAndroidNotificationReceivedInApp( Map message) async { - // Toast.show(msg: 'onAndroidNotificationReceivedInApp: $message'); + print('onAndroidNotificationReceivedInApp: $message'); } Future _onMessage(Map message) async { - // Toast.show(msg: 'onMessage: $message'); + print('onMessage: $message'); } Future _onNotificationOpened(Map message) async { - // Toast.show(msg: 'onNotificationOpened: $message'); + print('onNotificationOpened: $message'); } Future _onNotificationRemoved(Map message) async { - // Toast.show(msg: 'onNotificationRemoved: $message'); + print('onNotificationRemoved: $message'); } Future _onAndroidNotificationClickedWithNoAction( Map message) async { - // Toast.show(msg: 'onAndroidNotificationClickedWithNoAction: $message'); + print('onAndroidNotificationClickedWithNoAction: $message'); } Future _onIOSChannelOpened(Map message) async {} From 0fba9fcf756ceaa89a7eea2dc0162369223adeef Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Wed, 17 Jan 2024 13:58:48 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=89=A9=E4=BD=99=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/main.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/star_lock/lib/main.dart b/star_lock/lib/main.dart index 55fbd136..761fb168 100644 --- a/star_lock/lib/main.dart +++ b/star_lock/lib/main.dart @@ -5,7 +5,6 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:star_lock/talk/udp/udp_talkClass.dart'; import 'package:star_lock/tools/app_manager.dart'; import 'package:star_lock/tools/bindings/app_binding.dart'; import 'package:star_lock/tools/device_info_service.dart'; @@ -152,7 +151,7 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { WidgetsBinding.instance.removeObserver(this); super.dispose(); } - +} // 设置国际化信息 Future _initTranslation() async => TranslationLoader.loadTranslation( From e93f8624cfc654385adf329e7b0aac831651b89f Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Wed, 17 Jan 2024 14:11:10 +0800 Subject: [PATCH 3/6] =?UTF-8?q?2024-01-12=20=E4=BC=9A=E8=AE=AE=E7=A1=AE?= =?UTF-8?q?=E5=AE=9A=E5=8E=BB=E6=8E=89=E9=83=A8=E5=88=86=EF=BC=9A=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E9=9F=B3=E3=80=81=E8=A7=A6=E6=91=B8=E5=BC=80=E9=94=81?= =?UTF-8?q?=E3=80=81=E9=94=81=E5=B1=8F=E3=80=81=E5=BE=AE=E4=BF=A1=E4=BA=8C?= =?UTF-8?q?=E7=BB=B4=E7=A0=81=E3=80=81=E8=93=9D=E7=89=99=E5=B9=BF=E6=92=AD?= =?UTF-8?q?=20=E5=B7=B2=E6=B3=A8=E9=87=8A=E5=B9=B6=E6=A0=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/main.dart | 2 +- .../basicInformation_page.dart | 48 ++++++++++--------- .../lcokSet/lockSet/lockSet_page.dart | 25 ++++++---- .../mine/mineSet/mineSet/mineSet_page.dart | 7 ++- 4 files changed, 48 insertions(+), 34 deletions(-) diff --git a/star_lock/lib/main.dart b/star_lock/lib/main.dart index 761fb168..62759aea 100644 --- a/star_lock/lib/main.dart +++ b/star_lock/lib/main.dart @@ -118,7 +118,7 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { @override void initState() { super.initState(); - WidgetsBinding.instance?.addObserver(this); + WidgetsBinding.instance.addObserver(this); openBlueScan(); diff --git a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart index d84c534a..c90846b3 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/basicInformation/basicInformation/basicInformation_page.dart @@ -42,8 +42,7 @@ class _BasicInformationPageState extends State { body: ListView( children: [ CommonItem( - leftTitel: - TranslationLoader.lanKeys!.lockNumber!.tr, + leftTitel: TranslationLoader.lanKeys!.lockNumber!.tr, rightTitle: state.lockBasicInfo.value.lockName, allHeight: 70.h, isHaveLine: true), @@ -56,19 +55,18 @@ class _BasicInformationPageState extends State { height: 10.h, ), CommonItem( - leftTitel: TranslationLoader - .lanKeys!.electricQuantity!.tr, + leftTitel: TranslationLoader.lanKeys!.electricQuantity!.tr, rightTitle: "${state.lockBasicInfo.value.electricQuantity}%", isHaveLine: true, isHaveDirection: true, action: () { - Navigator.pushNamed(context, - Routers.uploadElectricQuantityPage, - arguments: {'lockSetInfoData': state.lockSetInfoData.value}); + Navigator.pushNamed( + context, Routers.uploadElectricQuantityPage, arguments: { + 'lockSetInfoData': state.lockSetInfoData.value + }); }), CommonItem( - leftTitel: TranslationLoader - .lanKeys!.periodValidity!.tr, + leftTitel: TranslationLoader.lanKeys!.periodValidity!.tr, rightTitle: getUseDateStr(state.lockBasicInfo.value), allHeight: 70.h, isHaveLine: false), @@ -76,28 +74,28 @@ class _BasicInformationPageState extends State { height: 10.h, ), CommonItem( - leftTitel: - TranslationLoader.lanKeys!.lockName!.tr, + leftTitel: TranslationLoader.lanKeys!.lockName!.tr, rightTitle: state.lockBasicInfo.value.lockAlias, isHaveLine: true, isHaveDirection: true, action: () async { - var data = await Get.toNamed(Routers.editLockNamePage, arguments: {'lockSetInfoData': state.lockSetInfoData.value}); - if(data != null) { + var data = await Get.toNamed(Routers.editLockNamePage, + arguments: { + 'lockSetInfoData': state.lockSetInfoData.value + }); + if (data != null) { setState(() { state.lockBasicInfo.value = data["lockBasicInfo"]; }); } }), CommonItem( - leftTitel: - TranslationLoader.lanKeys!.lockGrouping!.tr, + leftTitel: TranslationLoader.lanKeys!.lockGrouping!.tr, // rightTitle: state.getKeyInfosData.value.groupName == "" ? _groupName : itemData.groupName, isHaveLine: true, isHaveDirection: true, action: () async { - Navigator.pushNamed( - context, Routers.lockSeletGroupingPage, + Navigator.pushNamed(context, Routers.lockSeletGroupingPage, arguments: { 'lockSetInfoData': state.lockSetInfoData.value }).then((val) { @@ -108,16 +106,22 @@ class _BasicInformationPageState extends State { }); }), Visibility( - visible: (state.lockBasicInfo.value.isLockOwner == 1 || state.lockBasicInfo.value.keyRight == 1) ? true : false, + visible: (state.lockBasicInfo.value.isLockOwner == 1 || + state.lockBasicInfo.value.keyRight == 1) + ? true + : false, child: CommonItem( - leftTitel: TranslationLoader.lanKeys!.adminOpenLockPassword!.tr, + leftTitel: + TranslationLoader.lanKeys!.adminOpenLockPassword!.tr, rightTitle: "", isHaveLine: true, isHaveDirection: true, action: () { - Navigator.pushNamed(context, Routers.adminOpenLockPasswordPage); + Navigator.pushNamed( + context, Routers.adminOpenLockPasswordPage); }), ), + /* 2024-01-12 会议确定去掉“微信二维码” by DaisyWu CommonItem( leftTitel: TranslationLoader.lanKeys!.unlockQRCode!.tr, @@ -127,9 +131,9 @@ class _BasicInformationPageState extends State { action: () { Get.toNamed(Routers.unlockQRCodePage); }), + */ ], - ) - ); + )); } //使用期限 diff --git a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart index 3130bd15..45d2a0e0 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/lockSet/lockSet_page.dart @@ -60,7 +60,8 @@ class _LockSetPageState extends State with RouteAware { List getListWidget() { print( "state.lockBasicInfo.value.isLockOwner:${state.lockBasicInfo.value.isLockOwner} state.lockBasicInfo.value.keyRight:${state.lockBasicInfo.value.keyRight}"); - if (state.lockBasicInfo.value.isLockOwner == 1 || state.lockBasicInfo.value.keyRight == 1) { + if (state.lockBasicInfo.value.isLockOwner == 1 || + state.lockBasicInfo.value.keyRight == 1) { // 超级管理员、授权管理员 return getAllWidget(); } else { @@ -105,7 +106,7 @@ class _LockSetPageState extends State with RouteAware { // 常开模式 Obx(() => Visibility( // visible: state.lockFeature.value.passageMode == 1 ? true : false, - visible:true, + visible: true, child: CommonItem( leftTitel: TranslationLoader.lanKeys!.normallyOpenMode!.tr, rightTitle: (state.lockSettingInfo.value.passageMode ?? 0) == 1 @@ -418,8 +419,9 @@ class _LockSetPageState extends State with RouteAware { Get.toNamed(Routers.motorPowerPage); })), // 蓝牙广播(关闭则不能使用蓝牙主动开锁) + /* 2024-01-12 会议确定去掉“蓝牙广播” by DaisyWu Obx(() => Visibility( - visible: true, + visible: true, child: CommonItem( leftTitel: TranslationLoader.lanKeys!.bluetoothBroadcast!.tr, rightTitle: "", @@ -427,6 +429,7 @@ class _LockSetPageState extends State with RouteAware { isHaveRightWidget: true, rightWidget: _lockBlueBroadcastSwitch()))), SizedBox(height: 10.h), + */ //-----新增至此 // 标记房态 Obx(() { @@ -450,7 +453,8 @@ class _LockSetPageState extends State with RouteAware { })); }), // 考勤 - Obx(() => Visibility( + Obx( + () => Visibility( visible: state.lockFeature.value.attendance == 1 ? true : false, child: CommonItem( leftTitel: TranslationLoader.lanKeys!.checkingIn!.tr, @@ -596,7 +600,8 @@ class _LockSetPageState extends State with RouteAware { // 开启考勤 CupertinoSwitch _openCheckInSwitch() { - print("111111state.lockSettingInfo.value.attendance:${state.lockSettingInfo.value.attendance}"); + print( + "111111state.lockSettingInfo.value.attendance:${state.lockSettingInfo.value.attendance}"); return CupertinoSwitch( activeColor: CupertinoColors.activeBlue, trackColor: CupertinoColors.systemGrey5, @@ -814,10 +819,11 @@ class _LockSetPageState extends State with RouteAware { print("lockSet===didPop"); logic.cancelBlueConnetctToastTimer(); if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); - if(state.deletWaitScanTimer != null){ + if (state.deletWaitScanTimer != null) { state.deletWaitScanTimer!.cancel(); } - if(state.deletWaitScanCompleter != null && !state.deletWaitScanCompleter!.isCompleted){ + if (state.deletWaitScanCompleter != null && + !state.deletWaitScanCompleter!.isCompleted) { state.deletWaitScanCompleter!.complete(); } BlueManage().stopScan(); @@ -840,10 +846,11 @@ class _LockSetPageState extends State with RouteAware { logic.cancelBlueConnetctToastTimer(); if (EasyLoading.isShow) EasyLoading.dismiss(animation: true); - if(state.deletWaitScanTimer != null){ + if (state.deletWaitScanTimer != null) { state.deletWaitScanTimer!.cancel(); } - if(state.deletWaitScanCompleter != null && !state.deletWaitScanCompleter!.isCompleted){ + if (state.deletWaitScanCompleter != null && + !state.deletWaitScanCompleter!.isCompleted) { state.deletWaitScanCompleter!.complete(); } BlueManage().stopScan(); diff --git a/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart b/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart index d65dcbc2..da643a22 100644 --- a/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart +++ b/star_lock/lib/mine/mineSet/mineSet/mineSet_page.dart @@ -45,6 +45,7 @@ class _MineSetPageState extends State { Widget getListDataView() { return Column( children: [ + /* 2024-01-12 会议确定去掉“提示音、触摸开锁” by DaisyWu CommonItem( leftTitel: TranslationLoader.lanKeys!.prompTone!.tr, rightTitle: "", @@ -63,6 +64,7 @@ class _MineSetPageState extends State { width: 60.w, height: 50.h, child: Obx(() => _isTouchUnlockSwitch()))), + */ CommonItem( leftTitel: TranslationLoader.lanKeys!.pushNotification!.tr, rightTitle: "", @@ -137,6 +139,7 @@ class _MineSetPageState extends State { state.currentLanguage.value = result['currentLanguage']; } })), + /* 2024-01-12 会议确定去掉“锁屏” by DaisyWu Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.lockScreen!.tr, rightTitle: (state.lockScreen.value == 1 @@ -150,6 +153,7 @@ class _MineSetPageState extends State { logic.userSettingsInfoRequest(); }); })), + */ Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.hideInvalidUnlockPermissions!.tr, @@ -197,8 +201,7 @@ class _MineSetPageState extends State { logic.showToast("功能暂未开放"); }), CommonItem( - leftTitel: TranslationLoader - .lanKeys!.xiaomiIOTPlatform!.tr, + leftTitel: TranslationLoader.lanKeys!.xiaomiIOTPlatform!.tr, rightTitle: "", isHaveLine: false, isHaveDirection: true, From 4ca79949edc8ceb601fe67b042da131996e8dd08 Mon Sep 17 00:00:00 2001 From: GeJiaXiang <353358601@qq.com> Date: Wed, 17 Jan 2024 18:43:34 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=95=86=E5=9F=8E?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 3 +- star_lock/images/lan/lan_keys.json | 3 +- star_lock/images/lan/lan_zh.json | 3 +- .../mine/icon_mine_main_shoppingcart.png | Bin 0 -> 2829 bytes star_lock/lib/appRouters.dart | 6 +++ star_lock/lib/mine/about/about_page.dart | 2 +- star_lock/lib/mine/mall/mall_page.dart | 50 ++++++++++++++++++ .../lib/mine/mine/starLockMine_page.dart | 5 ++ star_lock/lib/network/api.dart | 9 +--- star_lock/lib/translations/lanKeyEntity.dart | 4 ++ 10 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 star_lock/images/mine/icon_mine_main_shoppingcart.png create mode 100644 star_lock/lib/mine/mall/mall_page.dart diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index 5a4d2770..cda22c7e 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -202,6 +202,7 @@ "videoIntercomDoorLock":"Video intercom door lock", "NFCPassiveLock":"NFC Passive Lock", "addDevice":"Add device", + "shoppingCart":"Lock Mall", "gateway":"Gateway", "message":"Message", "supportStaff":"Support Staff", @@ -473,7 +474,7 @@ "openRight": "Open Right", "judgmentMethod": "Judgment Method:\n", "judgmentMethodContent": "The man stood outside the house, facing the entrance door. \nIf the hinge or shaft of the door is on the left, the door is left open; \nA door is right-open if its hinge or shaft is on the right. \nIf the setting is wrong, it will not open and close the door properly. \nRecommended to be operated by installation or maintenance personnel.", - + "customMode": "Custom mode", "videoSlot": "Video slot" } diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index eb935da8..da91ebd3 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -202,6 +202,7 @@ "videoIntercomDoorLock":"videoIntercomDoorLock", "NFCPassiveLock":"NFCPassiveLock", "addDevice":"addDevice", + "shoppingCart":"shoppingCart", "gateway":"gateway", "message":"message", "supportStaff":"supportStaff", @@ -476,4 +477,4 @@ "customMode": "customMode", "videoSlot": "videoSlot" -} \ No newline at end of file +} diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index 164d1c62..2f4064c2 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -202,6 +202,7 @@ "videoIntercomDoorLock":"可视对讲门锁", "NFCPassiveLock":"NFC无源锁", "addDevice":"添加设备", + "shoppingCart":"配件商城", "gateway":"网关", "message":"消息", "supportStaff":"客服", @@ -479,4 +480,4 @@ "customMode": "自定义模式", "videoSlot": "录像时段" -} \ No newline at end of file +} diff --git a/star_lock/images/mine/icon_mine_main_shoppingcart.png b/star_lock/images/mine/icon_mine_main_shoppingcart.png new file mode 100644 index 0000000000000000000000000000000000000000..8eeb5066f47fa379f7274a52558825f6eddc6471 GIT binary patch literal 2829 zcmbVO3s4hx8jnN_s6-GSkopJ#1PaOKO|lp`2q*!g2&o{a!jj!QAj!sTBs^*b1T7ZJ z$#CLZt3h84!$SAdDQX9!C=hb0c!}kUR@9QZo>xS|_4CY;L7d)v$<`%#$*udNHC> z$L1N3q`ZYPd0v)W2-70MsdIBcoIr~hA!?3Rqr<=)5p9SU#Mh430F62XF=mNqkq(E{ z6lnrgj2aLskHM$QSzI19RLEfQIb5MIgvw^J1OQV2usC!UALKGYHk&&9qv75RumVhs zo;U0Ze-hDDMx!1C0F%kYFmV{DK?$&gLLtCp18g=ON6@icoe|2R>oDIDhG+zn8`OHE z8r4x9j8F!;$|$1YO5cW{)sNEZu;Db}2?KHG23co@S8`5+pTI2jS6~3MPjR%ekR+p^z!0^8_3SMmQX1sE{{eAC1aa zIl5rP9>(q29GIQK77FM>HV2_|5ZoRL<%QA(Og7Btb0A2-;*QuaGN|!W2xi2Q=@3rcmR6m?txeC%L5q!7;G)FvuV+_45 z4e-BJ8`^tkWR1Y_Ip|o94q*IYbc7>1oZ5g7Xw~gS0s>*|IZ1S+ETyD>%lX5ym?>>* z((FrUra=`&rf`{v#f7iZP_Vgss*o?M5xbAna2oUBr9$L8bN$2sJz8!<`_BWi>9(U?15w?Xl0pBIv!ha6daA$GCdSRsypE$BNe)MUYC0mV2`*}&AM^=w z^3?on*YIoj+of^BO46Zk_L!@Eio^V*#B0;Q>9V_%yoL96t_}0I{QaqSfq831;4cY# zgGt(Qm%9C4Efc*a-3PuRbe?(^^>Qs#v;YqwR&)KJ9Mj9YN}N)>lD~ zRz~K{K4Tx}ZRuF;dcy4l+x^tMeOgsk+2bV1bpof5?lZPvc|$~e&~hiQuf^_V4du>? z*lkc)TDt59E z>nu4IWmQ|@cYCiNpHr;QjdPX!T;jgO)Hlf}GFP@=P7^8S?fV;%5>&n2Z&TunxtE^U z#U2;yHOI}Z+O!EXl4_DH+>?IAmxBTb$+7L9g?xR}NtnKh$g7IlkJ|7{%12Lz*|&a?f^7zW+F{!VHWL znBL%hfR(!5;5#$>5}^6ge#q6kX%^yh{UBucnoirf)_N z;*k>v7{>xo**YJ0xn}U{49os<9%*`4OXonTPchGGb3grUd+36QGU6ohi*XC^NxZB}V9OF}b%iprL#olq;`q!Z9;0xilfn^d-!TjFGx49~M z3pvM0ke=_#1TNGcvw8ZXn3}n$ZE5fJjlsR zts{rs(Ub$^wg;!DH9VV=cdk=dGA4~xw|C1|E={B@&L?DLmLKaiNt=<%M662Z93E(R z=r6gVxm5Ku{m9l|PJUhrdglM9=e)hy<@N!uJN1>e9htD^&8(=V3D4^~RMPMpyC%z* z`ShCmrV{^AakOB`PUV?(Zv8D`=ViW&H<*b_H`{?;q?>drU(-td$tJ0t?q|v3QcO-4 x{Q8f*qCW~@*7zkiKX~-!z@*9RU1x>7cJ@51GFy9If9LpMmBcKJu8m4B`Y#jCC;$Ke literal 0 HcmV?d00001 diff --git a/star_lock/lib/appRouters.dart b/star_lock/lib/appRouters.dart index 1e62292e..dddf16fc 100644 --- a/star_lock/lib/appRouters.dart +++ b/star_lock/lib/appRouters.dart @@ -144,6 +144,7 @@ import 'mine/gateway/addGateway/seletGatewayTypeNextTip/seletGatewayTypeNextTip_ import 'mine/gateway/gatewayConnectionLock/gatewayConnectionLockList_page.dart'; import 'mine/gateway/gatewayDetail/gatewayDetail_page.dart'; import 'mine/gateway/gatewayList/gatewayList_page.dart'; +import 'mine/mall/mall_page.dart'; import 'mine/message/messageList_page.dart'; import 'mine/mine/starLockMine_page.dart'; import 'mine/mineMultiLanguage/mineMultiLanguage_page.dart'; @@ -183,6 +184,7 @@ abstract class Routers { static const starLockMain = '/StarLockMain'; // 首页 static const starLockMinePage = '/StarLockMinePage'; // 我的 static const seletLockTypePage = '/SeletLockTypePage'; // 选择锁类型 + static const LockMallPage = '/LockMallPage'; // 商城页面 static const addLockPage = '/AddLockPage'; // 选择锁类型 static const nearbyLockPage = '/NearbyLockPage'; // 附近的锁 static const lockAddressPage = '/LockAddressPage'; // 锁地址 @@ -436,6 +438,10 @@ abstract class AppRouters { name: Routers.seletLockTypePage, page: () => const SeletLockTypePage(), ), + GetPage( + name: Routers.LockMallPage, + page: () => const LockMallPage(), + ), GetPage( name: Routers.addLockPage, page: () => const AddLockPage(), diff --git a/star_lock/lib/mine/about/about_page.dart b/star_lock/lib/mine/about/about_page.dart index 3e708131..36806f3f 100644 --- a/star_lock/lib/mine/about/about_page.dart +++ b/star_lock/lib/mine/about/about_page.dart @@ -3,7 +3,6 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; -import 'package:star_lock/network/api.dart'; import '../../app_settings/app_colors.dart'; import '../../tools/commonItem.dart'; @@ -68,6 +67,7 @@ class _AbountPageState extends State { isHaveLine: false, isHaveDirection: true, action: () { + print("用户协议${XSConstantMacro.userAgreementURL}"); Navigator.pushNamed(context, Routers.webviewShowPage, arguments: { "url": XSConstantMacro.userAgreementURL, diff --git a/star_lock/lib/mine/mall/mall_page.dart b/star_lock/lib/mine/mall/mall_page.dart new file mode 100644 index 00000000..74caff76 --- /dev/null +++ b/star_lock/lib/mine/mall/mall_page.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/tools/titleAppBar.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +import '../../translations/trans_lib.dart'; + +class LockMallPage extends StatefulWidget { + const LockMallPage({Key? key}) : super(key: key); + + @override + State createState() => _LockMallPageState(); +} + +class _LockMallPageState extends State { + late WebViewController _webViewController; + @override + void initState() { + super.initState(); + + _webViewController = WebViewController() + ..setJavaScriptMode(JavaScriptMode.unrestricted); + } + + @override + Widget build(BuildContext context) { + // FIXME 如果未登录状态,应先跳转登录页 + // FIXME url应该使用接口获取,接口名称 “获取商城跳转地址:/mall/getUrl“ POST请求,无参数,需要登录 + String url = 'https://ge.mall.star-lock.cn/quick_login?id=4&key=1ffb9d37109b8351ebb04ccfcca02c8e'; + _webViewController.loadRequest(Uri.parse(url)); + return Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: const Color(0xFFFFFFFF), + appBar: TitleAppBar( + barTitle: getWebTitle(), + haveBack: true, + backgroundColor: AppColors.mainColor, + ), + body: WebViewWidget(controller: _webViewController)); + } + + String getWebTitle() { + String webTitleStr = TranslationLoader.lanKeys!.shoppingCart!.tr; + _webViewController.getTitle().then((result) { + webTitleStr = result!; + }); + return webTitleStr; + } +} diff --git a/star_lock/lib/mine/mine/starLockMine_page.dart b/star_lock/lib/mine/mine/starLockMine_page.dart index 3b6f99b8..084a36bf 100644 --- a/star_lock/lib/mine/mine/starLockMine_page.dart +++ b/star_lock/lib/mine/mine/starLockMine_page.dart @@ -147,6 +147,11 @@ class _StarLockMinePageState extends State with BaseWidget { Get.back(); Get.toNamed(Routers.valueAddedServicesPage); }), + mineItem('images/mine/icon_mine_main_shoppingcart.png', + TranslationLoader.lanKeys!.shoppingCart!.tr, () { + Get.back(); + Get.toNamed(Routers.LockMallPage); + }), mineItem('images/mine/icon_mine_main_about.png', TranslationLoader.lanKeys!.about!.tr, () { Get.back(); diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 71022d2a..e2774a21 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -1,16 +1,11 @@ abstract class Api { // static String baseAddress = "https://pre.lock.star-lock.cn:8093"; //预发布环境 - static String baseAddress = "http://192.168.56.101:8099"; //联调环境 + // static String baseAddress = "https://dev.lock.star-lock.cn"; //联调环境 // static String baseAddress = "http://192.168.1.15:8022"; //谢总本地 + static String baseAddress = "https://ge.lock.star-lock.cn:8100"; //葛工开发环境地址 final String baseUrl = "$baseAddress/api"; - // final String baseUrl = "http://test.lock.star-lock.cn/api"; // 葛工 - // final String baseUrl = "https://lock.star-lock.cn/api"; // 测试环境 - // final String baseUrl = "http://wenlin.lock.star-lock.cn/api"; //曾工 - // final String baseUrl = "http://192.168.56.101:8099/api"; //曾工本地 - // final String baseUrl = "http://192.168.1.14:8099/api"; //葛工开发环境地址 - // 登录注册 final String getVerificationCodeUrl = '/user/sendValidationCode'; final String registerUrl = '/user/register'; diff --git a/star_lock/lib/translations/lanKeyEntity.dart b/star_lock/lib/translations/lanKeyEntity.dart index 437919fe..41076492 100644 --- a/star_lock/lib/translations/lanKeyEntity.dart +++ b/star_lock/lib/translations/lanKeyEntity.dart @@ -198,6 +198,7 @@ class LanKeyEntity { this.videoIntercomDoorLock, this.NFCPassiveLock, this.addDevice, + this.shoppingCart, this.gateway, this.message, this.supportStaff, @@ -661,6 +662,7 @@ class LanKeyEntity { videoIntercomDoorLock = json['videoIntercomDoorLock']; NFCPassiveLock = json['NFCPassiveLock']; addDevice = json['addDevice']; + shoppingCart = json['shoppingCart']; gateway = json['gateway']; message = json['message']; supportStaff = json['supportStaff']; @@ -1147,6 +1149,7 @@ class LanKeyEntity { String? videoIntercomDoorLock; String? NFCPassiveLock; String? addDevice; + String? shoppingCart; String? gateway; String? message; String? supportStaff; @@ -1629,6 +1632,7 @@ class LanKeyEntity { map['videoIntercomDoorLock'] = videoIntercomDoorLock; map['NFCPassiveLock'] = NFCPassiveLock; map['addDevice'] = addDevice; + map['shoppingCart'] = shoppingCart; map['gateway'] = gateway; map['message'] = message; map['supportStaff'] = supportStaff; From c82b3493ca53d611a71568986b9062830f368044 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Thu, 18 Jan 2024 11:24:12 +0800 Subject: [PATCH 5/6] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9ETimeLine=202?= =?UTF-8?q?=EF=BC=8C=E5=AE=8C=E5=96=84=E9=97=A8=E9=94=81=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../doorLockLog/doorLockLog_logic.dart | 6 +- .../doorLockLog/doorLockLog_page.dart | 385 ++++++------------ .../doorLockLog/doorLockLog_state.dart | 22 +- star_lock/pubspec.yaml | 4 +- 4 files changed, 136 insertions(+), 281 deletions(-) diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart index 8d301b06..ceb96444 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_logic.dart @@ -244,9 +244,9 @@ class DoorLockLogLogic extends BaseGetXController { // 获取是否是演示模式 演示模式不获取接口 var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { - _initReplySubscription(); + // _initReplySubscription(); - mockNetworkDataRequest(); + // mockNetworkDataRequest(); } } @@ -259,7 +259,7 @@ class DoorLockLogLogic extends BaseGetXController { // 获取是否是演示模式 演示模式不获取接口 var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { - getLockRecordLastUploadDataTime(); + // getLockRecordLastUploadDataTime(); // senderReferEventRecordTime(); // senderReferEventRecordNumber(); } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index f106fef0..f8422ba0 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -1,11 +1,9 @@ -import 'package:cupertino_stepper/cupertino_stepper.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_advanced_calendar/flutter_advanced_calendar.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; -import 'package:gzx_dropdown_menu/gzx_dropdown_menu.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart'; +import 'package:timelines/timelines.dart'; import '../../../app_settings/app_colors.dart'; import '../../../tools/storage.dart'; @@ -56,270 +54,143 @@ class _DoorLockLogPageState extends State { ), ], ), - body: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Theme( - data: theme.copyWith( - textTheme: theme.textTheme.copyWith( - titleMedium: theme.textTheme.titleMedium!.copyWith( - fontSize: 16, - color: theme.colorScheme.secondary, - ), - bodyLarge: theme.textTheme.bodyLarge!.copyWith( - fontSize: 14, - color: Colors.black54, - ), - bodyMedium: theme.textTheme.bodyMedium!.copyWith( - fontSize: 12, - color: Colors.black87, - ), + body: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Theme( + data: theme.copyWith( + textTheme: theme.textTheme.copyWith( + titleMedium: theme.textTheme.titleMedium!.copyWith( + fontSize: 16, + color: theme.colorScheme.secondary, ), - primaryColor: AppColors.mainColor, - highlightColor: Colors.yellow, - disabledColor: Colors.green, - ), - child: AdvancedCalendar( - controller: state.calendarControllerCustom, - events: state.events, - weekLineHeight: 48.0, - startWeekDay: 1, - innerDot: true, - keepLineSize: true, - calendarTextStyle: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w400, - height: 1.3125, - letterSpacing: 0, + bodyLarge: theme.textTheme.bodyLarge!.copyWith( + fontSize: 14, + color: Colors.black54, + ), + bodyMedium: theme.textTheme.bodyMedium!.copyWith( + fontSize: 12, + color: Colors.black87, ), ), + primaryColor: AppColors.mainColor, + highlightColor: Colors.yellow, + disabledColor: Colors.green, ), - Stack( - key: state.stackKey, - children: [ - Column( - children: [ - _buildHeaderView(), - ], - ), - // 下拉菜单,注意GZXDropDownMenu目前只能在Stack内,后续有时间会改进,以及支持CustomScrollView和NestedScrollView - _buildDropDownMenu() - ], + child: AdvancedCalendar( + controller: state.calendarControllerCustom, + events: state.events, + weekLineHeight: 48.0, + startWeekDay: 1, + innerDot: true, + keepLineSize: true, + calendarTextStyle: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w400, + height: 1.3125, + letterSpacing: 0, + ), ), - OrientationBuilder( - builder: (BuildContext context, Orientation orientation) { - switch (orientation) { - case Orientation.portrait: - return _buildStepper(StepperType.vertical); - case Orientation.landscape: - return _buildStepper(StepperType.horizontal); - default: - throw UnimplementedError(orientation.toString()); - } - }, + ), + Row(children: [ + SizedBox( + width: 30.w, ), - ], - ), - ), - ); - } - -//下拉头部控件GZXDropDownHeader - Widget _buildHeaderView() { - return GZXDropDownHeader( - // 下拉的头部项,目前每一项,只能自定义显示的文字、图标、图标大小修改 - items: [ - GZXDropDownHeaderItem(state.dropDownDoorLockItem[0], iconSize: 36), - ], - // GZXDropDownHeader对应第一父级Stack的key - stackKey: state.stackKey, - // controller用于控制menu的显示或隐藏 - controller: state.dropdownMenuController, - // 当点击头部项的事件,在这里可以进行页面跳转或openEndDrawer - onItemTap: (index) {}, - // 头部的高度 - height: 46, - // 头部背景颜色 - color: Colors.white, - // 文字样式 - style: TextStyle( - color: AppColors.darkGrayTextColor, fontSize: ScreenUtil().setSp(24)), - // 下拉时文字样式 - dropDownStyle: TextStyle( - fontSize: ScreenUtil().setSp(24), - color: AppColors.darkGrayTextColor, - ), - // 图标大小 - iconSize: 20, - // 图标颜色 - iconColor: AppColors.greyBackgroundColor, - // 下拉时图标颜色 - iconDropDownColor: AppColors.mainColor, - ); - } - - //下拉菜单 - Widget _buildDropDownMenu() { - return Obx(() => GZXDropDownMenu( - // controller用于控制menu的显示或隐藏 - controller: state.dropdownMenuController, - // 下拉菜单显示或隐藏动画时长 - animationMilliseconds: 300, - // 下拉后遮罩颜色 -// maskColor: Theme.of(context).primaryColor.withOpacity(0.5), -// maskColor: Colors.red.withOpacity(0.5), - dropdownMenuChanging: (isShow, index) {}, - dropdownMenuChanged: (isShow, index) {}, - // 下拉菜单,高度自定义,你想显示什么就显示什么,完全由你决定,你只需要在选择后调用_dropdownMenuController.hide();即可 - menus: [ - GZXDropdownMenuBuilder( - dropDownHeight: 44.0.h * state.eventSortConditions.value.length, - dropDownWidget: _buildConditionListWidget( - state.eventSortConditions.value, (value) { - state.selectGroupSortCondition = value; - state.dropDownDoorLockItem[0] = - state.selectGroupSortCondition.name; - })), - ], - )); - } - - _buildConditionListWidget( - items, void Function(SortCondition sortCondition) itemOnTap) { - return Container( - color: Colors.white, - child: ListView.separated( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - scrollDirection: Axis.vertical, - itemCount: items.length, - // item 的个数 - separatorBuilder: (BuildContext context, int index) => - const Divider(height: 1.0), - // 添加分割线 - itemBuilder: (BuildContext context, int index) { - return gestureDetector(items, index, itemOnTap, context); - }, - ), - ); - } - - GestureDetector gestureDetector( - items, - int index, - void Function(SortCondition sortCondition) itemOnTap, - BuildContext context) { - SortCondition goodsSortCondition = items[index]; - return GestureDetector( - onTap: () { - for (var value in items) { - value.isSelected = false; - } - goodsSortCondition.isSelected = true; - - itemOnTap(goodsSortCondition); - }, - child: SizedBox( - height: 44.h, - child: Center( - child: Obx(() => Text( - goodsSortCondition.name, - style: TextStyle( - color: goodsSortCondition.isSelected - ? AppColors.mainColor - : Colors.black, + Obx(() => DropdownButton( + value: state.dropdownValue.value, + icon: const Icon(Icons.arrow_drop_down), + iconSize: 40, + elevation: 12, + style: TextStyle(fontSize: 26.sp, color: Colors.black), + iconEnabledColor: Colors.grey, + onChanged: (newValue) { + state.dropdownValue.value = newValue!; + }, + items: state.dropDownItemList.obs + .map>((item) { + return DropdownMenuItem( + value: item, + child: Text(item), + ); + }).toList(), + )) + ]), + SizedBox( + height: 20.h, + ), + Expanded( + child: Container( + margin: EdgeInsets.only(left: 20.w, right: 20.w), + //给contain设置一个10像素的圆角 + decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.circular(16.w)), + child: Timeline.tileBuilder( + builder: TimelineTileBuilder.fromStyle( + contentsAlign: ContentsAlign.basic, + contentsBuilder: (context, index) => Padding( + padding: EdgeInsets.all(24.0.w), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('09:30 有人出现在门口', + textAlign: TextAlign.left, + style: TextStyle( + color: AppColors.darkGrayTextColor, + fontSize: 24.sp, + )), + SizedBox( + height: 10.h, + ), + const Image( + image: AssetImage( + 'images/main/icon_lockDetail_monitoringvoiceFrist.png')), + ], ), - )), - ), - )); - } - - CupertinoStepper _buildStepper(StepperType type) { - final canCancel = state.currentStep.value > 0; - final canContinue = state.currentStep.value < 3; - return CupertinoStepper( - type: type, - currentStep: state.currentStep.value, - onStepTapped: (step) => setState(() => state.currentStep.value = step), - onStepCancel: - canCancel ? () => setState(() => --state.currentStep.value) : null, - onStepContinue: - canContinue ? () => setState(() => ++state.currentStep.value) : null, - steps: [ - for (var i = 0; i < 3; ++i) - _buildStep( - title: const Text(''), - isActive: i == state.currentStep.value, - state: i == state.currentStep.value - ? StepState.editing - : i < state.currentStep.value - ? StepState.complete - : StepState.indexed, - ), - // _buildStep( - // title: Text('Error'), - // state: StepState.error, - // ), - // _buildStep( - // title: Text('Disabled'), - // state: StepState.disabled, - // ) - ], - ); - } - - Step _buildStep({ - required Widget title, - StepState state = StepState.indexed, - bool isActive = false, - }) { - return Step( - title: title, - subtitle: const Text('10:45 有人出现在门口'), - state: state, - isActive: isActive, - content: LimitedBox( - maxWidth: 300, - maxHeight: 300, - child: Container(color: CupertinoColors.systemGrey), + ), + itemCount: 10, + ), + theme: TimelineThemeData( + nodePosition: 0.04, //居左侧距离 + connectorTheme: const ConnectorThemeData( + thickness: 2.0, + color: AppColors.greyBackgroundColor, + indent: 0.5), + indicatorTheme: const IndicatorThemeData( + size: 16.0, + color: AppColors.greyBackgroundColor, + position: 0.07), + ), + ), + )), + ], ), ); } -} -String getTypeIcon(int type) { - String title = 'images/controls_user.png'; - switch (type) { - case 1: - // 蓝牙开锁 - title = 'images/controls_user.png'; - break; - case 4: - // 密码开锁 - title = 'images/icon_password.png'; - break; - case 7: - // ic卡 - title = 'images/icon_card.png'; - break; - case 8: - // 指纹开锁 - title = 'images/icon_fingerprint.png'; - break; - default: - break; + String getTypeIcon(int type) { + String title = 'images/controls_user.png'; + switch (type) { + case 1: + // 蓝牙开锁 + title = 'images/controls_user.png'; + break; + case 4: + // 密码开锁 + title = 'images/icon_password.png'; + break; + case 7: + // ic卡 + title = 'images/icon_card.png'; + break; + case 8: + // 指纹开锁 + title = 'images/icon_fingerprint.png'; + break; + default: + break; + } + return title; } - return title; -} - -class SortCondition { - String name; - bool isSelected; - - SortCondition({ - required this.name, - required this.isSelected, - }); } diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart index e3ac177f..c37bece3 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart @@ -1,8 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:flutter_advanced_calendar/flutter_advanced_calendar.dart'; import 'package:get/get.dart'; -import 'package:gzx_dropdown_menu/gzx_dropdown_menu.dart'; -import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_page.dart'; import '../../lockMian/entity/lockListInfo_entity.dart'; import '../electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart'; @@ -11,25 +8,14 @@ class DoorLockLogState { final keyInfos = LockListInfoItemEntity().obs; final lockOperatingRecordListData = [].obs; final calendarControllerToday = AdvancedCalendarController.today(); - final calendarControllerCustom = - AdvancedCalendarController(DateTime(2024, 01, 10)); + final calendarControllerCustom = AdvancedCalendarController.today(); final events = [ DateTime.now(), DateTime(2024, 10, 10), ]; - final eventSortConditions = [ - SortCondition(name: '全部事件', isSelected: true), - SortCondition(name: '门锁异常', isSelected: false), - SortCondition(name: '有人出现', isSelected: false), - SortCondition(name: '有人按门铃', isSelected: false), - SortCondition(name: '一次性密码开门', isSelected: false) - ].obs; - final List dropDownDoorLockItem = ['全部事件']; - final GZXDropdownMenuController dropdownMenuController = - GZXDropdownMenuController(); - final scaffoldKey = GlobalKey(); - final GlobalKey stackKey = GlobalKey(); - late SortCondition selectGroupSortCondition = eventSortConditions.value[0]; + var dropdownValue = '全部事件'.obs; + final List dropDownItemList = + ['全部事件', '门锁异常', '有人出现', '有人按门铃', '一次性密码开门'].obs; var currentStep = 0.obs; DoorLockLogState() { diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index c35c6247..918c443c 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -135,9 +135,7 @@ dependencies: #监听网络连接状态 connectivity_plus: ^5.0.2 flutter_advanced_calendar: ^1.4.1 - #下拉选择菜单框 - gzx_dropdown_menu: ^3.1.0 - cupertino_stepper: ^0.2.1 + timelines: ^0.1.0 dev_dependencies: flutter_test: From 4f3d8f3f3249a17331042b0e9b7e01115c0dad4c Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Thu, 18 Jan 2024 11:25:34 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E9=83=A8=E5=88=86=E5=AE=89=E5=8D=93?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E8=AE=BE=E7=BD=AE=E5=8F=8A=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/app/aliyun-emas-services.json | 49 +++++++++++++ star_lock/android/app/build.gradle | 2 +- .../android/app/src/main/AndroidManifest.xml | 19 +++++ .../example/star_lock/MyMessageReceiver.kt | 72 +++++++++++++++++++ .../app/src/profile/AndroidManifest.xml | 41 +++++------ 5 files changed, 160 insertions(+), 23 deletions(-) create mode 100644 star_lock/android/app/aliyun-emas-services.json create mode 100644 star_lock/android/app/src/main/kotlin/com/example/star_lock/MyMessageReceiver.kt diff --git a/star_lock/android/app/aliyun-emas-services.json b/star_lock/android/app/aliyun-emas-services.json new file mode 100644 index 00000000..63eaf6db --- /dev/null +++ b/star_lock/android/app/aliyun-emas-services.json @@ -0,0 +1,49 @@ +{ + "config": { + "emas.appKey":"333904040", + "emas.appSecret":"c316965fe0a74fc9a481a5c44a535dc2", + "emas.packageName":"com.example.star_lock", + "hotfix.idSecret":"333904040-1", + "hotfix.rsaSecret":"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCTjeqT4cX/VTcInnWLLxo2f+0W1vKfPLwpHr9rYeW1pELlySFFeDusdaV8vBBYRE2A4Mti6wuVRCw67YIif7gK+ZLipALWob/cPxC4pcbqJ0S5QznM8qPW2nheWhvuZA9SenO5OyNnQvhBeSMK0VaGBnCBrznm52Mq7yb1cQDlosGtTwDgezt5073xDJFhefYg7BzurAlCgmS4BRX0l1i5GWsv+R5hWLWyhO+dI2deArgbYiW0575f5L1zywJ4BJ/3qOgsJoSflLgtTVLlmbAXI1Xo023UWtfnnowH71avDn+SQ5agqZepp6pkoXiFhC7DN9gLTknHTb03mDHODOW1AgMBAAECggEADrs5c0A0M1S/pNWlKJswQ8ar1f7pxCodIwHV3JOuil726tgUwUnKs2Iffn+MJjPThQ1sYNjUlDd1LwDtYCJeLoJSPtxfCCyn6gZF1hl+7Xu0Kcbja2nCH746DDl01m0Y9oQRL6oO081k2ayNahQSTlkwPFJRNpNdXDj6K8D3dPWPCBw7ECFKYpoDmPt+lNwqPPIWlVwYFRwhhCRuSPZsejO+a65gWZhm6uWDkh/EtPzdCIkrpfxbfqSnM6t+WHKmA3Gmm6AiwNLrzUGJ5lIsLXNuvaXFpsjBpVq7x9Ff86Cj0vJ7wdIRn7sP1Wlw6SosKZZwn9+zDLQU0Prge0Mn9QKBgQDKFXnzWqdmG6PxykyHJrXeLvQyMBdy6x91lmNSYGxYYEG2Tr1LR+P5r1oL/VRmuT43qWxubL7gEMqMGOVEMwKN6cEBTFDIOyqpNgR5Nnt0DrYMDhca3Wxc1/SkzuaVsRPHAKn8bChWGtq58/VuuZIY8SRVTWLgRWrnXFWCbKq0QwKBgQC67AVJwymxxIYt7UVRxtihd84SIGhRluEXG3O8PzK7Je5qDgBkLc+khnTvnGQyG7AJwtMpIbzmzJyu76pjiga1XJnYCO1QXhayMRlieSkrk2C4u9hnmeni24iGDUkV7yCnwsTjFaQ3lq1XtrJJKB9rUeBndXwuN06lTIqokSuapwKBgQCYCEpEHCqediMEMDcc4rGmo1qSO34Yte1oEKlOez5nypsFZf2hmkdYPGUZahBKbAjz5WGvPd7oQZmwhrZNdbbxPzA2Is0Ppvu0a/A3pRaBvOOW9C7LxlPVEZ97MjFl4t/HMqewQUqjZPazOWenUrMoUpsMFflSUsdXoi6uvcQ7cwKBgGNS1tyDH7yeOM5erd7uUl46Uv2+yq/QBHtK0wzMaCCZ3z3rgrm4vgUmjSxlZbhajgghxiKtErtxLjCmmVubFEV6lyT8WV3DITw+asawqvfEsDh5WFx0pJsvHDRfCt7k2e1KyWQBM+l131Ykdkf5Ufis4RkYjIviR5/+NA+uVAUxAoGAEIrRsaTDij9AX3/wD0XpDavFJdHzkvX259b6v0aASVoYlzAfj5bh1fZI90ex+MDibx3UyhHOVS2kk6q/TPAoevVlfS6IDfV0VJJZvie52qumfhttBpvH302rzrdEiZEhRd2UuKkBw7hsW+NlJEmoV0tj3xiP2vLLPnsaua9F3/g=", + "httpdns.accountId":"125761", + "httpdns.secretKey":"f77f39c6f0e66d7c169aa7e8d87dfe13", + "appmonitor.tlog.rsaSecret":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCEYcyLDY/8H6714r5FuRuv94oWLod90sa5dwcJ5l8GmRMscFPxMXt9cNiKwL7zqPCWws+ApSfHczFnRgvZQX/p/t0U1nPNdotLqkLuzXNBim+TpfNnCvIoiVujAGXwdIGo7oaxci9+VV/1TFs5lm9M1wsreT2u+62cCqi/h16ZkQIDAQAB", + "appmonitor.rsaSecret":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCEYcyLDY/8H6714r5FuRuv94oWLod90sa5dwcJ5l8GmRMscFPxMXt9cNiKwL7zqPCWws+ApSfHczFnRgvZQX/p/t0U1nPNdotLqkLuzXNBim+TpfNnCvIoiVujAGXwdIGo7oaxci9+VV/1TFs5lm9M1wsreT2u+62cCqi/h16ZkQIDAQAB" +}, + "services": { + "hotfix_service":{ + "status":1, + "version":"3.3.9" + }, + "ha-adapter_service":{ + "status":1, + "version":"1.2.3.0-open" + }, + "feedback_service":{ + "status":1, + "version":"3.4.2" + }, + "tlog_service":{ + "status":1, + "version":"1.1.7.0-open" + }, + "httpdns_service":{ + "status":1, + "version":"2.3.3" + }, + "apm_service":{ + "status":1, + "version":"1.1.3.0-open" + }, + "man_service":{ + "status":1, + "version":"1.2.7" + }, + "cps_service":{ + "status":1, + "version":"3.8.8.1" + } +}, + "use_maven":true, + "proguard_keeplist":"\n#httpdns\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n\n#cps\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n-keepclasseswithmembernames class ** {\nnative ;\n}\n-keepattributes Signature\n-keep class sun.misc.Unsafe { *; }\n-keep class com.alipay.** {*;}\n-dontwarn com.alipay.**\n-keep class anet.**{*;}\n-keep class org.android.spdy.**{*;}\n-keep class org.android.agoo.**{*;}\n-dontwarn anet.**\n-dontwarn org.android.spdy.**\n-dontwarn org.android.agoo.**\n\n#hotfix\n#基线包使用,生成mapping.txt\n-printmapping mapping.txt\n#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下\n#修复后的项目使用,保证混淆结果一致\n#-applymapping mapping.txt\n#hotfix\n-keep class com.taobao.sophix.**{*;}\n-keep class com.ta.utdid2.device.**{*;}\n#防止inline\n-dontoptimize\n\n#man\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n\n#feedback\n-keep class com.taobao.** {*;}\n-keep class com.alibaba.** {*;}\n-keep class com.ta.**{*;}\n-keep class com.ut.**{*;}\n-dontwarn com.taobao.**\n-dontwarn com.alibaba.**\n-dontwarn com.ta.**\n-dontwarn com.ut.**\n" +} \ No newline at end of file diff --git a/star_lock/android/app/build.gradle b/star_lock/android/app/build.gradle index b8265947..3364fc58 100644 --- a/star_lock/android/app/build.gradle +++ b/star_lock/android/app/build.gradle @@ -52,7 +52,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "cn.starlock.lock" + applicationId "com.example.star_lock" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. // minSdkVersion flutter.minSdkVersion diff --git a/star_lock/android/app/src/main/AndroidManifest.xml b/star_lock/android/app/src/main/AndroidManifest.xml index 0cb7f123..6b4f7d8b 100644 --- a/star_lock/android/app/src/main/AndroidManifest.xml +++ b/star_lock/android/app/src/main/AndroidManifest.xml @@ -15,6 +15,7 @@ + @@ -78,5 +79,23 @@ android:name="flutterEmbedding" android:value="2" /> + + + + + + + + + + + + + + + + diff --git a/star_lock/android/app/src/main/kotlin/com/example/star_lock/MyMessageReceiver.kt b/star_lock/android/app/src/main/kotlin/com/example/star_lock/MyMessageReceiver.kt new file mode 100644 index 00000000..9ef434be --- /dev/null +++ b/star_lock/android/app/src/main/kotlin/com/example/star_lock/MyMessageReceiver.kt @@ -0,0 +1,72 @@ +package com.example.star_lock + +import android.content.Context +import android.util.Log +import com.alibaba.sdk.android.push.MessageReceiver +import com.alibaba.sdk.android.push.notification.CPushMessage + + +class MyMessageReceiver : MessageReceiver() { + override fun onNotification( + context: Context?, + title: String, + summary: String, + extraMap: Map + ) { + // TODO处理推送通知 + Log.e( + "MyMessageReceiver", + "Receive notification, title: $title, summary: $summary, extraMap: $extraMap" + ) + } + + override fun onMessage(context: Context?, cPushMessage: CPushMessage) { + Log.e( + "MyMessageReceiver", + "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent() + ) + } + + override fun onNotificationOpened(context: Context?, title: String, summary: String, extraMap: String) { + Log.e( + "MyMessageReceiver", + "onNotificationOpened, title: $title, summary: $summary, extraMap:$extraMap" + ) + } + + protected override fun onNotificationClickedWithNoAction( + context: Context?, + title: String, + summary: String, + extraMap: String + ) { + Log.e( + "MyMessageReceiver", + "onNotificationClickedWithNoAction, title: $title, summary: $summary, extraMap:$extraMap" + ) + } + + protected override fun onNotificationReceivedInApp( + context: Context?, + title: String, + summary: String, + extraMap: Map, + openType: Int, + openActivity: String, + openUrl: String + ) { + Log.e( + "MyMessageReceiver", + "onNotificationReceivedInApp, title: $title, summary: $summary, extraMap:$extraMap, openType:$openType, openActivity:$openActivity, openUrl:$openUrl" + ) + } + + protected override fun onNotificationRemoved(context: Context?, messageId: String?) { + Log.e("MyMessageReceiver", "onNotificationRemoved") + } + + companion object { + // 消息接收部分的LOG_TAG + const val REC_TAG = "receiver" + } +} \ No newline at end of file diff --git a/star_lock/android/app/src/profile/AndroidManifest.xml b/star_lock/android/app/src/profile/AndroidManifest.xml index 8effd092..bdb57586 100644 --- a/star_lock/android/app/src/profile/AndroidManifest.xml +++ b/star_lock/android/app/src/profile/AndroidManifest.xml @@ -9,32 +9,14 @@ + - + - - + - - - - - - - - - - - - - - - - - + @@ -60,6 +42,21 @@ + + + + + + + + + + + + +