From a4a7ee9fa4964080cf2c4bfc0028b6b30b629481 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 29 Apr 2024 14:59:25 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=A0=B9=E6=8D=AE=E6=9D=83=E9=99=90=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E4=B8=8D=E5=90=8C=E5=85=A5=E5=8F=A3=202=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B7=BB=E5=8A=A0=E5=BC=80=E9=97=A8=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E4=BF=9D=E5=AD=98=E6=97=B6=E5=BC=B9=E5=87=BA=E9=9C=80?= =?UTF-8?q?=E5=BC=80=E9=80=9AAlert=E6=A1=86=203=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=A2=9E=E5=80=BC=E6=9C=8D=E5=8A=A1=E5=A5=97=E9=A4=90=E8=B4=AD?= =?UTF-8?q?=E5=8C=85=E9=93=BE=E6=8E=A5=204=EF=BC=8C=E5=B7=B2=E5=BC=80?= =?UTF-8?q?=E9=80=9A=E9=AB=98=E7=BA=A7=E5=8A=9F=E8=83=BD=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/icon_gift.png | Bin 0 -> 6650 bytes star_lock/images/lan/lan_en.json | 4 +- star_lock/images/lan/lan_keys.json | 4 +- star_lock/images/lan/lan_zh.json | 5 +- star_lock/lib/appRouters.dart | 13 +- .../addFamily/addFamily_logic.dart | 43 ++++++ .../messageWarn/addFamily/addFamily_page.dart | 14 +- .../lib/mine/mine/starLockMine_logic.dart | 4 +- .../lib/mine/mine/starLockMine_page.dart | 16 +-- .../minePersonInfo_logic.dart | 10 +- .../minePersonInfo_page.dart | 5 +- .../advancedFeaturesWeb_entity.dart | 60 +++++++++ .../advancedFeaturesWeb_logic.dart | 122 ++++++++++++++++++ .../advancedFeaturesWeb_page.dart | 65 ++++++++++ .../advancedFeaturesWeb_state.dart | 22 ++++ .../valueAddedServicesHighFunction_logic.dart | 17 +++ .../valueAddedServicesHighFunction_page.dart | 14 +- .../valueAddedServicesHighFunction_state.dart | 1 + .../valueAddedServicesList_logic.dart | 15 +++ .../valueAddedServicesList_page.dart | 32 ++++- .../valueAddedServicesList_state.dart | 1 + star_lock/lib/network/api.dart | 4 + star_lock/lib/network/api_provider.dart | 8 ++ star_lock/lib/network/api_repository.dart | 13 ++ star_lock/lib/tools/storage.dart | 7 +- 25 files changed, 452 insertions(+), 47 deletions(-) create mode 100644 star_lock/images/icon_gift.png create mode 100644 star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart create mode 100644 star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_logic.dart create mode 100644 star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_page.dart create mode 100644 star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart create mode 100644 star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart create mode 100644 star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_state.dart create mode 100644 star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_logic.dart create mode 100644 star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_state.dart diff --git a/star_lock/images/icon_gift.png b/star_lock/images/icon_gift.png new file mode 100644 index 0000000000000000000000000000000000000000..dffd6f5248af712392ddba2d6652140e457f658c GIT binary patch literal 6650 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 const AddPalmTypeManagePage())), - GetPage(name: Routers.addPalmPage, page: (() => const AddPalmPage())) + GetPage(name: Routers.addPalmPage, page: (() => const AddPalmPage())), + GetPage( + name: Routers.advancedFeaturesWebPage, + page: (() => AdvancedFeaturesWebPage())) ]; } diff --git a/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_logic.dart b/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_logic.dart index 16979fee..fa045e7e 100644 --- a/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_logic.dart +++ b/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_logic.dart @@ -1,4 +1,8 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/appRouters.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/main/lockDetail/messageWarn/addFamily/addFamily_state.dart'; import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/openDoorNotify/openDoorNotify_entity.dart'; import 'package:star_lock/main/lockDetail/messageWarn/notificationMode/notificationMode_data.dart'; @@ -141,6 +145,45 @@ class AddFamilyLogic extends BaseGetXController { } } + //高级功能弹窗 + void advancedFeatureAlert() { + showCupertinoDialog( + context: Get.context!, + builder: (context) { + return CupertinoAlertDialog( + title: Container( + margin: EdgeInsets.only(bottom: 20.h), + child: Image.asset( + 'images/icon_gift.png', + width: 50.w, + height: 50.w, + ), + ), + content: Text('该功能是高级功能,请开通后再使用'.tr), + actions: [ + CupertinoDialogAction( + child: Text( + '取消'.tr, + style: TextStyle(color: AppColors.mainColor), + ), + onPressed: () { + Get.back(); + }, + ), + CupertinoDialogAction( + child: Text( + '去开通'.tr, + style: TextStyle(color: AppColors.mainColor), + ), + onPressed: () async { + Get.toNamed(Routers.advancedFeaturesWebPage); + }, + ), + ], + ); + }); + } + //根据列表返回值得到邮箱、手机列表 Map> getAccountsMap() { List mailAccounts = []; diff --git a/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_page.dart b/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_page.dart index 1479bcfb..42ca1890 100644 --- a/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_page.dart +++ b/star_lock/lib/main/lockDetail/messageWarn/addFamily/addFamily_page.dart @@ -6,6 +6,7 @@ import 'package:star_lock/appRouters.dart'; import 'package:star_lock/main/lockDetail/messageWarn/addFamily/addFamily_logic.dart'; import 'package:star_lock/tools/commonItem.dart'; import 'package:star_lock/tools/showTFView.dart'; +import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/translations/trans_lib.dart'; @@ -114,11 +115,16 @@ class _AddFamilyPageState extends State { ? true : logic.checkBtnDisable(), isDelete: state.isDetail.value, - onClick: () { - if (state.isDetail.value) { - logic.deleteLockNoticeSetting(); + onClick: () async { + var isVip = await Storage.getBool(saveIsVip); + if (isVip == true) { + if (state.isDetail.value) { + logic.deleteLockNoticeSetting(); + } else { + logic.addLockNoticeSetting(); + } } else { - logic.addLockNoticeSetting(); + logic.advancedFeatureAlert(); } }, )), diff --git a/star_lock/lib/mine/mine/starLockMine_logic.dart b/star_lock/lib/mine/mine/starLockMine_logic.dart index 8a345929..1108883e 100644 --- a/star_lock/lib/mine/mine/starLockMine_logic.dart +++ b/star_lock/lib/mine/mine/starLockMine_logic.dart @@ -1,7 +1,5 @@ import 'dart:async'; -import 'package:get/get.dart'; -import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/login/login/entity/LoginEntity.dart'; import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart'; import 'package:star_lock/network/api_repository.dart'; @@ -20,7 +18,7 @@ class StarLockMineLogic extends BaseGetXController { if (entity.errorCode!.codeIsSuccessful) { state.mineInfoData.value = entity.data!; state.isVip.value = state.mineInfoData.value.isVip! == 0 ? false : true; - AppLog.log('isVip: ${state.isVip.value}'); + Storage.setBool(saveIsVip, state.isVip.value); } } diff --git a/star_lock/lib/mine/mine/starLockMine_page.dart b/star_lock/lib/mine/mine/starLockMine_page.dart index 9f37e9c6..72277052 100644 --- a/star_lock/lib/mine/mine/starLockMine_page.dart +++ b/star_lock/lib/mine/mine/starLockMine_page.dart @@ -34,7 +34,6 @@ class StarLockMinePageState extends State with BaseWidget { Widget build(BuildContext context) { return Scaffold( backgroundColor: const Color(0xFFFFFFFF), - // appBar: TitleAppBar(barTitle: "", haveBack:false, backgroundColor: AppColors.mainColor), body: Column( children: [ topWidget(), @@ -42,7 +41,6 @@ class StarLockMinePageState extends State with BaseWidget { SizedBox( height: 40.h, ), - // keyBottomWidget() ], ), ); @@ -64,24 +62,18 @@ class StarLockMinePageState extends State with BaseWidget { ), Center( child: Column( - // crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( height: 120.h, ), GestureDetector( onTap: () { - // Navigator.pushNamed(context, Routers.starLockLoginPage); Get.back(); Get.toNamed(Routers.minePersonInfoPage); }, - child: Obx(() => Container( + child: Obx(() => SizedBox( width: 105.w, height: 105.w, - // decoration: BoxDecoration( - // borderRadius: - // BorderRadius.all(Radius.circular(52.5.w)), - // ), child: ClipRRect( borderRadius: BorderRadius.circular(52.5.w), child: CustomNetworkImage( @@ -90,12 +82,6 @@ class StarLockMinePageState extends State with BaseWidget { width: 105.w, height: 105.h), ), - // state.headUrl().isNotEmpty ? - // Image(image: NetworkImage(state.loginData.value.data!.headUrl!)) : - // Image.asset( - // 'images/mine/icon_mine_main_defaultAvatar.png', - // width: 60.w, - // height: 60.w) )), ), SizedBox( diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart index a222e01e..ad9426e1 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_logic.dart @@ -37,14 +37,20 @@ class MinePersonInfoLogic extends BaseGetXController { } // 上传头像 - void uploadFile(MinePersonGetUploadFileInfoEntity minePersonGetUploadFileInfoEntity) async { + void uploadFile( + MinePersonGetUploadFileInfoEntity + minePersonGetUploadFileInfoEntity) async { // Map user = minePersonGetUploadFileInfoEntity.data!.formData!; var bytes = File(state.image!.path); var enc = await bytes.readAsBytes(); // user[minePersonGetUploadFileInfoEntity.data!.fileField!] = enc; final form = FormData(minePersonGetUploadFileInfoEntity.data!.formData!); - form.files.add(MapEntry(minePersonGetUploadFileInfoEntity.data!.fileField!, MultipartFile(enc, filename: minePersonGetUploadFileInfoEntity.data!.formData!["key"]))); + form.files.add(MapEntry( + minePersonGetUploadFileInfoEntity.data!.fileField!, + MultipartFile(enc, + filename: + minePersonGetUploadFileInfoEntity.data!.formData!["key"]))); var entity = await ApiRepository.to.uploadFile( url: minePersonGetUploadFileInfoEntity.data!.uploadUrl!, body: form); diff --git a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart index 61b95e05..cfcade93 100644 --- a/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart +++ b/star_lock/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart @@ -130,8 +130,9 @@ class _MinePersonInfoPageState extends State { }), Obx(() => CommonItem( leftTitel: TranslationLoader.lanKeys!.safetyProblem!.tr, - rightTitle: - state.mineInfoData.value.haveSafeAnswer == 0 ? "去设置".tr : "", + rightTitle: state.mineInfoData.value.haveSafeAnswer == 0 + ? "去设置".tr + : "", isHaveLine: true, isHaveDirection: true, action: () { diff --git a/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart new file mode 100644 index 00000000..15a4fe3c --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart @@ -0,0 +1,60 @@ +class AdvancedFeaturesWebEntity { + int? errorCode; + String? description; + String? errorMsg; + Data? data; + + AdvancedFeaturesWebEntity( + {this.errorCode, this.description, this.errorMsg, this.data}); + + AdvancedFeaturesWebEntity.fromJson(Map json) { + errorCode = json['errorCode']; + description = json['description']; + errorMsg = json['errorMsg']; + data = json['data'] != null ? Data.fromJson(json['data']) : null; + } + + Map toJson() { + final Map data = {}; + data['errorCode'] = errorCode; + data['description'] = description; + data['errorMsg'] = errorMsg; + if (this.data != null) { + data['data'] = this.data!.toJson(); + } + return data; + } +} + +class Data { + String? smsBuyUrl; + String? emailBuyUrl; + String? vipBuyUrl; + String? cloudauthBuyUrl; + String? shopList; + + Data( + {this.smsBuyUrl, + this.emailBuyUrl, + this.vipBuyUrl, + this.cloudauthBuyUrl, + this.shopList}); + + Data.fromJson(Map json) { + smsBuyUrl = json['sms_buy_url']; + emailBuyUrl = json['email_buy_url']; + vipBuyUrl = json['vip_buy_url']; + cloudauthBuyUrl = json['cloudauth_buy_url']; + shopList = json['shopList']; + } + + Map toJson() { + final Map data = {}; + data['sms_buy_url'] = smsBuyUrl; + data['email_buy_url'] = emailBuyUrl; + data['vip_buy_url'] = vipBuyUrl; + data['cloudauth_buy_url'] = cloudauthBuyUrl; + data['shopList'] = shopList; + return data; + } +} diff --git a/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_logic.dart b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_logic.dart new file mode 100644 index 00000000..15f1cef6 --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_logic.dart @@ -0,0 +1,122 @@ +import 'dart:convert'; + +import 'package:fluwx/fluwx.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/app_settings/app_settings.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart'; +import 'package:star_lock/network/api_repository.dart'; +import 'package:star_lock/tools/baseGetXController.dart'; +import 'package:star_lock/tools/pay/wx_pay_tool.dart'; +import 'package:star_lock/webview/webview_logic.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class AdvancedFeaturesWebLogic extends BaseGetXController { + late AdvancedFeaturesWebState state; + + AdvancedFeaturesWebLogic({required bool allowReturn}) + : state = AdvancedFeaturesWebState(allowReturn: allowReturn); + + //获取商城跳转地址 + Future getVipBuyURLRequest() async { + AdvancedFeaturesWebEntity entity = + await ApiRepository.to.getServicePackageBuyUrl(); + if (entity.errorCode!.codeIsSuccessful) { + state.vipBuyUrl.value = entity.data!.shopList!; + state.mallWebView.setNavigationDelegate( + NavigationDelegate( + onProgress: (int progress) { + // Update loading bar. + state.webProgress.value = progress / 100; + }, + onPageStarted: (String url) { + state.webProgress.value = 0.0; + }, + onPageFinished: (String url) { + state.webProgress.value = 1.0; + }, + onWebResourceError: (WebResourceError error) {}, + onNavigationRequest: (NavigationRequest request) async { + //路由跳转逻辑 + if (WebViewLogic.judgePaySchemes(request.url)) { + await WebViewLogic.runScheme(request.url); + return NavigationDecision.prevent; + } + return NavigationDecision.navigate; + }, + ), + ); + state.mallWebView.loadRequest(Uri.parse(state.vipBuyUrl.value)); + // FlutterBridge.postMessage({action:'',data:'{}',callFun:'回调给js的方法'}) + state.mallWebView.addJavaScriptChannel( + "FlutterBridge", + onMessageReceived: (JavaScriptMessage message) async { + flutterBridge(message); + }, + ); + // onMessageReceived + } + } + + //监听webview的调用 + Future flutterBridge(JavaScriptMessage message) async { + final dynamic obj = jsonDecode(message.message); + AppLog.log(obj); + if (obj is! Map && obj['action'] is String) { + return; + } + String action = obj['action']; + dynamic data = obj['data']; + String? callFun = obj['callFun']; + switch (action) { + case 'WechatPayParams': + //微信支付 + wxPay(data, callFun); + break; + } + } + + //微信支付 + Future wxPay(dynamic data, String? callFun) async { + WxPayTool.pay(WxPayTool.mapToPayment(data), (response) { + if (response is WeChatPaymentResponse) { + Map data = { + 'type': response.type, + 'extData': response.extData, + 'errCode': response.errCode, + 'errStr': response.errStr, + }; + state.mallWebView.runJavaScript( + 'window.$callFun(`${json.encode(data)}`)', + ); + } + }); + } + + //判断webview 是否可以有路由可以回退,无则退出当前页面 + Future canGoBack(bool didPop) async { + bool canGoBack = await state.mallWebView.canGoBack(); + if (canGoBack) { + await state.mallWebView.goBack(); + } else { + if (state.allowReturn) Get.back(); + } + return false; + } + + @override + Future onReady() async { + super.onReady(); + } + + @override + void onInit() { + super.onInit(); + getVipBuyURLRequest(); + } + + @override + void onClose() { + super.onClose(); + } +} diff --git a/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_page.dart b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_page.dart new file mode 100644 index 00000000..522fd08c --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_page.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_logic.dart'; +import 'package:star_lock/tools/titleAppBar.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class AdvancedFeaturesWebPage extends StatefulWidget { + AdvancedFeaturesWebPage( + {Key? key, this.showAppBar = true, this.allowReturn = true}) + : super(key: key); + bool showAppBar; + bool allowReturn; + + @override + State createState() => + _AdvancedFeaturesWebPageState(); +} + +class _AdvancedFeaturesWebPageState extends State { + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return GetBuilder( + init: AdvancedFeaturesWebLogic(allowReturn: widget.allowReturn), + builder: (AdvancedFeaturesWebLogic logic) { + return PopScope( + onPopInvoked: logic.canGoBack, + canPop: false, + child: Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: const Color(0xFFFFFFFF), + appBar: widget.showAppBar + ? TitleAppBar( + barTitle: '高级功能', + haveBack: true, + backgroundColor: AppColors.mainColor, + ) + : null, + body: Obx(() => Column( + children: [ + Container( + padding: EdgeInsets.only(bottom: 10.w), + child: LinearProgressIndicator( + value: logic.state.webProgress.value, + backgroundColor: Colors.grey, + valueColor: AlwaysStoppedAnimation( + AppColors.mainColor), + ), + ), + Expanded( + child: WebViewWidget( + controller: logic.state.mallWebView), + ), + ], + ))), + ); + }); + } +} diff --git a/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart new file mode 100644 index 00000000..aa4d5725 --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_state.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/webview/webview_logic.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +class AdvancedFeaturesWebState { + AdvancedFeaturesWebState({required this.allowReturn}); + + var vipBuyUrl = "".obs; + var webProgress = 0.0.obs; + bool allowReturn; + late WebViewController mallWebView = initWebViewController(); + + //初始化webView控制器 + WebViewController initWebViewController() { + WebViewController allWebView = WebViewController(); + allWebView.setJavaScriptMode(JavaScriptMode.unrestricted); + allWebView.setBackgroundColor(Colors.white); + allWebView.setUserAgent(WebViewLogic.userAgent); + return allWebView; + } +} diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart new file mode 100644 index 00000000..deb2c20d --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart @@ -0,0 +1,17 @@ +import 'dart:async'; + +import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_state.dart'; + +import '../../../../network/api_repository.dart'; +import '../../../../tools/baseGetXController.dart'; + +class ValueAddedServicesHighFunctionLogic extends BaseGetXController { + ValueAddedServicesHighFunctionState state = + ValueAddedServicesHighFunctionState(); + + //获取增值服务用户余量包 + Future getServiceUserPackage() async { + var entity = await ApiRepository.to.getServiceUserPackage(); + if (entity.errorCode!.codeIsSuccessful) {} + } +} diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart index 7fbbedd2..7028c33f 100644 --- a/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; -import '../../../tools/submitBtn.dart'; import '../../../tools/titleAppBar.dart'; import '../../../translations/trans_lib.dart'; @@ -18,6 +18,16 @@ class ValueAddedServicesHighFunctionPage extends StatefulWidget { class _ValueAddedServicesHighFunctionPageState extends State { + final logic = Get.put(ValueAddedServicesHighFunctionLogic()); + final state = Get.find().state; + + @override + initState() { + super.initState(); + + logic.getServiceUserPackage(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -69,7 +79,7 @@ class _ValueAddedServicesHighFunctionPageState crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "${TranslationLoader.lanKeys!.currentState!.tr}:${TranslationLoader.lanKeys!.haveNotOpened!.tr}", + "已开通".tr, style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), ), diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_state.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_state.dart new file mode 100644 index 00000000..53e39692 --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_state.dart @@ -0,0 +1 @@ +class ValueAddedServicesHighFunctionState {} diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_logic.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_logic.dart new file mode 100644 index 00000000..416130bb --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_logic.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:star_lock/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_state.dart'; + +import '../../../../network/api_repository.dart'; +import '../../../../tools/baseGetXController.dart'; + +class ValueAddedServicesListLogic extends BaseGetXController { + ValueAddedServicesListState state = ValueAddedServicesListState(); + + //增值服务套餐购包链接 + Future getServicePackageBuyUrl() async { + var entity = await ApiRepository.to.getServicePackageBuyUrl(); + if (entity.errorCode!.codeIsSuccessful) {} + } +} diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_page.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_page.dart index 6148c4ac..d78696a0 100644 --- a/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_page.dart +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_page.dart @@ -2,6 +2,8 @@ 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 'package:star_lock/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_logic.dart'; +import 'package:star_lock/tools/storage.dart'; import '../../../appRouters.dart'; import '../../../app_settings/app_colors.dart'; @@ -18,6 +20,16 @@ class ValueAddedServicesListPage extends StatefulWidget { class _ValueAddedServicesPageListState extends State { + final logic = Get.put(ValueAddedServicesListLogic()); + final state = Get.find().state; + + @override + void initState() { + super.initState(); + + logic.getServicePackageBuyUrl(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -43,14 +55,20 @@ class _ValueAddedServicesPageListState // arguments: 2); // }), _valueAddedServicesItem( - Image.asset('images/mine/icon_mine_valueAddedServices_realName.png'), + Image.asset( + 'images/mine/icon_mine_valueAddedServices_realName.png'), TranslationLoader.lanKeys!.realNameAuthentication!.tr, () { Get.toNamed(Routers.valueAddedServicesRealNamePage); }), _valueAddedServicesItem( Image.asset('images/mine/icon_mine_valueAddedServices_vip.png'), - TranslationLoader.lanKeys!.advancedFunction!.tr, () { - Get.toNamed(Routers.valueAddedServicesHighFunctionPage); + TranslationLoader.lanKeys!.advancedFunction!.tr, () async { + var isVip = await Storage.getBool(saveIsVip); + if (isVip == null || !isVip) { + Get.toNamed(Routers.advancedFeaturesWebPage); + } else { + Get.toNamed(Routers.valueAddedServicesHighFunctionPage); + } }), // _valueAddedServicesItem( // Image.asset('images/mine/icon_mine_valueAddedServices_push.png'), @@ -67,12 +85,12 @@ class _ValueAddedServicesPageListState Image.asset( 'images/mine/icon_mine_valueAddedServices_storage.png'), TranslationLoader.lanKeys!.recordsRetention!.tr, () { - EasyLoading.showToast("功能暂未开放",duration: 2000.milliseconds); + EasyLoading.showToast("功能暂未开放", duration: 2000.milliseconds); }), _valueAddedServicesItem( Image.asset('images/mine/icon_mine_valueAddedServices_vip.png'), '可视对讲', () { - EasyLoading.showToast("功能暂未开放",duration: 2000.milliseconds); + EasyLoading.showToast("功能暂未开放", duration: 2000.milliseconds); }), _valueAddedServicesItem( Text( @@ -83,7 +101,7 @@ class _ValueAddedServicesPageListState fontWeight: FontWeight.w600), ), "Amazon Alexa", () { - EasyLoading.showToast("功能暂未开放",duration: 2000.milliseconds); + EasyLoading.showToast("功能暂未开放", duration: 2000.milliseconds); }), _valueAddedServicesItem( Text( @@ -94,7 +112,7 @@ class _ValueAddedServicesPageListState fontWeight: FontWeight.w600), ), "Google Home", () { - EasyLoading.showToast("功能暂未开放",duration: 2000.milliseconds); + EasyLoading.showToast("功能暂未开放", duration: 2000.milliseconds); }), ], ), diff --git a/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_state.dart b/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_state.dart new file mode 100644 index 00000000..fffad321 --- /dev/null +++ b/star_lock/lib/mine/valueAddedServices/valueAddedServicesList/valueAddedServicesList_state.dart @@ -0,0 +1 @@ +class ValueAddedServicesListState {} diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 87a56aba..a34d4df9 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -220,7 +220,11 @@ abstract class Api { final String getBuyRecordListURL = '/v2/service/getBuyRecordList'; //获取购买记录列表 + final String getServicePackageURL = '/v2/service/getPackageUrl'; //增值服务套餐购包链接 + final String getUseRecordListURL = '/v2/service/getUseRecordList'; //获取使用记录列表 final String getlockCloudStorageListURL = '/lockCloudStorage/list'; //获取云存列表 final String deleteLockCloudStorageURL = '/lockCloudStorage/delete'; //删除云存 + final String getServiceUserPackageURL = + '/v2/service/getUserPackage'; //获取增值服务用户余量包 } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 1428c012..1688a34a 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -1989,6 +1989,14 @@ class ApiProvider extends BaseProvider { 'pageNo': pageNo, 'pageSize': pageSize, })); + + // 增值服务套餐购包链接 + Future getServicePackageBuyUrl() => + post(getServicePackageURL.toUrl, jsonEncode({})); + + // 获取增值服务用户余量包 + Future getServiceUserPackage() => + post(getServiceUserPackageURL.toUrl, jsonEncode({})); } extension ExtensionString on String { diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index 13fc6263..b6473b10 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -26,6 +26,7 @@ import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireFinge import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageList/keyListByUserEntity.dart'; import 'package:star_lock/mine/mineSet/mineSet/userSettingInfoEntity.dart'; import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart'; +import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRealName/face_authentication_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/buy_record_list_entity.dart'; import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/use_record_list_entity.dart'; @@ -2015,4 +2016,16 @@ class ApiRepository { final res = await apiProvider.getUseRecordList(type, pageNo, pageSize); return UseRecordListEntity.fromJson(res.body); } + + // 增值服务套餐购包链接 + Future getServicePackageBuyUrl() async { + final res = await apiProvider.getServicePackageBuyUrl(); + return AdvancedFeaturesWebEntity.fromJson(res.body); + } + + // 获取增值服务用户余量包 + Future getServiceUserPackage() async { + final res = await apiProvider.getServiceUserPackage(); + return AdvancedFeaturesWebEntity.fromJson(res.body); + } } diff --git a/star_lock/lib/tools/storage.dart b/star_lock/lib/tools/storage.dart index 6ecf6d19..f5465f51 100644 --- a/star_lock/lib/tools/storage.dart +++ b/star_lock/lib/tools/storage.dart @@ -22,6 +22,7 @@ const isAgreeCamera = "isAgreeCamera"; //是否同意获取相机/相册弹窗 const isShowUpdateVersion = "isShowUpdateVersion"; //是否更新弹窗 const saveLockAlias = "saveLockAlias"; //锁别名 const pushDeviceID = 'pushDeviceID'; //推送设备ID +const saveIsVip = "saveIsVip"; //是否是VIP const saveUserLoginData = "userLoginData"; const saveLockMainListData = "lockMainListData"; @@ -162,7 +163,7 @@ class Storage { static Future getMobile() async { LoginData? loginData = await getLoginData(); String? mobile = loginData!.mobile; - return mobile??''; + return mobile ?? ''; } static Future getEmail() async { @@ -205,9 +206,9 @@ class Storage { LockListInfoGroupEntity? lockListInfoGroupEntity; final data = await Storage.getString(saveLockMainListData); if (data != null && data.isNotEmpty) { - lockListInfoGroupEntity = LockListInfoGroupEntity.fromJson(jsonDecode(data)); + lockListInfoGroupEntity = + LockListInfoGroupEntity.fromJson(jsonDecode(data)); } return lockListInfoGroupEntity; } - }