281 lines
8.6 KiB
Dart
Executable File
281 lines
8.6 KiB
Dart
Executable File
|
||
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;
|
||
}
|