app-starlock/lib/main/lockMian/lockMain/lockMain_page.dart
2024-10-19 09:38:57 +08:00

281 lines
8.6 KiB
Dart
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<StarLockMainPage> createState() => _StarLockMainPageState();
}
class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget, AutomaticKeepAliveClientMixin, WidgetsBindingObserver {
final LockMainLogic logic = Get.put(LockMainLogic());
final LockMainState state = Get.find<LockMainLogic>().state;
Future<void> 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<LockMainLogic>(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: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
height: 160.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
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<RefreshLockListInfoDataEvent>()
.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;
}