app-starlock/lib/main/lockMian/lockMain/lockMain_page.dart

325 lines
19 KiB
Dart
Raw Normal View History

import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/services.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';
2024-04-28 11:38:11 +08:00
import 'package:star_lock/main/lockMian/lockList/lockList_xhj_page.dart';
2024-06-07 11:39:08 +08:00
import 'package:star_lock/main/lockMian/lockMain/lockMain_state.dart';
2024-12-23 17:13:32 +08:00
import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart';
import 'package:star_lock/talk/startChart/proto/test.pb.dart';
2024-12-12 16:29:41 +08:00
import 'package:star_lock/talk/startChart/start_chart_manage.dart';
2023-11-01 17:28:59 +08:00
import 'package:star_lock/tools/noData.dart';
import 'package:star_lock/tools/submitBtn.dart';
import '../../../appRouters.dart';
import '../../../baseWidget.dart';
2024-03-06 19:12:58 +08:00
import '../../../flavors.dart';
import '../../../mine/mine/starLockMine_page.dart';
import '../../../tools/EasyRefreshTool.dart';
import '../../../tools/eventBusEventManage.dart';
2023-10-17 15:49:09 +08:00
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 {
2024-04-15 14:09:23 +08:00
StarLockMainPage({Key? key, this.showAppBar = true, this.showDrawer = true})
: super(key: key);
bool showAppBar;
bool showDrawer;
@override
State<StarLockMainPage> createState() => _StarLockMainPageState();
}
2024-12-12 16:29:41 +08:00
class _StarLockMainPageState extends State<StarLockMainPage>
with BaseWidget, AutomaticKeepAliveClientMixin, WidgetsBindingObserver {
2024-06-07 11:39:08 +08:00
final LockMainLogic logic = Get.put(LockMainLogic());
final LockMainState state = Get.find<LockMainLogic>().state;
2024-05-20 16:28:11 +08:00
Future<void> getHttpData(
{bool clearScanDevices = false, bool isUnShowLoading = false}) async {
2024-12-12 16:29:41 +08:00
LockListInfoGroupEntity? lockListInfoGroupEntity =
await Storage.getLockMainListData();
2024-04-17 15:35:06 +08:00
if (lockListInfoGroupEntity != null) {
await logic.loadMainDataLogic(lockListInfoGroupEntity);
setState(() {});
2024-06-07 11:39:08 +08:00
}
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;
2024-12-12 16:29:41 +08:00
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,
),
2024-04-28 18:26:31 +08:00
),
child: child,
));
return child;
});
}
Widget getDataReturnUI(int type) {
Widget returnWidget;
2024-04-28 09:05:24 +08:00
if (type == 1) {
2024-05-28 10:40:17 +08:00
type = F.sw(skyCall: () => 1, xhjCall: () => 2);
2024-04-28 09:05:24 +08:00
}
switch (type) {
case 0:
2023-11-01 17:28:59 +08:00
// 显示无数据模式
returnWidget = unHaveData();
break;
case 1:
2023-11-01 17:28:59 +08:00
// 只有一条数据
2023-10-17 16:01:06 +08:00
Storage.setBool(ifIsDemoModeOrNot, false);
returnWidget = LockDetailPage(
isOnlyOneData: true,
2024-04-15 14:09:23 +08:00
lockListInfoItemEntity:
state.lockListInfoGroupEntity.value.groupList![0].lockList![0]);
break;
case 2:
2023-11-01 17:28:59 +08:00
// 有多条数据
2023-10-17 16:01:06 +08:00
Storage.setBool(ifIsDemoModeOrNot, false);
2024-04-28 11:38:11 +08:00
returnWidget = F.sw(
2024-05-28 10:40:17 +08:00
skyCall: () => LockListPage(
2024-04-28 11:38:11 +08:00
lockListInfoGroupEntity: state.lockListInfoGroupEntity.value),
xhjCall: () => LockListXHJPage(
lockListInfoGroupEntity: state.lockListInfoGroupEntity.value));
break;
default:
returnWidget = NoData();
break;
}
return returnWidget;
}
2024-04-30 11:44:42 +08:00
//鑫泓佳背景
Widget XHJBg({required Widget child}) {
return Container();
}
Widget unHaveData() {
2023-10-25 16:18:27 +08:00
return ListView(
2024-06-07 11:39:08 +08:00
children: <Widget>[
2023-10-25 16:18:27 +08:00
Column(
mainAxisAlignment: MainAxisAlignment.center,
2024-06-07 11:39:08 +08:00
children: <Widget>[
SizedBox(
2023-10-25 16:18:27 +08:00
height: 160.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
2024-06-07 11:39:08 +08:00
children: <Widget>[
2023-10-25 16:18:27 +08:00
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(
2024-04-15 14:09:23 +08:00
context,
Routers.selectLockTypePage,
2023-10-25 16:18:27 +08:00
);
},
)),
],
),
Container(
2024-12-12 16:29:41 +08:00
padding: EdgeInsets.only(left: 30.w, right: 30.w),
2023-10-25 16:18:27 +08:00
child: Text(
2024-12-12 16:29:41 +08:00
'添加锁时,手机必须在锁旁边'.tr,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 26.sp,
// fontWeight: FontWeight.w800,
color: Colors.black),
)),
2023-10-25 16:18:27 +08:00
SizedBox(
height: 160.h,
),
// _buildImage(),
// SubmitBtn(
// btnName: '发送回声测试'.tr,
// onClick: () async {
// String assetPath = 'assets/test.jpg'; // 替换为你的图片路径
// List<int> imageBytes = await loadAssetImageAsBytes(assetPath);
// // String testStr =
// // '---天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰余成岁律吕调阳云腾致雨露结为霜金生丽水玉出昆冈剑号巨阙珠称夜光果珍李柰菜重芥姜海咸河淡鳞潜羽翔龙师火帝鸟官人皇始制文字乃服衣裳推位让国有虞陶唐吊民伐罪周发殷汤坐朝问道垂拱平章爱育黎首臣伏戎羌遐迩体率宾归王鳴鳳翔兮神靈應和炫耀光芒照灼穹蒼迤邐岷峨嶢峻崢巍懿承緒劬勞育秩延佚賡孳蕃鑑識祗崇乾坤纘宵旰卿芮詒朔皎琲犂檄圮黯馭燎竈硎洮蠟胝攢囤嶇葺錡堯羲冕箕翬騏闡燮鸞蓊枘橐榘稟泗沂涖浹涔浣淇漱瀋潢瀾沚澮澆潦瀦瀌瀹灧炅焯燠燋爨熠焜煆烜燴炻熛燧牝牯犛犴牖牒疰疴痀癜痱癃皞皎盂盰盱盻眚眵瞋瞑瞷矙矧矬矰矞砟砉砥砣硇磑磲硤硭礌礞礡祀祚祜祧祼祺禋禡秭秣稃稞稹稷穈穄窀窆窠窸笄筇筌筅筮箦篑篯簟籀籝糅糗紵紽紾綃綈綬綣緜縞縰縻縴繢繇繙罟罾羝羶羸羼翊翕翥翡翳翽耖耜耠耱耦耧耩耨耬耵耶胂胼胬脘腽膦臢臬臾舂舄舡舸艋艏艟艤艚艨艪艭艴芏芊苣苴苕茌茱荄荃莛莪莶菰萁菸菽萸葶蒯蓍蓐蓬蓼蔌蔪蕈蕖蕙蕺蕻薷藦藨藭蘅蘧蘼虍虔虬虮虰虺虻蚨蚋蚱蛏蛘蜊蜍蜉蜣蜥蜩蜴蜱蜮蜾蝣蝤蝥螓螯螨蟒蟑蟛蠊蠋蠛蠡蠹衄衒衢衾袢袷裎裥裨裾褊褙褚褡褰褶襁襦襻觇觋觖觫觿訇訑訾詑詈詟詹誊誨誥誦誨諉諛謏謦譊譖譟譬譯譴讴讵讷诐诪诮诰诳诶谂谄谌谏谑谟谡谥谧谮谯谳谵豇豉豕豚豳豸貂貊貔賑賚賡贐赍赑赗赪赭赳趑趔趱趿跂跏跎跖跗跣跹跽踆踔踝踟踬踮踯蹀蹅蹇蹉蹐蹙蹦蹩躅躐躔躜躞軎軑軔軛軫軬軺輀輅輇輈輐輗輢輦輭輶轋轘轜辀辂辒辚辩迓迕迤迨迮逄逋逑逖逯遄遘遑遴遽邂邈邋邙邡邴邳邶郅郇郛郡郾鄌鄑鄘鄜鄞鄢鄣鄯鄹酃酆酈酖酗酘酢酤酴酹酽酾酾醅醊醑醚醢醪醭醮醯醵醴醶釃釅釐釜釡釴釸釾鉅鈦鈍鈹鈾鈿鉦鉬鉮鉻鉿銎銋銖銩銫銮銲鋈鋋鋌鋮鋯鋹鋻錎錡錣錤鍉鍐鍬鍱鍾鎏鎑鎒鎰鎵鎸鎿鏊鏖鏞鏟鏸鏹鏺鏽鐃鐋鐔鐛鐠鐣鐦鐭鐮鐯鐳鐴鐵鐼鐿鑌鑒鑔鑕鑞鑢鑬鑰鑱鑲鑴鑽鑾鑿钁钆钇钋钍钏钔钗钜钯钴钷钹钺钼钽钿铄铈铊铍铐铖铗铘铙铚铠铨铪铬铮铰铹铼铿锃锆锊锍锎锏锒锓锔锖锗锘锞锟锢锩锫锬锭锯锴锶锷锸锺锼锾镂镄镅镆镉镎镏镒镔镖镙镛镞镡镢镤镩镪镫镬镭镮镯镰镱镲镳镴镶镸长門閃閔閘閡闅闈闑闒闓闔闛闞闠闤闥闦闬闿阂阃阄阆阇阘阛阝队阡阯阱阪阽陀陂陉陔陘陞陟陧陬陲陴陶隃隋隍隒隓隗隦隰隱隳隵隶隽隿雎雋雐雚雝雟雤雩雯雱雿霈霅霌霎霏霗霙霛霝霡霣霤霧靂靅靆靉靎靏靐靕靗靛靡靺靻靽鞀鞉鞎鞑鞔鞖鞚鞝鞡鞤鞧鞨鞫鞬鞮鞯鞳鞴韁韃韈韉韋韐韒韓韗韙韝韟韢韡韣韦韧韨韩韪韫韬韭韮韯韲音頍頏頔頖頞頟頤頦頬頰頲頴頵頹頽頿顃顅顈顊顋顒顕顗顛顝顟顤顪顫顬顮顰顱顲顳顴页顶顷顸颃预颋颌颎颏颐频颓颔颕颙颖颛颟颡颢颣颤颥颦颧風颮颯颰颱颳颶颷颸颹颻颼颾飁飆飇飉飋飏飐飔飗飘飙飚飛飜飝飛飜飝飛飜飝飛飜飝雊霺霿靁靟鞲韞韭頫顴颿飌飡馺駃騑騜髐鬃鰩鳯鷊黴在古老的东方有一座美丽的城市名为锦绣锦绣城四季如春风景秀丽是人们心中的理想之地城中有一条清澈见底的小河河水潺潺流过滋养着两岸的花草树木河边有一座古老的石桥桥上雕刻着精美的图案见证了无数过往行人锦绣城的居民勤劳善良他们日出而作日落而息过着简单而幸福的生活城中有一位智者名叫慧心慧心先生博学多才深受人们的尊敬他常常在河边的亭子里给孩子们讲述历史故事传授知识和智慧孩子们围坐在他身边听得津津有味仿佛置身于一个个奇妙的世界在锦绣城的北边有一片茂密的森林森林里生活着各种各样的动物有活泼可爱的猴子它们在树上跳跃嬉戏有威武雄壮的
//
// // List<int> imageBytes = utf8.encode(testStr).toList();
// // List<int> imageBytes = utf8.encode(testStr).toList();
// // state.talkData.value = imageBytes;
// // setState(() {});
// String toPeerId =
// '2vzXdjdzipJBpWpJxhiRzCFXrDKk54t3YJ7EjYPSRuij';
// StartChartManage()
// .sendEchoMessage(payload: imageBytes, toPeerId: toPeerId);
// },
// ),
if (F.isLite)
Container()
else
SubmitBtn(
btnName: '演示模式'.tr,
onClick: () {
Get.toNamed(Routers.demoModeLockDetailPage);
},
)
],
),
],
);
}
late StreamSubscription _teamEvent;
2024-04-15 14:09:23 +08:00
void _initLoadDataAction() {
2024-06-07 11:39:08 +08:00
_teamEvent = eventBus
.on<RefreshLockListInfoDataEvent>()
.listen((RefreshLockListInfoDataEvent event) {
2024-04-01 16:21:46 +08:00
logic.pageNo = 1;
2024-05-20 16:28:11 +08:00
getHttpData(
clearScanDevices: event.clearScanDevices,
isUnShowLoading: event.isUnShowLoading);
});
}
Future<List<int>> loadAssetImageAsBytes(String assetPath) async {
try {
// 从资产中加载字节数据
ByteData byteData = await rootBundle.load(assetPath);
// 将 ByteData 转换为 Uint8List
Uint8List uint8List =
Uint8List.sublistView(byteData); //byteData.buffer.asUint8List();
// 返回字节数组
return uint8List.toList();
} catch (e) {
print('从资产加载图片时发生错误: $e');
rethrow;
}
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
// AppLog.log('App--->state$state');
switch (state) {
case AppLifecycleState.inactive:
2024-12-12 16:29:41 +08:00
// AppLog.log('App--->进入非活动状态');
break;
case AppLifecycleState.paused:
2024-12-12 16:29:41 +08:00
// AppLog.log('App--->进入后台');
BlueManage().disconnect();
break;
case AppLifecycleState.resumed:
// AppLog.log('App--->进入前台');
logic.pageNo = 1;
getHttpData();
break;
case AppLifecycleState.detached:
2024-12-12 16:29:41 +08:00
// AppLog.log('App--->挂起');
break;
case AppLifecycleState.hidden:
2024-12-12 16:29:41 +08:00
// AppLog.log('App--->隐藏');
break;
}
}
@override
void dispose() {
super.dispose();
_teamEvent.cancel();
}
2024-06-07 11:12:45 +08:00
@override
bool get wantKeepAlive => true;
}