diff --git a/lib/constants/api.dart b/lib/constants/api.dart index 98c035fd..36b3c484 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -272,6 +272,10 @@ class _Manager { ///app 新版装修:申请完工检查 String get applyCompleteRenovation => '/user/userDecorationNew/applicationCompletion'; + + ///门禁二维码:app获取设备二维码 + String get getDoorQrCode => '/user/doorQRCode/getQrCode'; + } class _Community { diff --git a/lib/constants/application_objects.dart b/lib/constants/application_objects.dart index 4150d408..2893fc70 100644 --- a/lib/constants/application_objects.dart +++ b/lib/constants/application_objects.dart @@ -1,5 +1,6 @@ // import 'package:aku_community/widget/bee_scaffold.dart'; +import 'package:aku_community/pages/opening_code_page/opening_code_page.dart'; import 'package:aku_community/pages/renovation_manage/new_renovation/new_renovation_page.dart'; import 'package:flutter/material.dart'; @@ -65,7 +66,7 @@ class AO { List appObjects = [ // if (false) AO('一键开门', R.ASSETS_APPLICATIONS_OEPN_DOOR_PNG, () => Scaffold()), - // AO('开门码', R.ASSETS_APPLICATIONS_DOOR_CODE_PNG, () => OpeningCodePage()), + AO('开门码', R.ASSETS_APPLICATIONS_DOOR_CODE_PNG, () => OpeningCodePage()), AO('访客邀请', R.ASSETS_APPLICATIONS_VISITOR_INVITE_PNG, () => VisitorAccessPage()), AO('报事报修', R.ASSETS_APPLICATIONS_FIX_PNG, () => FixedSubmitPage()), @@ -148,7 +149,7 @@ List get recommendApp => _recommendApp.map((e) => AO.fromRaw(e)).toList(); ///智慧管家 original value List _smartManagerApp = [ // if (false) '一键开门', - // '开门码', + '开门码', '访客邀请', '报事报修', '生活缴费', diff --git a/lib/pages/opening_code_page/opening_code_page.dart b/lib/pages/opening_code_page/opening_code_page.dart index b02821f2..de01309a 100644 --- a/lib/pages/opening_code_page/opening_code_page.dart +++ b/lib/pages/opening_code_page/opening_code_page.dart @@ -1,5 +1,13 @@ +import 'dart:async'; + +import 'package:aku_community/constants/api.dart'; +import 'package:aku_community/utils/network/base_model.dart'; +import 'package:aku_community/utils/network/net_util.dart'; +import 'package:bot_toast/bot_toast.dart'; +import 'package:flustars/flustars.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; import 'package:flutter_icons/flutter_icons.dart'; import 'package:qr_flutter/qr_flutter.dart'; @@ -15,92 +23,153 @@ class OpeningCodePage extends StatefulWidget { } class _OpeningCodePageState extends State { + bool _onload = true; + late String _qrCode; + late bool _overDate; + late EasyRefreshController _refreshController; + Timer? _overDateTimer; + @override + void initState() { + super.initState(); + _refreshController = EasyRefreshController(); + } + + @override + void dispose() { + _refreshController.dispose(); + super.dispose(); + } + + Future getQrcode() async { + DateTime _currentTime = DateTime.now(); + BaseModel baseModel = + await NetUtil().get(API.manager.getDoorQrCode, params: { + "startTime": + DateUtil.formatDate(_currentTime, format: 'yyyy/MM/dd HH:mm:ss'), + "endTime": DateUtil.formatDate(_currentTime.add(Duration(minutes: 30)), + format: 'yyyy/MM/dd HH:mm:ss'), + }); + if ((baseModel.status ?? false) && baseModel.data != null) { + _qrCode = baseModel.data; + _onload = false; + _overDate = false; + endTimer(); + startTimer(); + setState(() {}); + } else { + BotToast.showText(text: '网络请求错误'); + } + } + + startTimer() { + _overDateTimer = Timer.periodic(Duration(minutes: 1), (timer) { + if (timer.tick >= 5) { + _overDate = true; + endTimer(); + setState(() {}); + } + }); + } + + endTimer() { + _overDateTimer?.cancel(); + _overDateTimer = null; + } + @override Widget build(BuildContext context) { return BeeScaffold( + bgColor: Colors.white, title: '开门码', - body: Container( - color: Color(0xfff9f9f9), - child: ListView( - children: [ - Container( - margin: EdgeInsets.only( - top: 70.w, - left: 32.w, - right: 32.w, - bottom: 76.w, - ), - padding: EdgeInsets.symmetric( - horizontal: 20.w, - vertical: 32.w, - ), - decoration: BoxDecoration( - color: Color(0xffffffff), - borderRadius: BorderRadius.all(Radius.circular(8.w)), - ), - height: 746.w, - width: 686.w, - child: Column( + body: EasyRefresh( + firstRefresh: true, + header: MaterialHeader(), + onRefresh: () async { + await getQrcode(); + }, + child: _onload + ? Container() + : ListView( children: [ Container( margin: EdgeInsets.only( - top: 44.w, - bottom: 32.w, - ), - height: 460.w, - width: 460.w, - child: QrImage( - padding: EdgeInsets.zero, - data: '智慧社区开门码', - size: 460.w, + top: 70.w, + left: 32.w, + right: 32.w, + bottom: 76.w, ), - ), - Container( padding: EdgeInsets.symmetric( - horizontal: 29.w, - vertical: 33.w, + horizontal: 20.w, + vertical: 32.w, ), decoration: BoxDecoration( - color: Color(0xfffffbf6), + color: Color(0xffffffff), borderRadius: BorderRadius.all(Radius.circular(8.w)), ), - width: 646.w, - height: 146.w, - child: Text( - '扫一扫,你的专属二维码,人人文明出行,路路畅通安宁,智慧社区祝您一路顺风', - maxLines: 2, - style: TextStyle( - fontSize: 28.sp, - color: Color(0xff666666), - ), + height: 746.w, + width: 686.w, + child: Column( + children: [ + Container( + margin: EdgeInsets.only( + top: 44.w, + bottom: 32.w, + ), + height: 460.w, + width: 460.w, + child: QrImage( + padding: EdgeInsets.zero, + data: _qrCode, + size: 460.w, + ), + ), + Container( + padding: EdgeInsets.symmetric( + horizontal: 29.w, + vertical: 33.w, + ), + decoration: BoxDecoration( + color: Color(0xfffffbf6), + borderRadius: + BorderRadius.all(Radius.circular(8.w)), + ), + width: 646.w, + height: 146.w, + child: Text( + '扫一扫,你的专属二维码,人人文明出行,路路畅通安宁,智慧社区祝您一路顺风', + maxLines: 2, + style: TextStyle( + fontSize: 28.sp, + color: Color(0xff666666), + ), + ), + ), + ], ), ), - ], - ), - ), - Container( - alignment: Alignment.center, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - AntDesign.checkcircleo, - color: Color(0xffffc40c), - size: 32.sp, - ), - SizedBox(width: 19.w), - Text( - '已刷新', - style: TextStyle( - fontSize: 32.sp, - color: Color(0xff999999), + Container( + alignment: Alignment.center, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + AntDesign.checkcircleo, + color: Color(0xffffc40c), + size: 32.sp, + ), + SizedBox(width: 19.w), + Text( + _overDate ? '已过期' : '已刷新', + style: TextStyle( + fontSize: 32.sp, + color: Color(0xff999999), + ), + ), + ], ), ), ], ), - ), - ], - ), ), ); }