feat:修改星星锁页面 ui

This commit is contained in:
anfe 2024-04-22 13:35:00 +08:00
parent 8534596be1
commit 74077274b6
9 changed files with 380 additions and 110 deletions

View File

@ -726,5 +726,9 @@
"微信公众号推送":"Wechat public account",
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"To open wechat to receive alarm messages, you need to pay attention to Skye Smart Lock wechat public account first, please save the QR code and use wechat to scan the Settings",
"蓝牙":"Bluetooth",
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"Access to Bluetooth permissions is required to use the location information of the add key function"
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"Access to Bluetooth permissions is required to use the location information of the add key function",
"关锁":"关锁",
"功能":"功能",
"配件":"配件"
}

View File

@ -725,7 +725,9 @@
"微信公众号推送":"微信公众号推送",
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置",
"蓝牙":"蓝牙",
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"需要访问蓝牙权限才能使用添加钥匙功能的位置信息"
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"需要访问蓝牙权限才能使用添加钥匙功能的位置信息",
"关锁":"Close Lock",
"功能":"Function",
"配件":"Parts"
}

View File

@ -727,6 +727,11 @@
"微信公众号推送":"微信公众号推送",
"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置":"开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置",
"蓝牙":"蓝牙",
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"需要访问蓝牙权限才能使用添加钥匙功能的位置信息"
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息":"需要访问蓝牙权限才能使用添加钥匙功能的位置信息",
"关锁":"关锁",
"功能":"功能",
"配件":"配件"
}

View File

