import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.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/blue/blue_manage.dart'; import 'package:star_lock/main/lockMian/lockList/lockList_xhj_page.dart'; import 'package:star_lock/main/lockMian/lockMain/lockMain_state.dart'; import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/submitBtn.dart'; import '../../../appRouters.dart'; import '../../../baseWidget.dart'; import '../../../flavors.dart'; import '../../../mine/mine/starLockMine_page.dart'; import '../../../tools/EasyRefreshTool.dart'; import '../../../tools/eventBusEventManage.dart'; import '../../../tools/storage.dart'; import '../../../tools/titleAppBar.dart'; import '../../lockDetail/lockDetail/lockDetail_page.dart'; import '../entity/lockListInfo_entity.dart'; import '../lockList/lockList_page.dart'; import 'lockMain_logic.dart'; class StarLockMainPage extends StatefulWidget { StarLockMainPage({Key? key, this.showAppBar = true, this.showDrawer = true}) : super(key: key); bool showAppBar; bool showDrawer; @override State createState() => _StarLockMainPageState(); } class _StarLockMainPageState extends State with BaseWidget, AutomaticKeepAliveClientMixin, WidgetsBindingObserver { final LockMainLogic logic = Get.put(LockMainLogic()); final LockMainState state = Get.find().state; Future getHttpData( {bool clearScanDevices = false, bool isUnShowLoading = false}) async { LockListInfoGroupEntity? lockListInfoGroupEntity = await Storage.getLockMainListData(); if (lockListInfoGroupEntity != null) { await logic.loadMainDataLogic(lockListInfoGroupEntity); setState(() {}); } lockListInfoGroupEntity = (await logic.getStarLockInfo(isUnShowLoading: isUnShowLoading)).data; if (lockListInfoGroupEntity != null) { await logic.loadMainDataLogic(lockListInfoGroupEntity); setState(() {}); } if (clearScanDevices) { BlueManage().scanDevices.clear(); } } @override void initState() { super.initState(); logic.pageNo = 1; getHttpData(isUnShowLoading:true,); _initLoadDataAction(); } @override void didChangeDependencies() { super.didChangeDependencies(); } @override Widget build(BuildContext context) { return GetBuilder(builder: (LockMainLogic logic) { Widget child = EasyRefreshTool( onRefresh: () { SchedulerBinding.instance.addPostFrameCallback((_) { // 更新状态的代码 logic.pageNo = 1; getHttpData(); }); }, // child: getDataReturnUI(state.dataLength.value)); child: getDataReturnUI(state.dataLength.value)); if (widget.showAppBar || widget.showDrawer) { child = Scaffold( backgroundColor: const Color(0xFFF5F5F5), appBar: widget.showAppBar ? TitleAppBar( barTitle: F.navTitle, haveBack: false, haveOtherLeftWidget: true, leftWidget: Builder( builder: (BuildContext context) => IconButton( icon: Image.asset( 'images/main/mainLeft_menu_icon.png', color: Colors.white, width: 44.w, height: 44.w, ), onPressed: () { Scaffold.of(context).openDrawer(); }, )), backgroundColor: AppColors.mainColor, ) : null, drawer: widget.showDrawer ? Drawer( width: 1.sw / 3 * 2, child: const StarLockMinePage(), ) : null, body: child, ); } child = F.sw( skyCall: () => child, xhjCall: () => Container( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage('images/xhj_main_bg.jpg'), fit: BoxFit.cover, ), ), child: child, )); return child; }); } Widget getDataReturnUI(int type) { Widget returnWidget; if (type == 1) { type = F.sw(skyCall: () => 1, xhjCall: () => 2); } switch (type) { case 0: // 显示无数据模式 returnWidget = unHaveData(); break; case 1: // 只有一条数据 Storage.setBool(ifIsDemoModeOrNot, false); returnWidget = LockDetailPage( isOnlyOneData: true, lockListInfoItemEntity: state.lockListInfoGroupEntity.value.groupList![0].lockList![0]); break; case 2: // 有多条数据 Storage.setBool(ifIsDemoModeOrNot, false); returnWidget = F.sw( skyCall: () => LockListPage( lockListInfoGroupEntity: state.lockListInfoGroupEntity.value), xhjCall: () => LockListXHJPage( lockListInfoGroupEntity: state.lockListInfoGroupEntity.value)); break; default: returnWidget = NoData(); break; } return returnWidget; } //鑫泓佳背景 Widget XHJBg({required Widget child}) { return Container(); } Widget unHaveData() { return ListView( children: [ Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: 160.h, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( width: 330.w, child: InkWell( child: Padding( padding: const EdgeInsets.all(30.0), child: Image.asset( 'images/main/icon_main_unHaveLockData.png', width: 260.w, height: 260.w, ), ), onTap: () { //实现回调函数 Navigator.pushNamed( context, Routers.selectLockTypePage, ); }, )), ], ), Container( padding: EdgeInsets.only(left:30.w, right: 30.w), child: Text( '添加锁时,手机必须在锁旁边'.tr, textAlign: TextAlign.center, style: TextStyle( fontSize: 26.sp, // fontWeight: FontWeight.w800, color: Colors.black), )), SizedBox( height: 160.h, ), if (F.isLite) Container() else SubmitBtn( btnName: '演示模式'.tr, onClick: () { Get.toNamed(Routers.demoModeLockDetailPage); }, ) ], ), ], ); } late StreamSubscription _teamEvent; void _initLoadDataAction() { _teamEvent = eventBus .on() .listen((RefreshLockListInfoDataEvent event) { logic.pageNo = 1; getHttpData( clearScanDevices: event.clearScanDevices, isUnShowLoading: event.isUnShowLoading); }); } @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); // AppLog.log('App--->state:$state'); switch (state) { case AppLifecycleState.inactive: // AppLog.log('App--->进入非活动状态'); break; case AppLifecycleState.paused: // AppLog.log('App--->进入后台'); BlueManage().disconnect(); break; case AppLifecycleState.resumed: // AppLog.log('App--->进入前台'); logic.pageNo = 1; getHttpData(); break; case AppLifecycleState.detached: // AppLog.log('App--->挂起'); break; case AppLifecycleState.hidden: // AppLog.log('App--->隐藏'); break; } } @override void dispose() { super.dispose(); _teamEvent.cancel(); } @override bool get wantKeepAlive => true; }