@ -141,7 +141,56 @@ class _LockDetailPageState extends State<LockDetailPage>
Widget build(BuildContext context) {
state.widgetContext = context;
loadData();
return F.sw(defaultCall: () => skWidget(), xhjCall: () => xhjWidget());
}
//
Widget xhjWidget() {
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
child: Obx(() {
return Column(
children: [
SizedBox(
height: 45.h,
),
infoView(),
SizedBox(
height: 35.h,
),
labelGridView('功能'.tr, getBottomWidget()),
labelListView('配件'.tr, getAttachmentWidget()),
SizedBox(
height: 45.h,
),
Padding(
padding: EdgeInsets.only(left: 52.w, right: 52.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
buttonView('关锁'.tr, () {
if (state.openDoorBtnisUneable.value == true) {
startUnLock();
}
}),
buttonView('开锁'.tr, () {
if (state.openDoorBtnisUneable.value == true) {
startOpenLock();
}
}),
],
),
),
],
);
}),
),
);
}
//
Widget skWidget() {
return ListView(
children: [
Visibility(
@ -195,12 +244,10 @@ class _LockDetailPageState extends State<LockDetailPage>
child: PageView(
scrollDirection: Axis.horizontal,
controller: state.pageController,
// child: Row(
children: [
Obx(() => bottomWidget()),
attachmentWidget(),
],
// ),
),
)),
],
@ -227,6 +274,212 @@ class _LockDetailPageState extends State<LockDetailPage>
);
}
//
Widget buttonView(String text, VoidCallback? onPressed) {
bool openLockBtnState = state.openLockBtnState.value != 0;
return ElevatedButton(
onPressed: openLockBtnState ? null : onPressed,
style: ElevatedButton.styleFrom(
backgroundColor: openLockBtnState
? AppColors.mainBackgroundColor
: AppColors.mainColor,
shape: RoundedRectangleBorder(
//
borderRadius: BorderRadius.circular(8), //
)),
child: SizedBox(
height: 0.12.sh,
width: 0.12.sh,
child: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
text,
style: TextStyle(
color:
openLockBtnState ? AppColors.mainColor : Colors.white),
),
if (openLockBtnState)
Container(
margin: EdgeInsets.only(left: 15.w),
width: 15.r,
height: 15.r,
child: CircularProgressIndicator(
strokeWidth: 3.5,
color: AppColors.mainColor,
),
)
],
),
),
),
);
}
Widget infoView() {
return Padding(
padding: EdgeInsets.only(left: 35.w, right: 10.w),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
state.lockAlias.value,
style: TextStyle(
fontSize: 28.sp,
fontWeight: FontWeight.w400,
color: state.isOpenPassageMode.value == 1
? AppColors.openPassageModeColor
: AppColors.darkGrayTextColor),
),
SizedBox(
height: 15.h,
),
adminInfoView(center: false, max: false),
],
),
Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FlavorsImg(
child: Image.asset(
showElectricIcon(state.electricQuantity.value),
width: 30.w,
height: 24.w),
),
SizedBox(width: 2.w),
Text("${state.electricQuantity.value}%",
style: TextStyle(
fontSize: 18.sp, color: AppColors.darkGrayTextColor)),
SizedBox(width: 2.w),
FlavorsImg(
child: Icon(
Icons.info, // 使 warning
color: AppColors.mainColor, //
size: 25.w, // 30
),
),
SizedBox(width: 20.w),
],
),
SizedBox(
height: 15.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FlavorsImg(
child: Image.asset(
showElectricIcon(state.electricQuantity.value),
width: 30.w,
height: 24.w),
),
SizedBox(width: 2.w),
Text("--%",
style: TextStyle(
fontSize: 18.sp, color: AppColors.darkGrayTextColor)),
SizedBox(width: 2.w),
FlavorsImg(
child: Icon(
Icons.info, // 使 warning
color: AppColors.mainColor, //
size: 25.w, // 30
),
),
SizedBox(width: 20.w),
],
)
],
)
],
),
);
}
// GridView
Widget labelGridView(String text, List<Widget> children) {
return Column(
children: [
Align(
alignment: Alignment.topLeft,
child: Padding(
padding: EdgeInsets.only(
left: 40.w,
top: 20.h,
bottom: 20.h,
),
child: Text(text))),
SizedBox(
height: 200.h,
child: Row(
children: [
Expanded(
child: GridView.count(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
crossAxisCount: 2,
childAspectRatio: 0.7,
crossAxisSpacing: 25.h,
mainAxisSpacing: 25.w,
scrollDirection: Axis.horizontal,
children: children),
),
Padding(
padding: EdgeInsets.only(left: 0.w, right: 4.w),
child: const Icon(Icons.arrow_forward_ios_rounded),
),
],
),
),
],
);
}
// ListView
Widget labelListView(String text, List<Widget> children) {
return Column(
children: [
Align(
alignment: Alignment.topLeft,
child: Padding(
padding: EdgeInsets.only(
left: 40.w,
top: 20.h,
bottom: 20.h,
),
child: Text(text))),
SizedBox(
height: 100.h,
child: Row(
children: [
Expanded(
child: GridView.count(
padding: EdgeInsets.only(left: 15.w, right: 15.w),
crossAxisCount: 1,
childAspectRatio: 0.7,
crossAxisSpacing: 25.h,
mainAxisSpacing: 25.w,
scrollDirection: Axis.horizontal,
children: children),
),
Padding(
padding: EdgeInsets.only(left: 0.w, right: 4.w),
child: Icon(Icons.arrow_forward_ios_rounded),
),
],
),
),
],
);
}
Widget topWidget() {
return Column(
children: [
@ -421,10 +674,12 @@ class _LockDetailPageState extends State<LockDetailPage>
);
}
Widget adminInfoView({bool center = true, bool add = false}) {
Widget adminInfoView(
{bool center = true, bool max = true, bool add = false}) {
return Row(
mainAxisAlignment:
center ? MainAxisAlignment.center : MainAxisAlignment.start,
mainAxisSize: max ? MainAxisSize.max : MainAxisSize.min,
children: [
Image.asset(
'images/icon_electronicKey_admin.png',
@ -539,7 +794,7 @@ class _LockDetailPageState extends State<LockDetailPage>
return SizedBox(
width: ScreenUtil().screenWidth - 20.w,
child: GridView.count(
crossAxisCount: F.sw(defaultCall: () => 4, xhjCall: () => 3),
crossAxisCount: 4,
// childAspectRatio: 3,
crossAxisSpacing: 20.w,
mainAxisSpacing: 0.h,
@ -584,14 +839,12 @@ class _LockDetailPageState extends State<LockDetailPage>
return SizedBox(
width: ScreenUtil().screenWidth - 20.w,
child: GridView.count(
crossAxisCount: F.sw(defaultCall: () => 4, xhjCall: () => 3),
crossAxisCount: 4,
// childAspectRatio: 3,
crossAxisSpacing: 25.h,
mainAxisSpacing: 0.h,
physics: const NeverScrollableScrollPhysics(),
children: F.sw(
defaultCall: () => getBottomWidget(),
xhjCall: () => getBottomWidget().reversed.toList())),
children: getBottomWidget()),
);
}
@ -835,8 +1088,6 @@ class _LockDetailPageState extends State<LockDetailPage>
//
Widget bottomItem(String iconUrl, String name, bool openDoorBtnisUneable,
bool bottomBtnisEable, Function() onClick) {
var width = F.sw(defaultCall: () => 42.w, xhjCall: () => 63.w);
var height = F.sw(defaultCall: () => 42.h, xhjCall: () => 63.h);
return GestureDetector(
onTap: openDoorBtnisUneable
? (bottomBtnisEable
@ -852,12 +1103,13 @@ class _LockDetailPageState extends State<LockDetailPage>
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
width: width,
height: height,
width: 42.w,
height: 42.h,
child: FlavorsImg(
black: true,
child: Image.asset(iconUrl,
width: width,
height: height,
width: 42.w,
height: 42.w,
color: openDoorBtnisUneable
? (bottomBtnisEable
? AppColors.mainColor
@ -916,28 +1168,6 @@ class _LockDetailPageState extends State<LockDetailPage>
return 'images/main/icon_lockElectricLevel_5.png';
}
//
void _showFullScreenOverlay(BuildContext context) {
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (BuildContext context) {
return GestureDetector(
onTap: () {
Navigator.of(context).pop(); //
},
child: Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
color: Colors.black.withOpacity(0.5),
child: _unlockSuccessWidget(),
),
);
},
);
}
Widget _unlockSuccessWidget() {
return Stack(
alignment: Alignment.center,
@ -1026,8 +1256,6 @@ class _LockDetailPageState extends State<LockDetailPage>
@override
void dispose() {
// TODO: implement dispose
///
Get.log("LockDetailPage===dispose");
AppRouteObserver().routeObserver.unsubscribe(this);
@ -1036,7 +1264,6 @@ class _LockDetailPageState extends State<LockDetailPage>
state.replySubscription.cancel();
state.lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent!
.cancel();
if (state.animationController != null) {
state.animationController!.dispose();
state.animationController = null;

View File

@ -36,7 +36,8 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
final state = Get.find<LockMainLogic>().state;
Future<void> getHttpData() async {
LockListInfoGroupEntity? lockListInfoGroupEntity = await Storage.getLockMainListData();
LockListInfoGroupEntity? lockListInfoGroupEntity =
await Storage.getLockMainListData();
// Get.log("lockListInfoGroupEntity:${lockListInfoGroupEntity!.groupList!.length}");
if (lockListInfoGroupEntity != null) {
var localLockListInfoGroupEntity = lockListInfoGroupEntity;
@ -71,44 +72,49 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFFF5F5F5),
appBar: widget.showAppBar
? TitleAppBar(
barTitle: F.navTitle,
haveBack: false,
haveOtherLeftWidget: true,
leftWidget: Builder(
builder: (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: EasyRefreshTool(
onRefresh: () {
SchedulerBinding.instance.addPostFrameCallback((_) {
//
logic.pageNo = 1;
getHttpData();
});
},
child: getDataReturnUI(state.dataLength.value)),
);
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: (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,
);
}
return child;
}
Widget getDataReturnUI(int type) {

View File

@ -1,6 +1,9 @@
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:star_lock/main/lockMian/lockMain/lockMain_page.dart';
import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_state.dart';
import 'package:star_lock/tools/baseGetXController.dart';
@ -12,6 +15,29 @@ class LockMainXHJLogic extends BaseGetXController {
update();
}
//
void openEquipment() {
showModalBottomSheet(
context: Get.context!,
isScrollControlled: true,
backgroundColor: Colors.white,
builder: (context) {
return ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(16.r),
topRight: Radius.circular(16.r),
),
child: SizedBox(
height: Get.height * 0.7,
child: StarLockMainPage(
showAppBar: false,
showDrawer: false,
),
),
);
});
}
@override
void onReady() {
super.onReady();

View File

@ -41,14 +41,25 @@ class _StarLockMainXHJPageState extends State<StarLockMainXHJPage>
builder: (LockMainXHJLogic logic) {
return Scaffold(
backgroundColor: const Color(0xFFF5F5F5),
floatingActionButton: FloatingActionButton(
shape: const CircleBorder(),
onPressed: () {
logic.openEquipment();
},
backgroundColor: AppColors.mainColor,
tooltip: TranslationLoader.lanKeys!.device!.tr,
child: const Icon(
Icons.key,
color: AppColors.darkGrayTextColor,
),
),
body: SafeArea(
bottom: false,
child: Stack(
children: [
pageView(
widget: StarLockMainPage(
widget: LockMallPage(
showAppBar: false,
showDrawer: false,
),
logic: logic,
index: 0,
@ -60,20 +71,13 @@ class _StarLockMainXHJPageState extends State<StarLockMainXHJPage>
logic: logic,
index: 1,
),
pageView(
widget: LockMallPage(
showAppBar: false,
),
logic: logic,
index: 2,
),
pageView(
widget: MinePersonInfoPage(
showAppBar: false,
showAbout: true,
),
logic: logic,
index: 3,
index: 2,
),
],
),
@ -93,26 +97,18 @@ class _StarLockMainXHJPageState extends State<StarLockMainXHJPage>
top: false,
child: Row(
children: [
// navigationBarItem(Icons.start, '场景', false, () {
// logic.setIndex(0);
// }),
navigationBarItem(Icons.devices,
TranslationLoader.lanKeys!.device!.tr, logic, 0, () {
navigationBarItem(Icons.shopping_cart, '商城'.tr, logic, 0,
() {
logic.setIndex(0);
}),
navigationBarItem(Icons.message,
TranslationLoader.lanKeys!.message!.tr, logic, 1, () {
logic.setIndex(1);
}),
navigationBarItem(Icons.shopping_cart, '商城'.tr, logic, 2,
navigationBarItem(Icons.account_circle, '我的'.tr, logic, 2,
() {
logic.setIndex(2);
}),
navigationBarItem(Icons.account_circle, '我的'.tr, logic, 3,
() {
logic.setIndex(3);
}),
],
),
),

View File

@ -4,18 +4,21 @@ import 'package:flutter/material.dart';
import 'package:star_lock/flavors.dart';
class FlavorsImg extends StatelessWidget {
FlavorsImg({required this.child, key});
FlavorsImg({required this.child, this.black = false, key});
bool black;
Widget child;
ColorFilterGenerator myFilter = ColorFilterGenerator(name: "xhj", filters: [
// ColorFilterAddons.addictiveColor(1, 22, 93),
ColorFilterAddons.addictiveColor(1, 22, 93),
// ColorFilterAddons.grayscale(),z
]);
ColorFilterGenerator myFilter =
ColorFilterGenerator(name: "xhj", filters: []);
@override
Widget build(BuildContext context) {
myFilter = ColorFilterGenerator(name: "xhj", filters: [
black
? ColorFilterAddons.addictiveColor(-255, -255, -255)
: ColorFilterAddons.addictiveColor(1, 22, 93),
]);
if (F.appFlavor != Flavor.xhj) {
return child;
}

View File

@ -34,8 +34,9 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# 1.0.28+2024041702打包给欧阳回归测试
# 1.0.27+2024041702 打包星星锁提审华为
# 1.0.27+2024041703 打包星星锁提审ios
# 1.0.27+2024042204 打包星星锁提审ios与 android
version: 1.0.27+2024041803
version: 1.0.27+2024042204
environment:
sdk: '>=2.12.0 <3.0.0'