From 9232999c0d4ac6887e29c903ade7624335905133 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 24 Jul 2023 14:36:56 +0800 Subject: [PATCH 1/4] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E6=88=91?= =?UTF-8?q?=E7=9A=84-=E8=AE=BE=E7=BD=AE-=E9=94=81=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97UI=202=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=88=91=E7=9A=84-=E8=AE=BE=E7=BD=AE-=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=AE=A1=E7=90=86=E5=91=98=E6=A8=A1=E5=9D=97UI=203?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9commonItem=E7=9A=84line=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=204=EF=BC=8C=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=9A=84Switch=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 1 + star_lock/images/lan/lan_keys.json | 1 + star_lock/images/lan/lan_zh.json | 1 + star_lock/lib/appRouters.dart | 250 +++++++++++------- star_lock/lib/app_settings/app_colors.dart | 45 ++-- .../authorizedAdmin/authorizedAdmin_page.dart | 231 +++++++++++----- .../unlockQRCode/unlockQRCode_page.dart | 36 +-- .../authorizedAdministratorListPage.dart | 152 +++++++++++ .../lockUserManageListPage.dart | 163 ++++++++++++ star_lock/lib/mine/mineSet/mineSet_page.dart | 170 ++++++++---- star_lock/lib/tools/commonItem.dart | 65 +++-- star_lock/lib/translations/lanKeyEntity.dart | 73 ++--- 12 files changed, 875 insertions(+), 313 deletions(-) create mode 100644 star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart create mode 100644 star_lock/lib/mine/mineSet/lockUserManage/lockUserManageListPage.dart diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index c7afa5e9..398e0481 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -236,6 +236,7 @@ "problemTwo":"Problem Two", "problemThree":"Problem Three", "pleaseEnterYourAnswer":"Please Enter Your Answer", + "aboutToExpire":"About to expire", "designation": "designation", "state": "State", diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index f7ea8a77..833edfed 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -236,6 +236,7 @@ "problemTwo":"problemTwo", "problemThree":"problemThree", "pleaseEnterYourAnswer":"pleaseEnterYourAnswer", + "aboutToExpire":"About to expire", "designation": "designation", "state": "state", diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index a149fc17..bd462406 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -236,6 +236,7 @@ "problemTwo":"问题二", "problemThree":"问题三", "pleaseEnterYourAnswer":"请输入你的答案", + "aboutToExpire":"即将到期", "designation": "名称", "state": "状态", diff --git a/star_lock/lib/appRouters.dart b/star_lock/lib/appRouters.dart index 4d6223ea..6b0e6cc2 100644 --- a/star_lock/lib/appRouters.dart +++ b/star_lock/lib/appRouters.dart @@ -1,5 +1,6 @@ - +import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageListPage.dart'; import 'package:star_lock/mine/mineSet/mineSet_page.dart'; import 'login/forgetPassword/starLock_forgetPassword_page.dart'; @@ -98,113 +99,154 @@ import 'mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedS import 'mine/valueAddedServices/valueAddedServicesRealName/valueAddedServicesRealName_page.dart'; import 'mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/valueAddedServicesAddSMSTemplate_page.dart'; import 'mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/valueAddedServicesListSMSTemplate_page.dart'; +import 'mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart'; import 'starLockApplication.dart'; abstract class Routers { - static const initial = '/';// 加载页 - static const starLockMain = '/StarLockMain';// 首页 - static const starLockMinePage = '/StarLockMinePage';// 我的 - static const seletLockTypePage = '/SeletLockTypePage';// 选择锁类型 - static const addLockPage = '/AddLockPage';// 选择锁类型 - static const nearbyLockPage = '/NearbyLockPage';// 附近的锁 - static const lockAddressPage = '/LockAddressPage';// 锁地址 - static const saveLockPage = '/SaveLockPage';// 保存锁 - static const lockDetailPage = '/LockDetailPage';// 锁详情 - static const electronicKeyListPage = '/ElectronicKeyListPage';// 电子钥匙列表 - static const electronicKeyDetailPage = '/ElectronicKeyDetailPage';// 电子钥匙详情 - static const electronicKeyDetailChangeDate = '/ElectronicKeyDetailChangeDate';// 修改有效期 - static const sendElectronicKeyManagePage = '/SendElectronicKeyManagePage';// 发送电子钥匙 - static const massSendElectronicKeyManagePage = '/MassSendElectronicKeyManagePage';// 群发钥匙 - static const electronicKeyPeriodValidityPage = '/ElectronicKeyPeriodValidityPage';// 电子钥匙有效期 - static const sendEmailNotificationPage = '/SendEmailNotificationPage';// 邮件通知 - static const passwordKeyListPage = '/PasswordKeyListPage';// 密码钥匙列表 - static const passwordKeyManagePage = '/PasswordKeyManagePage';// 密码钥匙 - static const passwordKeyDetailPage = '/PasswordKeyDetailPage';// 密码钥匙详情 - static const otherTypeKeyListPage = '/OtherTypeKeyListPage';// 卡、指纹、遥控钥匙列表 - static const otherTypeKeyDetailPage = '/OtherTypeKeyDetailPage';// 卡、指纹、遥控钥匙详情 - static const otherTypeKeyManagePage = '/OtherTypeKeyManagePage';// 卡、指纹、遥控钥匙添加 - static const authorizedAdminListPage = '/AuthorizedAdminListPage';// 授权管理员列表 - static const authorizedAdminDetailPage = '/AuthorizedAdminDetailPage';// 授权管理员详情 - static const authorizedAdminManagePage = '/AuthorizedAdminManagePage';// 授权管理员 - static const volumeAuthorizationLockManagePage = '/VolumeAuthorizationLockManagePage';// 批量授权锁 - static const lockOperatingRecordPage = '/LockOperatingRecordPage';// 操作记录 - static const lockSetPage = '/LockSetPage';// 锁设置 - static const basicInformationPage = '/BasicInformationPage';// 基本信息 - static const uploadElectricQuantityPage = '/UploadElectricQuantityPage';// 更新锁电量 - static const editLockNamePage = '/EditLockNamePage';// 修改锁名字 - static const lockSeletGroupingPage = '/LockSeletGroupingPage';// 锁选择分组 - static const adminOpenLockPasswordPage = '/AdminOpenLockPasswordPage';// 管理员开锁密码 - static const wirelessKeyboardPage = '/WirelessKeyboardPage';// 蓝牙键盘 - static const addWirelessKeyboardPage = '/AddWirelessKeyboardPage';// 添加蓝牙键盘 - static const addWirelessKeyboardScreenNotLightOnPage = '/AddWirelessKeyboardScreenNotLightOnPage';// 添加蓝牙键盘屏幕不亮时提示 - static const seletWirelessKeyboardPage = '/SeletWirelessKeyboardPage';// 选择蓝牙键盘 - static const doorMagneticPage = '/DoorMagneticPage';// 门磁列表 - static const addDoorMagneticPage = '/AddDoorMagneticPage';// 添加门磁 - static const nearbyDoorMagneticPage = '/NearbyDoorMagneticPage';// 附近的门磁 - static const remoteUnlockingPage = '/RemoteUnlockingPage';// 远程开锁 - static const automaticBlockingPage = '/AutomaticBlockingPage';// 自动闭锁 - static const normallyOpenModePage = '/NormallyOpenModePage';// 常开模式 - static const lockSoundSetPage = '/LockSoundSetPage';// 锁声音 - static const burglarAlarmPage = '/BurglarAlarmPage';// 防撬警报 - static const resetButtonPage = '/ResetButtonPage';// 锁重置键 - static const unlockQRCodePage = '/UnlockQRCodePage';// 开锁二维码 - static const lockTimePage = '/LockTimePage';// 锁时间 - static const diagnosePage = '/DiagnosePage';// 诊断 - static const uploadDataPage = '/UploadDataPage';// 上传数据 - static const importOtherLockDataPage = '/ImportOtherLockDataPage';// 导入其他锁数据 - static const lockEscalationPage = '/LockEscalationPage';// 锁升级 - static const markedHouseStatePage = '/MarkedHouseStatePage';// 标记房态 - static const checkingInListPage = '/CheckingInListPage';// 考勤 - static const checkingInSetPage = '/CheckingInSetPage';// 考勤设置 - static const checkingInStaffManagePage = '/CheckingInStaffManagePage';// 员工管理 - static const checkingInAddStaffPage = '/CheckingInAddStaffPage';// 添加员工 - static const checkingInSetWorkTimePage = '/CheckingInSetWorkTimePage';// 工作时间设置 - static const checkingInSetWorkdaySet = '/CheckingInSetWorkdaySet';// 工作日设置 - static const checkingInSetHolidaysPage = '/CheckingInSetHolidaysPage';// 节假日设置 - static const checkingInAddHolidaysPage = '/CheckingInAddHolidaysPage';// 添加假日 - static const checkingInDetailPage = '/CheckingInDetailPage';// 考勤详情 + static const initial = '/'; // 加载页 + static const starLockMain = '/StarLockMain'; // 首页 + static const starLockMinePage = '/StarLockMinePage'; // 我的 + static const seletLockTypePage = '/SeletLockTypePage'; // 选择锁类型 + static const addLockPage = '/AddLockPage'; // 选择锁类型 + static const nearbyLockPage = '/NearbyLockPage'; // 附近的锁 + static const lockAddressPage = '/LockAddressPage'; // 锁地址 + static const saveLockPage = '/SaveLockPage'; // 保存锁 + static const lockDetailPage = '/LockDetailPage'; // 锁详情 + static const electronicKeyListPage = '/ElectronicKeyListPage'; // 电子钥匙列表 + static const electronicKeyDetailPage = '/ElectronicKeyDetailPage'; // 电子钥匙详情 + static const electronicKeyDetailChangeDate = + '/ElectronicKeyDetailChangeDate'; // 修改有效期 + static const sendElectronicKeyManagePage = + '/SendElectronicKeyManagePage'; // 发送电子钥匙 + static const massSendElectronicKeyManagePage = + '/MassSendElectronicKeyManagePage'; // 群发钥匙 + static const electronicKeyPeriodValidityPage = + '/ElectronicKeyPeriodValidityPage'; // 电子钥匙有效期 + static const sendEmailNotificationPage = '/SendEmailNotificationPage'; // 邮件通知 + static const passwordKeyListPage = '/PasswordKeyListPage'; // 密码钥匙列表 + static const passwordKeyManagePage = '/PasswordKeyManagePage'; // 密码钥匙 + static const passwordKeyDetailPage = '/PasswordKeyDetailPage'; // 密码钥匙详情 + static const otherTypeKeyListPage = '/OtherTypeKeyListPage'; // 卡、指纹、遥控钥匙列表 + static const otherTypeKeyDetailPage = + '/OtherTypeKeyDetailPage'; // 卡、指纹、遥控钥匙详情 + static const otherTypeKeyManagePage = + '/OtherTypeKeyManagePage'; // 卡、指纹、遥控钥匙添加 + static const authorizedAdminListPage = '/AuthorizedAdminListPage'; // 授权管理员列表 + static const authorizedAdminDetailPage = + '/AuthorizedAdminDetailPage'; // 授权管理员详情 + static const authorizedAdminManagePage = + '/AuthorizedAdminManagePage'; // 授权管理员 + static const volumeAuthorizationLockManagePage = + '/VolumeAuthorizationLockManagePage'; // 批量授权锁 + static const lockOperatingRecordPage = '/LockOperatingRecordPage'; // 操作记录 + static const lockSetPage = '/LockSetPage'; // 锁设置 + static const basicInformationPage = '/BasicInformationPage'; // 基本信息 + static const uploadElectricQuantityPage = + '/UploadElectricQuantityPage'; // 更新锁电量 + static const editLockNamePage = '/EditLockNamePage'; // 修改锁名字 + static const lockSeletGroupingPage = '/LockSeletGroupingPage'; // 锁选择分组 + static const adminOpenLockPasswordPage = + '/AdminOpenLockPasswordPage'; // 管理员开锁密码 + static const wirelessKeyboardPage = '/WirelessKeyboardPage'; // 蓝牙键盘 + static const addWirelessKeyboardPage = '/AddWirelessKeyboardPage'; // 添加蓝牙键盘 + static const addWirelessKeyboardScreenNotLightOnPage = + '/AddWirelessKeyboardScreenNotLightOnPage'; // 添加蓝牙键盘屏幕不亮时提示 + static const seletWirelessKeyboardPage = + '/SeletWirelessKeyboardPage'; // 选择蓝牙键盘 + static const doorMagneticPage = '/DoorMagneticPage'; // 门磁列表 + static const addDoorMagneticPage = '/AddDoorMagneticPage'; // 添加门磁 + static const nearbyDoorMagneticPage = '/NearbyDoorMagneticPage'; // 附近的门磁 + static const remoteUnlockingPage = '/RemoteUnlockingPage'; // 远程开锁 + static const automaticBlockingPage = '/AutomaticBlockingPage'; // 自动闭锁 + static const normallyOpenModePage = '/NormallyOpenModePage'; // 常开模式 + static const lockSoundSetPage = '/LockSoundSetPage'; // 锁声音 + static const burglarAlarmPage = '/BurglarAlarmPage'; // 防撬警报 + static const resetButtonPage = '/ResetButtonPage'; // 锁重置键 + static const unlockQRCodePage = '/UnlockQRCodePage'; // 开锁二维码 + static const lockTimePage = '/LockTimePage'; // 锁时间 + static const diagnosePage = '/DiagnosePage'; // 诊断 + static const uploadDataPage = '/UploadDataPage'; // 上传数据 + static const importOtherLockDataPage = '/ImportOtherLockDataPage'; // 导入其他锁数据 + static const lockEscalationPage = '/LockEscalationPage'; // 锁升级 + static const markedHouseStatePage = '/MarkedHouseStatePage'; // 标记房态 + static const checkingInListPage = '/CheckingInListPage'; // 考勤 + static const checkingInSetPage = '/CheckingInSetPage'; // 考勤设置 + static const checkingInStaffManagePage = '/CheckingInStaffManagePage'; // 员工管理 + static const checkingInAddStaffPage = '/CheckingInAddStaffPage'; // 添加员工 + static const checkingInSetWorkTimePage = + '/CheckingInSetWorkTimePage'; // 工作时间设置 + static const checkingInSetWorkdaySet = '/CheckingInSetWorkdaySet'; // 工作日设置 + static const checkingInSetHolidaysPage = + '/CheckingInSetHolidaysPage'; // 节假日设置 + static const checkingInAddHolidaysPage = '/CheckingInAddHolidaysPage'; // 添加假日 + static const checkingInDetailPage = '/CheckingInDetailPage'; // 考勤详情 - static const mineSetPage = '/MineSetPage';// 我的设置 - static const mineMultiLanguagePage = '/MineMultiLanguagePage';// 我的设置 - static const minePersonInfoPage = '/MinePersonInfoPage';// 我的信息 - static const minePersonInfoEditNamePage = '/MinePersonInfoEditNamePage';// 我的信息编辑昵称 - static const minePersonInfoEditAccountPage = '/MinePersonInfoEditAccountPage';// 我的信息修改账号 - static const minePersonInfoEditAccountNextPage = '/MinePersonInfoEditAccountNextPage';// 我的信息修改账号下一页 - static const minePersonInfoEditIphonePage = '/MinePersonInfoEditIphonePage';// 我的信息修改手机号 - static const minePersonInfoResetPasswordPage = '/MinePersonInfoResetPasswordPage';// 我的信息重置密码 - static const minePersonInfoSetSafetyProblemPage = '/MinePersonInfoSetSafetyProblemPage';// 我的信息设置安全问题 + static const mineSetPage = '/MineSetPage'; // 我的设置 + static const mineMultiLanguagePage = '/MineMultiLanguagePage'; // 我的设置 + static const minePersonInfoPage = '/MinePersonInfoPage'; // 我的信息 + static const minePersonInfoEditNamePage = + '/MinePersonInfoEditNamePage'; // 我的信息编辑昵称 + static const minePersonInfoEditAccountPage = + '/MinePersonInfoEditAccountPage'; // 我的信息修改账号 + static const minePersonInfoEditAccountNextPage = + '/MinePersonInfoEditAccountNextPage'; // 我的信息修改账号下一页 + static const minePersonInfoEditIphonePage = + '/MinePersonInfoEditIphonePage'; // 我的信息修改手机号 + static const minePersonInfoResetPasswordPage = + '/MinePersonInfoResetPasswordPage'; // 我的信息重置密码 + static const minePersonInfoSetSafetyProblemPage = + '/MinePersonInfoSetSafetyProblemPage'; // 我的信息设置安全问题 - static const gatewayListPage = '/GatewayListPage';// 我的-网关 - static const gatewayDetailPage = '/GatewayDetailPage';// 我的-网关详情 - static const gatewayConnectionLockPage = '/GatewayConnectionLockPage';// 我的-网关网关链接的锁 - static const seletGatewayTypePage = '/SeletGatewayTypePage';// 我的-选择网关类型 - static const seletGatewayTypeNextTipPage = '/SeletGatewayTypeNextTipPage';// 我的-选择网关类型下一步 - static const seletGatewayPage = '/SeletGatewayPage';// 我的-选择网关 - static const gatewayConfigurationWifiPage = '/GatewayConfigurationWifiPage';// 我的-网关配置wifi + static const gatewayListPage = '/GatewayListPage'; // 我的-网关 + static const gatewayDetailPage = '/GatewayDetailPage'; // 我的-网关详情 + static const gatewayConnectionLockPage = + '/GatewayConnectionLockPage'; // 我的-网关网关链接的锁 + static const seletGatewayTypePage = '/SeletGatewayTypePage'; // 我的-选择网关类型 + static const seletGatewayTypeNextTipPage = + '/SeletGatewayTypeNextTipPage'; // 我的-选择网关类型下一步 + static const seletGatewayPage = '/SeletGatewayPage'; // 我的-选择网关 + static const gatewayConfigurationWifiPage = + '/GatewayConfigurationWifiPage'; // 我的-网关配置wifi - static const messageListPage = '/MessageListPage';// 我的-消息 - static const supportStaffPage = '/SupportStaffPage';// 我的-客服 - static const valueAddedServicesPage = '/ValueAddedServicesPage';// 我的-增值服务 - static const abountPage = '/AbountPage';// 我的-关于 + static const messageListPage = '/MessageListPage'; // 我的-消息 + static const supportStaffPage = '/SupportStaffPage'; // 我的-客服 + static const valueAddedServicesPage = '/ValueAddedServicesPage'; // 我的-增值服务 + static const abountPage = '/AbountPage'; // 我的-关于 - static const valueAddedServicesNoteAndEmailDetailPage = '/ValueAddedServicesNoteAndEmailDetailPage';// 增值服务-短信邮件详情 - static const valueAddedServicesRealNamePage = '/ValueAddedServicesRealNamePage';// 增值服务-实名认证详情 - static const valueAddedServicesHighFunctionPage = '/ValueAddedServicesHighFunctionPage';// 增值服务-高级功能 - static const valueAddedServicesBuyPage = '/ValueAddedServicesBuyPage';// 增值服务-购买服务 - static const valueAddedServicesListSMSTemplatePage = '/ValueAddedServicesListSMSTemplatePage';// 增值服务-短信模版列表 - static const valueAddedServicesAddSMSTemplatePage = '/valueAddedServicesAddSMSTemplatePage';// 增值服务-自定义短信模版 - static const valueAddedServicesListEmailTemplatePage = '/ValueAddedServicesListEmailTemplatePage';// 增值服务-邮箱模版列表 - static const valueAddedServicesAddEmailTemplatePage = '/ValueAddedServicesAddEmailTemplatePage';// 增值服务-自定义邮箱模版 - static const valueAddedServicesBuyAndUseRecordManagePage = '/ValueAddedServicesBuyAndUseRecordManagePage';// 增值服务-购买使用记录 + static const valueAddedServicesNoteAndEmailDetailPage = + '/ValueAddedServicesNoteAndEmailDetailPage'; // 增值服务-短信邮件详情 + static const valueAddedServicesRealNamePage = + '/ValueAddedServicesRealNamePage'; // 增值服务-实名认证详情 + static const valueAddedServicesHighFunctionPage = + '/ValueAddedServicesHighFunctionPage'; // 增值服务-高级功能 + static const valueAddedServicesBuyPage = + '/ValueAddedServicesBuyPage'; // 增值服务-购买服务 + static const valueAddedServicesListSMSTemplatePage = + '/ValueAddedServicesListSMSTemplatePage'; // 增值服务-短信模版列表 + static const valueAddedServicesAddSMSTemplatePage = + '/valueAddedServicesAddSMSTemplatePage'; // 增值服务-自定义短信模版 + static const valueAddedServicesListEmailTemplatePage = + '/ValueAddedServicesListEmailTemplatePage'; // 增值服务-邮箱模版列表 + static const valueAddedServicesAddEmailTemplatePage = + '/ValueAddedServicesAddEmailTemplatePage'; // 增值服务-自定义邮箱模版 + static const valueAddedServicesBuyAndUseRecordManagePage = + '/ValueAddedServicesBuyAndUseRecordManagePage'; // 增值服务-购买使用记录 - static const lockScreenPage = '/LockScreenPage';// 我的设置-锁屏 - static const aPPUnlockNeedMobileNetworkingLockPage = '/APPUnlockNeedMobileNetworkingLockPage';// 我的设置-app开锁时需手机连网的锁 - static const hideInvalidUnlockPermissionsPage = '/HideInvalidUnlockPermissionsPage';// 我的设置-隐藏无效开锁权限 + static const lockScreenPage = '/LockScreenPage'; // 我的设置-锁屏 + static const aPPUnlockNeedMobileNetworkingLockPage = + '/APPUnlockNeedMobileNetworkingLockPage'; // 我的设置-app开锁时需手机连网的锁 + static const hideInvalidUnlockPermissionsPage = + '/HideInvalidUnlockPermissionsPage'; // 我的设置-隐藏无效开锁权限 - static const starLockLoginPage = '/StarLockLoginPage';// 登录 - static const starLockRegisterPage = '/StarLockRegisterPage';// 注册 - static const starLockForgetPasswordPage = '/StarLockForgetPasswordPage';// 忘记密码 - static const seletCountryRegionPage = '/SeletCountryRegionPage';// 选择国家和地区 + static const lockUserManageLisPage = '/LockUserManageLisPage'; //我的设置-锁用户管理 + static const authorizedAdministratorListPage = + '/AuthorizedAdministratorListPage'; //我的设置-授权管理员 + + static const starLockLoginPage = '/StarLockLoginPage'; // 登录 + static const starLockRegisterPage = '/StarLockRegisterPage'; // 注册 + static const starLockForgetPasswordPage = + '/StarLockForgetPasswordPage'; // 忘记密码 + static const seletCountryRegionPage = '/SeletCountryRegionPage'; // 选择国家和地区 } abstract class AppRouters { @@ -424,7 +466,7 @@ abstract class AppRouters { GetPage( name: Routers.lockTimePage, page: () => const LockTimePage(), - ),// 诊断 + ), // 诊断 GetPage( name: Routers.diagnosePage, page: () => const DiagnosePage(), @@ -601,5 +643,11 @@ abstract class AppRouters { name: Routers.hideInvalidUnlockPermissionsPage, page: () => const HideInvalidUnlockPermissionsPage(), ), + GetPage( + name: Routers.authorizedAdministratorListPage, + page: () => const AuthorizedAdministratorListPage()), + GetPage( + name: Routers.lockUserManageLisPage, + page: () => const LockUserManageListListPage()) ]; -} \ No newline at end of file +} diff --git a/star_lock/lib/app_settings/app_colors.dart b/star_lock/lib/app_settings/app_colors.dart index c505b278..5901a74d 100644 --- a/star_lock/lib/app_settings/app_colors.dart +++ b/star_lock/lib/app_settings/app_colors.dart @@ -1,10 +1,8 @@ - import 'dart:ui'; import 'package:flutter/material.dart'; class AppColors { - // static Color mainColor = const Color(0xFF385DEA); static Color mainColor = const Color(0xFF4777EE); static Color mainBackgroundColor = const Color(0xFFF5F5F5); @@ -22,7 +20,6 @@ class AppColors { static Color buttonEnableTextColor = const Color(0xFFFFFFFF); static Color buttonDisableTextColor = buttonEnableTextColor.withOpacity(0.6); - static Color deleteBtnBgColor = const Color(0xFFFF495C).withOpacity(0.7); static Color touristColor = const Color(0xFFF58A22); @@ -37,20 +34,21 @@ class AppColors { static Color dialogInputBgColor = pickerItemSelectedBgColor; static Color introduceDialogBgColor = const Color(0xFF112B4C); - static Color pickerTitleTextColor = const Color(0xFF000000); static Color pickerInfoTextColor = pickerTitleTextColor.withOpacity(0.5); static Color pickerItemSelectedTextColor = const Color(0xFF0093E5); static Color pickerItemSelectedBgColor = const Color(0xFFE4E4E4); - static Color pickerItemUnselectTextColor = pickerTitleTextColor.withOpacity(0.5); + static Color pickerItemUnselectTextColor = + pickerTitleTextColor.withOpacity(0.5); static Color normalTextColor = const Color(0xFFFFFFFF); static Color inputErrorTextColor = const Color(0xFFFF6666); - static Color errorImageColor = const Color(0xFFFF495C ); + static Color errorImageColor = const Color(0xFFFF495C); static Color inputTitleTextColor = const Color(0xFFFFFFFF).withOpacity(0.6); - static Color settingItemInfoTextColor = const Color(0xFFFFFFFF).withOpacity(0.6); - static Color dividerColor = const Color(0xFFFFFFFF).withOpacity(0.6); + static Color settingItemInfoTextColor = + const Color(0xFFFFFFFF).withOpacity(0.6); + static Color dividerColor = const Color(0xFFFFFFFF).withOpacity(0.6); static Color textFieldEnableBorderColor = normalTextColor.withOpacity(0.2); static Color textFieldFocusBorderColor = normalTextColor.withOpacity(0.2); @@ -59,7 +57,6 @@ class AppColors { static Color protocolTextColor = touristColor; - static Color topTabBarSelectedBgColor = buttonEnableColor; static Color topTabBarUnselectedBgColor = buttonEnableTextColor; static Color tapTabBarSelectedTextColor = buttonEnableTextColor; @@ -71,26 +68,26 @@ class AppColors { static Color wifiDisableColor = const Color(0xFFA8A8A8); - static Color get paginationColor => const Color(0xFF01295C).withOpacity(45); - static Color get paginationActiveColor => const Color(0xFFFFFFFF).withOpacity(65); + static Color get paginationActiveColor => + const Color(0xFFFFFFFF).withOpacity(65); static Color scanPointerLineColor = Colors.blue; - static Color scanColor0 = const Color(0xFF0093E5).withOpacity(0.05); + static Color scanColor0 = const Color(0xFF0093E5).withOpacity(0.05); static Color scanColor1 = const Color(0xFF0093E5).withOpacity(0.1); static Color scanColor2 = const Color(0xFF0093E5).withOpacity(0.3); static Color scanColor3 = const Color(0xFF0093E5).withOpacity(0.5); static Color scanColor4 = const Color(0xFF0093E5).withOpacity(0.9); - static Color scanCircleCenterColor0 = Colors.blue.withOpacity(0.9); - static Color scanCircleCenterColor1 = const Color(0xffE9F3FF).withOpacity(0.8); + static Color scanCircleCenterColor0 = Colors.blue.withOpacity(0.9); + static Color scanCircleCenterColor1 = + const Color(0xffE9F3FF).withOpacity(0.8); static Color starCenterColor = const Color(0xFF0093E5); - static Color starMiddleColor = const Color.fromRGBO(255, 255, 255,1); - static Color starBorderColor = const Color.fromRGBO(255, 255, 255,0.2); - static Color starOutsideColor = const Color.fromRGBO(255, 255, 255,0.01); - + static Color starMiddleColor = const Color.fromRGBO(255, 255, 255, 1); + static Color starBorderColor = const Color.fromRGBO(255, 255, 255, 0.2); + static Color starOutsideColor = const Color.fromRGBO(255, 255, 255, 0.01); static Color workingStateInfoBgColor = const Color(0xFF20354E); @@ -98,9 +95,9 @@ class AppColors { static Color color_level_1 = const Color(0xFFFFFFFF); static Color color_level_2 = const Color(0xFFF7B500); - static Color switchTrackSelectedColor = const Color(0xFF0093E5); - static Color switchTrackUnselectedColor = const Color(0xFF5A6676).withOpacity(0.5); + static Color switchTrackUnselectedColor = + const Color(0xFF5A6676).withOpacity(0.5); static Color switchThumbColor = const Color(0xFFFFFFFF); static Color popMenuItemUnselectedBg = const Color(0xFF112B4C); @@ -108,15 +105,15 @@ class AppColors { static Color blackColor = const Color(0xFF000000); - static Color dateSelectedBgColor = const Color(0xFF0093E5); static Color dateSelectedTextColor = const Color(0xFFFFFFFF); static Color dateUnselectedTextColor = blackColor; - static Color dateUnselectedDialogBgColor = const Color(0xFFC9C9C9).withOpacity(0.5); + static Color dateUnselectedDialogBgColor = + const Color(0xFFC9C9C9).withOpacity(0.5); static Color dateUnselectedBgColor = const Color(0xFFFFFFFF); - static Color progressBgColor = const Color(0xFF022345); static Color progressValueColor = const Color(0xFF0093E5); -} \ No newline at end of file + static const greyLineColor = Color.fromRGBO(240, 240, 240, 1); //灰色分割线 +} diff --git a/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_page.dart b/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_page.dart index 9d7026dc..3eedc10f 100644 --- a/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_page.dart +++ b/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_page.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_native_contact_picker/flutter_native_contact_picker.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -30,10 +31,9 @@ class _AuthorizedAdminPageState extends State { void initState() { // TODO: implement initState super.initState(); - } - Widget indexChangeWidget(){ + Widget indexChangeWidget() { switch (int.parse(widget.type)) { case 0: { @@ -49,7 +49,7 @@ class _AuthorizedAdminPageState extends State { ); } default: - // 永久 + // 永久 return Column( children: [ keyInfoWidget(), @@ -61,45 +61,68 @@ class _AuthorizedAdminPageState extends State { } // 顶部钥匙信息widget - Widget keyInfoWidget(){ + Widget keyInfoWidget() { return Column( children: [ Container(height: 10.h), - CommonItem(leftTitel:TranslationLoader.lanKeys!.receiver!.tr, rightTitle:"", isHaveLine: true, isHaveRightWidget: true, rightWidget: getTFWidget(true, TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr)), - CommonItem(leftTitel:TranslationLoader.lanKeys!.name!.tr, rightTitle:"", isHaveRightWidget: true, rightWidget: getTFWidget(false, TranslationLoader.lanKeys!.pleaseEnter!.tr)), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.receiver!.tr, + rightTitle: "", + isHaveLine: true, + isHaveRightWidget: true, + rightWidget: getTFWidget( + true, TranslationLoader.lanKeys!.pleaseEnterNumberOrEmail!.tr)), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.name!.tr, + rightTitle: "", + isHaveRightWidget: true, + rightWidget: + getTFWidget(false, TranslationLoader.lanKeys!.pleaseEnter!.tr)), Container(height: 10.h), ], ); } // 生效失效时间 - Widget keyTimeWidget(){ + Widget keyTimeWidget() { return Column( children: [ - CommonItem(leftTitel:TranslationLoader.lanKeys!.effectiveTime!.tr, rightTitle:"2020.06.20 11:49", isHaveLine: true, isHaveDirection: true, action:(){ - // _showDatePicker(); - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.failureTime!.tr, rightTitle:"2020.06.20 11:49", isHaveDirection: true, action:(){ - // _showDatePicker(); - }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.effectiveTime!.tr, + rightTitle: "2020.06.20 11:49", + isHaveLine: true, + isHaveDirection: true, + action: () { + // _showDatePicker(); + }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.failureTime!.tr, + rightTitle: "2020.06.20 11:49", + isHaveDirection: true, + action: () { + // _showDatePicker(); + }), Container(height: 10.h), ], ); } // 实名认证 - Widget keyRealNameWidget(){ + Widget keyRealNameWidget() { return Column( children: [ - CommonItem(leftTitel:TranslationLoader.lanKeys!.realNameAuthentication!.tr, rightTitle:"", isHaveRightWidget: true, rightWidget: Container(width: 80.w, height: 50.h,child: _switch()), action:(){ - - }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.realNameAuthentication!.tr, + rightTitle: "", + isHaveRightWidget: true, + rightWidget: Container(width: 80.w, height: 50.h, child: _switch()), + action: () {}), Container(height: 10.h), ], ); } - Widget keyBottomWidget(String tipStr){ + Widget keyBottomWidget(String tipStr) { return Column( children: [ Container( @@ -107,24 +130,37 @@ class _AuthorizedAdminPageState extends State { child: Row( // crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded(child: Text(tipStr, textAlign: TextAlign.start,)), + Expanded( + child: Text( + tipStr, + textAlign: TextAlign.start, + )), ], ), ), - SubmitBtn(btnName: TranslationLoader.lanKeys!.sender!.tr, borderRadius: 20.w, margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: (){ - - } - ), + SubmitBtn( + btnName: TranslationLoader.lanKeys!.sender!.tr, + borderRadius: 20.w, + margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () {}), Container( - padding: EdgeInsets.only(right:30.w), + padding: EdgeInsets.only(right: 30.w), // color: Colors.red, child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - TextButton(onPressed: (){ - Navigator.pushNamed(context, Routers.volumeAuthorizationLockManagePage); - }, child: Text(TranslationLoader.lanKeys!.volumeAuthorizationLock!.tr, style: TextStyle(color: AppColors.mainColor, fontWeight: FontWeight.w500),)), + TextButton( + onPressed: () { + Navigator.pushNamed( + context, Routers.volumeAuthorizationLockManagePage); + }, + child: Text( + TranslationLoader.lanKeys!.volumeAuthorizationLock!.tr, + style: TextStyle( + color: AppColors.mainColor, + fontWeight: FontWeight.w500), + )), ], ), ), @@ -133,7 +169,7 @@ class _AuthorizedAdminPageState extends State { } // 发送电子钥匙成功 - Widget sendElectronicKeySucceed(){ + Widget sendElectronicKeySucceed() { return Column( children: [ Container( @@ -142,37 +178,72 @@ class _AuthorizedAdminPageState extends State { color: Colors.white, child: Column( children: [ - SizedBox(height: 30.h,), - Image.asset('images/main/icon_main_addLock.png', width: 150.w, height: 150.w, color: AppColors.mainColor,), - SizedBox(height: 20.h,), + SizedBox( + height: 30.h, + ), + Image.asset( + 'images/main/icon_main_addLock.png', + width: 150.w, + height: 150.w, + color: AppColors.mainColor, + ), + SizedBox( + height: 20.h, + ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text("发送成功",style: TextStyle(fontSize: 32.sp, color: Colors.black, fontWeight: FontWeight.w500),), + Text( + "发送成功", + style: TextStyle( + fontSize: 32.sp, + color: Colors.black, + fontWeight: FontWeight.w500), + ), ], ), ], ), ), - SizedBox(height: 20.h,), - SubmitBtn(btnName: '完成', fontSize: 28.sp, borderRadius: 20.w, margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: (){ - - }), - SubmitBtn(btnName: '邮件通知', fontSize: 28.sp, borderRadius: 20.w, margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: (){ - Navigator.pushNamed(context, Routers.sendEmailNotificationPage); - }), - SubmitBtn(btnName: '微信通知', fontSize: 28.sp, borderRadius: 20.w, margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: (){ - - }), - SubmitBtn(btnName: '标记为已入住', fontSize: 28.sp, borderRadius: 20.w, margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), onClick: (){ - - }), + SizedBox( + height: 20.h, + ), + SubmitBtn( + btnName: '完成', + fontSize: 28.sp, + borderRadius: 20.w, + margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () {}), + SubmitBtn( + btnName: '邮件通知', + fontSize: 28.sp, + borderRadius: 20.w, + margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () { + Navigator.pushNamed(context, Routers.sendEmailNotificationPage); + }), + SubmitBtn( + btnName: '微信通知', + fontSize: 28.sp, + borderRadius: 20.w, + margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () {}), + SubmitBtn( + btnName: '标记为已入住', + fontSize: 28.sp, + borderRadius: 20.w, + margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () {}), ], ); } // 接受者信息输入框 - Widget getTFWidget(bool isHaveBtn, String tfStr){ + Widget getTFWidget(bool isHaveBtn, String tfStr) { return Container( height: 50.h, width: 500.w, @@ -184,7 +255,7 @@ class _AuthorizedAdminPageState extends State { maxLines: 1, // controller: _controller, autofocus: false, - textAlign:TextAlign.end, + textAlign: TextAlign.end, decoration: InputDecoration( //输入里面输入文字内边距设置 contentPadding: const EdgeInsets.only(top: 12.0, bottom: 8.0), @@ -194,34 +265,38 @@ class _AuthorizedAdminPageState extends State { ), ), ), - SizedBox(width: 10.w,), - isHaveBtn?Container( - width: 50.w, - height: 50.w, - decoration: const BoxDecoration( - color: Colors.white, - image: DecorationImage( - image: AssetImage('images/icon_lock.png'), - fit: BoxFit.fill - ), - ), - alignment: Alignment.center, - child: InkWell( - onTap: () async { - Contact? contact = await _contactPicker.selectContact(); - setState(() { - _contact = contact!; - // print("object111111111111 ${_contact.fullName} ${_contact.phoneNumbers}"); - }); - }, - ), - ):Container() + SizedBox( + width: 10.w, + ), + isHaveBtn + ? Container( + width: 50.w, + height: 50.w, + decoration: const BoxDecoration( + color: Colors.white, + image: DecorationImage( + image: AssetImage('images/icon_lock.png'), + fit: BoxFit.fill), + ), + alignment: Alignment.center, + child: InkWell( + onTap: () async { + Contact? contact = await _contactPicker.selectContact(); + setState(() { + _contact = contact!; + // print("object111111111111 ${_contact.fullName} ${_contact.phoneNumbers}"); + }); + }, + ), + ) + : Container() ], ), ); } - Switch _switch(){ + CupertinoSwitch _switch() { + /* return Switch( value: false, onChanged: (value){ @@ -231,6 +306,18 @@ class _AuthorizedAdminPageState extends State { }); } ); + */ + bool _isOn = false; + return CupertinoSwitch( + activeColor: CupertinoColors.activeBlue, + trackColor: CupertinoColors.systemGrey5, + thumbColor: CupertinoColors.white, + value: _isOn, + onChanged: (value) { + setState(() { + _isOn = value; + }); + }, + ); } - } diff --git a/star_lock/lib/main/lockDetail/lcokSet/unlockQRCode/unlockQRCode_page.dart b/star_lock/lib/main/lockDetail/lcokSet/unlockQRCode/unlockQRCode_page.dart index 97ae4832..8b596cd2 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/unlockQRCode/unlockQRCode_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/unlockQRCode/unlockQRCode_page.dart @@ -20,8 +20,11 @@ class _UnlockQRCodePageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.burglarAlarm!.tr, haveBack:true, backgroundColor: AppColors.mainColor), - body:Column( + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.burglarAlarm!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), + body: Column( children: [ Container( padding: EdgeInsets.all(25.w), @@ -30,11 +33,11 @@ class _UnlockQRCodePageState extends State { color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(10.h)), ), - child: Text("拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边") - ), + child: Text( + "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边")), Container( width: 1.sw, - padding: EdgeInsets.only(top:50.w), + padding: EdgeInsets.only(top: 50.w), margin: EdgeInsets.only(left: 25.w, right: 25.w), decoration: BoxDecoration( color: Colors.white, @@ -47,24 +50,25 @@ class _UnlockQRCodePageState extends State { // data:'二维码', // size:300, // ), + //by Daisy ##warning QrImage(data: 'www.baidu.com', size: 300.w), - SizedBox(height: 50.w,), - SubmitBtn(btnName: TranslationLoader.lanKeys!.share!.tr, + SizedBox( + height: 50.w, + ), + SubmitBtn( + btnName: TranslationLoader.lanKeys!.share!.tr, borderRadius: 20.w, fontSize: 32.sp, width: 250.w, // margin: EdgeInsets.only(left: 03.w, right: 30.w, top: 20.w), padding: EdgeInsets.only(top: 20.w, bottom: 20.w), - onClick: () { - - } - ), - SizedBox(height: 60.w,) + onClick: () {}), + SizedBox( + height: 60.w, + ) ], - ) - ), + )), ], - ) - ); + )); } } diff --git a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart new file mode 100644 index 00000000..2827c7ba --- /dev/null +++ b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart @@ -0,0 +1,152 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../appRouters.dart'; +import '../../../../app_settings/app_colors.dart'; +import '../../../../tools/titleAppBar.dart'; +import '../../../../translations/trans_lib.dart'; + +class AuthorizedAdministratorListPage extends StatefulWidget { + const AuthorizedAdministratorListPage({Key? key}) : super(key: key); + + @override + State createState() => + _AuthorizedAdministratorListPageState(); +} + +class _AuthorizedAdministratorListPageState + extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.authorizedAdmin!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + IconButton( + icon: const Icon(Icons.add), + onPressed: () { + // 处理操作按钮的点击事件 + Navigator.pushNamed(context, Routers.authorizedAdminManagePage); + }, + ), + ], + ), + body: Column( + children: [ + _searchWidget(), + Expanded(child: _buildMainUI()), + ], + ), + ); + } + + Widget _searchWidget() { + return Container( + height: 80.h, + margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), + decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.circular(5)), + child: TextField( + //输入框一行 + maxLines: 1, + // controller: _controller, + autofocus: false, + decoration: InputDecoration( + //输入里面输入文字内边距设置 + contentPadding: const EdgeInsets.only( + top: 12.0, left: -19.0, right: -15.0, bottom: 8.0), + hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr, + //不需要输入框下划线 + border: InputBorder.none, + //左边图标设置 + icon: Padding( + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), + ), + ), + ), + ); + } + + Widget _buildMainUI() { + return ListView.builder( + itemCount: 10, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { + Navigator.pushNamed(context, Routers.authorizedAdminDetailPage); + }); + }); + } + + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { + return GestureDetector( + onTap: action, + child: Container( + height: 100.h, + margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10.w), + ), + child: Row( + children: [ + SizedBox( + width: 30.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), + ], + ), + SizedBox(height: 5.h), + Container( + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "2023.6.21 11.15 永久", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), + ], + ), + ), + SizedBox(width: 20.h), + ], + ), + ), + SizedBox(width: 20.h), + ], + ), + ), + ); + } +} diff --git a/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageListPage.dart b/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageListPage.dart new file mode 100644 index 00000000..0e1a2fb7 --- /dev/null +++ b/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageListPage.dart @@ -0,0 +1,163 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../appRouters.dart'; +import '../../../../app_settings/app_colors.dart'; +import '../../../../tools/titleAppBar.dart'; +import '../../../../translations/trans_lib.dart'; +import '../../../tools/submitBtn.dart'; + +class LockUserManageListListPage extends StatefulWidget { + const LockUserManageListListPage({Key? key}) : super(key: key); + + @override + State createState() => + _LockUserManageListListPageState(); +} + +class _LockUserManageListListPageState + extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.authorizedAdmin!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + child: Text( + TranslationLoader.lanKeys!.aboutToExpire!.tr, + style: const TextStyle(color: Colors.white), + ), + onPressed: () {}, + ), + ], + ), + body: Column( + children: [ + _searchWidget(), + Expanded(child: _buildMainUI()), + SubmitBtn( + btnName: TranslationLoader.lanKeys!.sendGroupKey!.tr, + borderRadius: 20.w, + margin: EdgeInsets.only( + left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () { + Navigator.pushNamed( + context, Routers.massSendElectronicKeyManagePage); + }), + ], + ), + ); + } + + Widget _searchWidget() { + return Container( + height: 80.h, + margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), + decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.circular(5)), + child: TextField( + //输入框一行 + maxLines: 1, + // controller: _controller, + autofocus: false, + decoration: InputDecoration( + //输入里面输入文字内边距设置 + contentPadding: const EdgeInsets.only( + top: 12.0, left: -19.0, right: -15.0, bottom: 8.0), + hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr, + //不需要输入框下划线 + border: InputBorder.none, + //左边图标设置 + icon: Padding( + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), + ), + ), + ), + ); + } + + Widget _buildMainUI() { + return ListView.builder( + itemCount: 10, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { + Navigator.pushNamed(context, Routers.authorizedAdminDetailPage); + }); + }); + } + + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { + return GestureDetector( + onTap: action, + child: Container( + height: 100.h, + margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10.w), + ), + child: Row( + children: [ + SizedBox( + width: 30.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), + ], + ), + SizedBox(height: 5.h), + Container( + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "2023.6.21 11.15 永久", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), + ], + ), + ), + SizedBox(width: 20.h), + ], + ), + ), + SizedBox(width: 20.h), + ], + ), + ), + ); + } +} diff --git a/star_lock/lib/mine/mineSet/mineSet_page.dart b/star_lock/lib/mine/mineSet/mineSet_page.dart index 5cc88b20..782a14e4 100644 --- a/star_lock/lib/mine/mineSet/mineSet_page.dart +++ b/star_lock/lib/mine/mineSet/mineSet_page.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -17,52 +18,128 @@ class MineSetPage extends StatefulWidget { } class _MineSetPageState extends State { + bool _isOn = false; + @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.moreSet!.tr, haveBack:true, backgroundColor: AppColors.mainColor), - body:Column( + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.moreSet!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), + body: Column( children: [ Expanded( child: ListView( children: [ - CommonItem(leftTitel:TranslationLoader.lanKeys!.prompTone!.tr, rightTitle:"", isHaveLine: true, isHaveRightWidget:true, rightWidget: Container(width: 80.w, height: 50.h,child: _switch())), - CommonItem(leftTitel:TranslationLoader.lanKeys!.touchUnlock!.tr, rightTitle:"", isHaveLine: true, isHaveRightWidget:true, rightWidget: Container(width: 80.w, height: 50.h,child: _switch())), - CommonItem(leftTitel:TranslationLoader.lanKeys!.pushNotification!.tr, rightTitle:"", isHaveRightWidget:true, rightWidget: Container(width: 80.w, height: 50.h,child: _switch())), - SizedBox(height: 10.h,), - CommonItem(leftTitel:TranslationLoader.lanKeys!.lockUserManagement!.tr, rightTitle:"", isHaveLine: true, isHaveDirection: true, action: (){ - - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.authorizedAdmin!.tr, rightTitle:"", isHaveLine: true, isHaveDirection: true, action: (){ - - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.lockGroup!.tr, rightTitle:"", isHaveLine: true, isHaveDirection: true, action: (){ - - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.transferSmartLock!.tr, rightTitle:"", isHaveLine: true, isHaveDirection: true, action: (){ - - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.transferGateway!.tr, rightTitle:"", isHaveDirection: true, action: (){ - - }), - SizedBox(height: 10.h,), - CommonItem(leftTitel:TranslationLoader.lanKeys!.multiLanguage!.tr, rightTitle:"简体中文", isHaveLine: true, isHaveDirection: true, action: (){ - Navigator.pushNamed(context, Routers.mineMultiLanguagePage); - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.lockScreen!.tr, rightTitle:TranslationLoader.lanKeys!.opened!.tr, isHaveLine: true, isHaveDirection: true, action: (){ - Navigator.pushNamed(context, Routers.lockScreenPage); - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.hideInvalidUnlockPermissions!.tr, rightTitle:TranslationLoader.lanKeys!.closed!.tr, isHaveLine: true, isHaveDirection: true, action: (){ - Navigator.pushNamed(context, Routers.hideInvalidUnlockPermissionsPage); - }), - CommonItem(leftTitel:TranslationLoader.lanKeys!.appUnlockRequiresMobilePhoneAccessToTheLock!.tr, rightTitle:"", isHaveLine: true, isHaveDirection: true, action: (){ - Navigator.pushNamed(context, Routers.aPPUnlockNeedMobileNetworkingLockPage); - }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.prompTone!.tr, + rightTitle: "", + isHaveLine: true, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 80.w, height: 50.h, child: _switch())), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.touchUnlock!.tr, + rightTitle: "", + isHaveLine: true, + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 80.w, height: 50.h, child: _switch())), + CommonItem( + leftTitel: + TranslationLoader.lanKeys!.pushNotification!.tr, + rightTitle: "", + isHaveRightWidget: true, + rightWidget: SizedBox( + width: 80.w, height: 50.h, child: _switch())), + SizedBox( + height: 10.h, + ), + CommonItem( + leftTitel: + TranslationLoader.lanKeys!.lockUserManagement!.tr, + rightTitle: "", + isHaveLine: true, + isHaveDirection: true, + action: () { + Navigator.pushNamed( + context, Routers.lockUserManageLisPage); + }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.authorizedAdmin!.tr, + rightTitle: "", + isHaveLine: true, + isHaveDirection: true, + action: () { + Navigator.pushNamed( + context, Routers.authorizedAdministratorListPage); + }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.lockGroup!.tr, + rightTitle: "", + isHaveLine: true, + isHaveDirection: true, + action: () {}), + CommonItem( + leftTitel: + TranslationLoader.lanKeys!.transferSmartLock!.tr, + rightTitle: "", + isHaveLine: true, + isHaveDirection: true, + action: () {}), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.transferGateway!.tr, + rightTitle: "", + isHaveDirection: true, + action: () {}), + SizedBox( + height: 10.h, + ), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.multiLanguage!.tr, + rightTitle: "简体中文", + isHaveLine: true, + isHaveDirection: true, + action: () { + Navigator.pushNamed( + context, Routers.mineMultiLanguagePage); + }), + CommonItem( + leftTitel: TranslationLoader.lanKeys!.lockScreen!.tr, + rightTitle: TranslationLoader.lanKeys!.opened!.tr, + isHaveLine: true, + isHaveDirection: true, + action: () { + Navigator.pushNamed(context, Routers.lockScreenPage); + }), + CommonItem( + leftTitel: TranslationLoader + .lanKeys!.hideInvalidUnlockPermissions!.tr, + rightTitle: TranslationLoader.lanKeys!.closed!.tr, + isHaveLine: true, + isHaveDirection: true, + action: () { + Navigator.pushNamed( + context, Routers.hideInvalidUnlockPermissionsPage); + }), + CommonItem( + leftTitel: TranslationLoader.lanKeys! + .appUnlockRequiresMobilePhoneAccessToTheLock!.tr, + rightTitle: "", + isHaveLine: true, + isHaveDirection: true, + action: () { + Navigator.pushNamed(context, + Routers.aPPUnlockNeedMobileNetworkingLockPage); + }), // CommonItem(leftTitel:TranslationLoader.lanKeys!.valueAddedServices!.tr, rightTitle:"", isHaveDirection: true, action: (){ // // }), - SizedBox(height: 10.h,), + SizedBox( + height: 10.h, + ), // CommonItem(leftTitel:TranslationLoader.lanKeys!.about!.tr, rightTitle:"", isHaveLine: true, isHaveDirection: true, action: (){ // // }), @@ -87,8 +164,7 @@ class _MineSetPageState extends State { ), // keyBottomWidget() ], - ) - ); + )); } // Widget keyBottomWidget() { @@ -123,15 +199,17 @@ class _MineSetPageState extends State { // ); // } - Switch _switch(){ - return Switch( - value: false, - onChanged: (value){ - // switchValue = !switchValue; - setState(() { - - }); - } + CupertinoSwitch _switch() { + return CupertinoSwitch( + activeColor: CupertinoColors.activeBlue, + trackColor: CupertinoColors.systemGrey5, + thumbColor: CupertinoColors.white, + value: _isOn, + onChanged: (value) { + setState(() { + _isOn = value; + }); + }, ); } } diff --git a/star_lock/lib/tools/commonItem.dart b/star_lock/lib/tools/commonItem.dart index 0693f7cd..2c2f33c4 100644 --- a/star_lock/lib/tools/commonItem.dart +++ b/star_lock/lib/tools/commonItem.dart @@ -1,6 +1,6 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; class CommonItem extends StatelessWidget { String? leftTitel; @@ -12,14 +12,17 @@ class CommonItem extends StatelessWidget { Function()? action; double? allHeight; - CommonItem({Key? key, - required this.leftTitel, - this.rightTitle, - this.allHeight = 45, - this.isHaveDirection = false, - this.isHaveLine = false, - this.isHaveRightWidget = false, - this.rightWidget, this.action}) : super(key: key); + CommonItem( + {Key? key, + required this.leftTitel, + this.rightTitle, + this.allHeight = 45, + this.isHaveDirection = false, + this.isHaveLine = false, + this.isHaveRightWidget = false, + this.rightWidget, + this.action}) + : super(key: key); @override Widget build(BuildContext context) { @@ -29,27 +32,53 @@ class CommonItem extends StatelessWidget { // mainAxisAlignment: MainAxisAlignment.center, children: [ Container( - height: allHeight??70.h, + height: allHeight ?? 70.h, color: Colors.white, - padding: EdgeInsets.only(left:20.w, right: 10.w),// , top: 20.w, bottom: 20.w + padding: EdgeInsets.only( + left: 20.w, right: 10.w), // , top: 20.w, bottom: 20.w child: Row( children: [ - SizedBox(width:20.w), - Expanded(child: Text(leftTitel!, style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500))), - SizedBox(width:20.w), + SizedBox(width: 20.w), + Expanded( + child: Text(leftTitel!, + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500))), + SizedBox(width: 20.w), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - isHaveRightWidget!?rightWidget!:Text(rightTitle!, textAlign: TextAlign.end, style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500),) + isHaveRightWidget! + ? rightWidget! + : Text( + rightTitle!, + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ) ], ), - SizedBox(width:5.w), - isHaveDirection!?Image.asset('images/icon_right.png', width: 50.w, height: 50.w,):SizedBox(width:10.w), + SizedBox(width: 5.w), + isHaveDirection! + ? Image.asset( + 'images/icon_right.png', + width: 50.w, + height: 50.w, + ) + : SizedBox(width: 10.w), // SizedBox(width:10.w), ], ), ), - isHaveLine!?Container(height: 0.5.h, color: Colors.grey,):Container() + // isHaveLine!?Container(height: 0.5.h, color: Colors.grey,):Container() + //by DaisyWu + isHaveLine! + ? Divider( + color: AppColors.greyLineColor, + indent: 20.w, + endIndent: 20.w, + height: 1, + ) + : Container() ], ), ); diff --git a/star_lock/lib/translations/lanKeyEntity.dart b/star_lock/lib/translations/lanKeyEntity.dart index dd814104..ddf9fac9 100644 --- a/star_lock/lib/translations/lanKeyEntity.dart +++ b/star_lock/lib/translations/lanKeyEntity.dart @@ -12,7 +12,6 @@ class LanKeyEntity { this.number, this.additive, this.addTime, - this.reset, this.sendKey, this.timeLimit, @@ -41,7 +40,6 @@ class LanKeyEntity { this.fridayShort, this.saturdayShort, this.sundayShort, - this.realNameAuthentication, this.sendKeyBottomTip, this.send, @@ -85,7 +83,6 @@ class LanKeyEntity { this.earlyArrivalList, this.lateList, this.hardWorkingList, - this.basicInformation, this.wirelessKeyboard, this.doorMagnetic, @@ -184,7 +181,6 @@ class LanKeyEntity { this.beLate, this.leaveEarly, this.noCardPunched, - this.lanEnglish, this.lanChinese, this.multilingual, @@ -194,7 +190,6 @@ class LanKeyEntity { this.supportStaff, this.set, this.moreServices, - this.moreSet, this.prompTone, this.touchUnlock, @@ -204,7 +199,6 @@ class LanKeyEntity { this.lockGroup, this.transferSmartLock, this.transferGateway, - this.multiLanguage, this.lockScreen, this.closed, @@ -238,7 +232,7 @@ class LanKeyEntity { this.problemTwo, this.problemThree, this.pleaseEnterYourAnswer, - + this.aboutToExpire, this.designation, this.state, this.wifiName, @@ -268,7 +262,6 @@ class LanKeyEntity { this.preferredDNS, this.alternativeDNS, this.noStaticIPIsUsed, - this.allLock, this.searchAllLockType, this.doorLock, @@ -284,7 +277,6 @@ class LanKeyEntity { this.nearbyLock, this.addSuccessfullyPleaseRename, this.whenAddingLockThePhoneMustBeNextToTheLock, - this.login, this.register, this.forgetPassword, @@ -295,20 +287,17 @@ class LanKeyEntity { this.email, this.countryAndRegion, this.selet, - this.businessCooperation, this.officialWebsite, this.computerWebVersion, this.hotelSystem, this.manualWebVersion, this.introduce, - this.note, this.mail, this.advancedFunction, this.pushMessage, this.recordsRetention, - this.smsBuyTip, this.emailBuyTip, this.currentRemainingQuantity, @@ -316,14 +305,12 @@ class LanKeyEntity { this.customSMSTemplate, this.customMailTemplate, this.record, - this.buyRealNameTip, this.buyRealNameSeletYouWantBuyTip, this.forTheFirstTime, this.onceDay, this.weekOnce, this.monthOnce, - this.currentState, this.onTrial, this.haveNotOpened, @@ -335,7 +322,6 @@ class LanKeyEntity { this.tipsForBuyingAdvancedFeatures, this.freeTrial, this.openNow, - this.buySMS, this.buyMail, this.buyRealNameAuthenticationTimes, @@ -344,7 +330,6 @@ class LanKeyEntity { this.modeOfPayment, this.alipay, this.goToPay, - this.customTemplatesTip, this.haveOpened, this.unHaveOpenedTip1, @@ -367,12 +352,10 @@ class LanKeyEntity { this.and, this.willBeReplacedWithTheActualValue, this.downloadLink, - this.lockScreenTip, this.hideInvalidUnlockPermissionsTip, this.appUnlockRequiresMobilePhoneAccessToTheLockTip, this.checkAll, - }); LanKeyEntity.fromJson(dynamic json) { @@ -520,8 +503,10 @@ class LanKeyEntity { whenScreenFlashesClickNext = json['whenScreenFlashesClickNext']; theScreenNeverFlickered = json['theScreenNeverFlickered']; enterNumberOrPressSet = json['enterNumberOrPressSet']; - theLocationOfTheSetKeyWillBeDifferent = json['theLocationOfTheSetKeyWillBeDifferent']; - pressAndHoldTheResetButtonTwoSeconds = json['pressAndHoldTheResetButtonTwoSeconds']; + theLocationOfTheSetKeyWillBeDifferent = + json['theLocationOfTheSetKeyWillBeDifferent']; + pressAndHoldTheResetButtonTwoSeconds = + json['pressAndHoldTheResetButtonTwoSeconds']; nearbyEquipment = json['nearbyEquipment']; noData = json['noData']; doorMagneticListTopTip = json['doorMagneticListTopTip']; @@ -586,12 +571,14 @@ class LanKeyEntity { closed = json['closed']; opened = json['opened']; hideInvalidUnlockPermissions = json['hideInvalidUnlockPermissions']; - appUnlockRequiresMobilePhoneAccessToTheLock = json['appUnlockRequiresMobilePhoneAccessToTheLock']; + appUnlockRequiresMobilePhoneAccessToTheLock = + json['appUnlockRequiresMobilePhoneAccessToTheLock']; valueAddedServices = json['valueAddedServices']; about = json['about']; userAgreement = json['userAgreement']; privacyPolicy = json['privacyPolicy']; - personalInformationCollectionList = json['personalInformationCollectionList']; + personalInformationCollectionList = + json['personalInformationCollectionList']; applicationPermissionDescription = json['applicationPermissionDescription']; thirdPartyInformationSharingList = json['thirdPartyInformationSharingList']; logout = json['logout']; @@ -614,6 +601,7 @@ class LanKeyEntity { problemTwo = json['problemTwo']; problemThree = json['problemThree']; pleaseEnterYourAnswer = json['pleaseEnterYourAnswer']; + aboutToExpire = json['aboutToExpire']; designation = json['designation']; state = json['state']; @@ -642,12 +630,12 @@ class LanKeyEntity { ipAddress = json['ipAddress']; subnetMask = json['subnetMask']; defaultGateway = json['defaultGateway']; - automaticallyGetTheDNSServerAddress = json['automaticallyGetTheDNSServerAddress']; + automaticallyGetTheDNSServerAddress = + json['automaticallyGetTheDNSServerAddress']; preferredDNS = json['preferredDNS']; alternativeDNS = json['alternativeDNS']; noStaticIPIsUsed = json['noStaticIPIsUsed']; - allLock = json['allLock']; searchAllLockType = json['searchAllLockType']; doorLock = json['doorLock']; @@ -662,7 +650,8 @@ class LanKeyEntity { next = json['next']; nearbyLock = json['nearbyLock']; addSuccessfullyPleaseRename = json['addSuccessfullyPleaseRename']; - whenAddingLockThePhoneMustBeNextToTheLock = json['whenAddingLockThePhoneMustBeNextToTheLock']; + whenAddingLockThePhoneMustBeNextToTheLock = + json['whenAddingLockThePhoneMustBeNextToTheLock']; login = json['login']; register = json['register']; @@ -706,7 +695,8 @@ class LanKeyEntity { currentState = json['currentState']; onTrial = json['onTrial']; haveNotOpened = json['haveNotOpened']; - advancedFeaturesAndBenefitsContent = json['advancedFeaturesAndBenefitsContent']; + advancedFeaturesAndBenefitsContent = + json['advancedFeaturesAndBenefitsContent']; smsTemplate = json['smsTemplate']; emailTemplate = json['emailTemplate']; cardIssuingtool = json['cardIssuingtool']; @@ -749,7 +739,8 @@ class LanKeyEntity { lockScreenTip = json['lockScreenTip']; hideInvalidUnlockPermissionsTip = json['hideInvalidUnlockPermissionsTip']; - appUnlockRequiresMobilePhoneAccessToTheLockTip = json['appUnlockRequiresMobilePhoneAccessToTheLockTip']; + appUnlockRequiresMobilePhoneAccessToTheLockTip = + json['appUnlockRequiresMobilePhoneAccessToTheLockTip']; checkAll = json['checkAll']; } String? starLock; @@ -990,6 +981,7 @@ class LanKeyEntity { String? problemTwo; String? problemThree; String? pleaseEnterYourAnswer; + String? aboutToExpire; String? designation; String? state; @@ -1275,8 +1267,10 @@ class LanKeyEntity { map['whenScreenFlashesClickNext'] = whenScreenFlashesClickNext; map['theScreenNeverFlickered'] = theScreenNeverFlickered; map['enterNumberOrPressSet'] = enterNumberOrPressSet; - map['theLocationOfTheSetKeyWillBeDifferent'] = theLocationOfTheSetKeyWillBeDifferent; - map['pressAndHoldTheResetButtonTwoSeconds'] = pressAndHoldTheResetButtonTwoSeconds; + map['theLocationOfTheSetKeyWillBeDifferent'] = + theLocationOfTheSetKeyWillBeDifferent; + map['pressAndHoldTheResetButtonTwoSeconds'] = + pressAndHoldTheResetButtonTwoSeconds; map['nearbyEquipment'] = nearbyEquipment; map['noData'] = noData; map['doorMagneticListTopTip'] = doorMagneticListTopTip; @@ -1337,12 +1331,14 @@ class LanKeyEntity { map['closed'] = closed; map['opened'] = opened; map['hideInvalidUnlockPermissions'] = hideInvalidUnlockPermissions; - map['appUnlockRequiresMobilePhoneAccessToTheLock'] = appUnlockRequiresMobilePhoneAccessToTheLock; + map['appUnlockRequiresMobilePhoneAccessToTheLock'] = + appUnlockRequiresMobilePhoneAccessToTheLock; map['valueAddedServices'] = valueAddedServices; map['about'] = about; map['userAgreement'] = userAgreement; map['privacyPolicy'] = privacyPolicy; - map['personalInformationCollectionList'] = personalInformationCollectionList; + map['personalInformationCollectionList'] = + personalInformationCollectionList; map['applicationPermissionDescription'] = applicationPermissionDescription; map['thirdPartyInformationSharingList'] = thirdPartyInformationSharingList; map['logout'] = logout; @@ -1366,6 +1362,7 @@ class LanKeyEntity { map['problemTwo'] = problemTwo; map['problemThree'] = problemThree; map['pleaseEnterYourAnswer'] = pleaseEnterYourAnswer; + map['aboutToExpire'] = aboutToExpire; map['designation'] = designation; map['state'] = state; @@ -1392,7 +1389,8 @@ class LanKeyEntity { map['ipAddress'] = ipAddress; map['subnetMask'] = subnetMask; map['defaultGateway'] = defaultGateway; - map['automaticallyGetTheDNSServerAddress'] = automaticallyGetTheDNSServerAddress; + map['automaticallyGetTheDNSServerAddress'] = + automaticallyGetTheDNSServerAddress; map['preferredDNS'] = preferredDNS; map['alternativeDNS'] = alternativeDNS; map['noStaticIPIsUsed'] = noStaticIPIsUsed; @@ -1411,7 +1409,8 @@ class LanKeyEntity { map['next'] = next; map['nearbyLock'] = nearbyLock; map['addSuccessfullyPleaseRename'] = addSuccessfullyPleaseRename; - map['whenAddingLockThePhoneMustBeNextToTheLock'] = whenAddingLockThePhoneMustBeNextToTheLock; + map['whenAddingLockThePhoneMustBeNextToTheLock'] = + whenAddingLockThePhoneMustBeNextToTheLock; map['login'] = login; map['register'] = register; @@ -1455,7 +1454,8 @@ class LanKeyEntity { map['currentState'] = currentState; map['onTrial'] = onTrial; map['haveNotOpened'] = haveNotOpened; - map['advancedFeaturesAndBenefitsContent'] = advancedFeaturesAndBenefitsContent; + map['advancedFeaturesAndBenefitsContent'] = + advancedFeaturesAndBenefitsContent; map['smsTemplate'] = smsTemplate; map['emailTemplate'] = emailTemplate; map['cardIssuingtool'] = cardIssuingtool; @@ -1498,9 +1498,10 @@ class LanKeyEntity { map['lockScreenTip'] = lockScreenTip; map['hideInvalidUnlockPermissionsTip'] = hideInvalidUnlockPermissionsTip; - map['appUnlockRequiresMobilePhoneAccessToTheLockTip'] = appUnlockRequiresMobilePhoneAccessToTheLockTip; + map['appUnlockRequiresMobilePhoneAccessToTheLockTip'] = + appUnlockRequiresMobilePhoneAccessToTheLockTip; map['checkAll'] = checkAll; return map; } -} \ No newline at end of file +} From 4e03e1c007961420ecd9218a525586ba1ec33e1c Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 24 Jul 2023 15:41:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E4=BF=9D=E6=8C=81=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...stratorListPage.dart => authorizedAdministratorList_page.dart} | 0 .../{lockUserManageListPage.dart => lockUserManageList_page.dart} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename star_lock/lib/mine/mineSet/authorizedAdministrator/{authorizedAdministratorListPage.dart => authorizedAdministratorList_page.dart} (100%) rename star_lock/lib/mine/mineSet/lockUserManage/{lockUserManageListPage.dart => lockUserManageList_page.dart} (100%) diff --git a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart similarity index 100% rename from star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart rename to star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart diff --git a/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageListPage.dart b/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart similarity index 100% rename from star_lock/lib/mine/mineSet/lockUserManage/lockUserManageListPage.dart rename to star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart From b1e2cf4ebd2b9bc17543053a2cbc2256744e16ee Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Tue, 25 Jul 2023 15:48:40 +0800 Subject: [PATCH 3/4] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=9B=BE=E7=89=87=202=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=AE=A1=E7=90=86=E5=91=98=E6=A8=A1=E5=9D=97?= =?UTF-8?q?UI=203=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=94=81=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=A8=A1=E5=9D=97UI=204=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=94=81?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86=E6=A8=A1=E5=9D=97UI=205?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=BD=AC=E7=A7=BB=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E9=94=81=E6=A8=A1=E5=9D=97UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/icon_addressBook.png | Bin 0 -> 1795 bytes star_lock/images/icon_lockGroup_item.png | Bin 0 -> 4192 bytes star_lock/images/lan/lan_en.json | 4 +- star_lock/images/lan/lan_keys.json | 4 +- star_lock/images/lan/lan_zh.json | 2 + star_lock/images/normal_circle.png | Bin 0 -> 1343 bytes star_lock/images/select_circle.png | Bin 0 -> 1763 bytes star_lock/lib/appRouters.dart | 28 ++- star_lock/lib/app_settings/app_colors.dart | 2 + star_lock/lib/main.dart | 47 ++--- .../authorizedAdministratorList_page.dart | 2 +- .../mineSet/lockGroup/lockGroupList_page.dart | 71 +++++++ .../mineSet/lockGroup/lockItemList_page.dart | 66 ++++++ .../lockUserManageList_page.dart | 2 +- star_lock/lib/mine/mineSet/mineSet_page.dart | 9 +- .../recipientInformation_page.dart | 198 ++++++++++++++++++ .../transferSmartLock/selectBranch_page.dart | 134 ++++++++++++ .../transferSmartLock_page.dart | 166 +++++++++++++++ star_lock/lib/translations/lanKeyEntity.dart | 8 + 19 files changed, 709 insertions(+), 34 deletions(-) create mode 100644 star_lock/images/icon_addressBook.png create mode 100644 star_lock/images/icon_lockGroup_item.png create mode 100644 star_lock/images/normal_circle.png create mode 100644 star_lock/images/select_circle.png create mode 100644 star_lock/lib/mine/mineSet/lockGroup/lockGroupList_page.dart create mode 100644 star_lock/lib/mine/mineSet/lockGroup/lockItemList_page.dart create mode 100644 star_lock/lib/mine/mineSet/transferSmartLock/recipientInformation_page.dart create mode 100644 star_lock/lib/mine/mineSet/transferSmartLock/selectBranch_page.dart create mode 100644 star_lock/lib/mine/mineSet/transferSmartLock/transferSmartLock_page.dart diff --git a/star_lock/images/icon_addressBook.png b/star_lock/images/icon_addressBook.png new file mode 100644 index 0000000000000000000000000000000000000000..09aa9ba3e766ae077fc3c637244ccd6f9f51118b GIT binary patch literal 1795 zcmV+e2mJVnP)w-2#;etvE;;f3?u9bFgy!}21?2; z^D8Mumvp=3ZWl_Il)wEGDA|S?hG7PpU=WNZ*kEbKF-Bv@AQ4;lSH$uviS77ty}wNM z)5*HhIp5sZIY&2)>$;c|>V)l!^KgQv_%0Oy2q8kN)w*t3*1g@`-Bi2XhHcyEcDv|y zy8r-=0foi+mzE&!g9yXiJi5#63Q4~=q z6rO~`;WwB-<3WI*ve<5F%)rwpp!KXLgbX zvMfVUl#OwQ>~R8BLWr=nwY6ER)u=i-E6HRMtE;QWieyK;)RQvjMp3O+VHk#rA-yw1=!(X(gI;>L{|8@>zygb?A!j~`i%kg&rcx<^W&iFszd*HGtx_`>kH?`X%8~eyVHku$A#^&OUl$e@KvUq}-X5ye z>iY8Xa^GfODj`HDm&+*{h5~^Au3o*m5ekLgVaO)T^SpK8!i8rv?D;8|%PId{^aQGn zM&kjklqVL8VT=@~7>PvQP%-GkaU3)njR)w>#eNT(rg@*1kzg=5Ry&^OztOVk$FGG2 z_J?P^UZ-YY+%1OYD(a_RufrRrJOH#>t?Sd483xhmbf$W4ad8ppbo$7=bQ~x9{{8#0 zSNCqWi&m?3T@*#|094De?oH*jC+w`sf+ z!2VuzTngjIah&tijQj93u>fG(_Q=MQ(Cv2d@#DwML2=-0X5s5?|N|H2kFD#Wx>;BOriXxVlmdwNL9LGtO%jJoD@HEXuAOJKPjl3jDL+=wp z1k17x{1%JFkWQx``(sxCux&eAsZ`b{S!50foCo!K9j@yh2z-60J3BkS9NsT0l?p1A z%E%0TQdj^7QW#ovyIq*3IW*J$^5x51=AMVAX>I}m;M1p112^Ypvw7#+x4A@VeLPJ( zu)lZx{P~l*k=`P6gh(XvIvS0xwOXx#&n+%4A{-9)uWj4Lq{S~m*k8nX00@V}pqa&U z9EVGnF1=Y=T6%&3t0>E|_RX6&H#AM#Gz{a&^Z9)KaWEL%_O4ym6?S%ZHYZtRygv{R z0Fg+<1Tb?n!*Lwa=`_xtKmQxg^A?705k;0|)qFnxD4kB<(RF?8>({USn=f9xSPujO z{p(JrgGs~zeNFq7?Pjz2-&e0*txYP(gXejytgP58D=WWq9A|kV#(Z1_fbZYG=XG6I zY1LtG-MaOsD2o5#0U#QUzUDY?ZJPb?+_`he=ktFA0s#}#eZwmPKqwSaFJHd=$g-^a zZ{NQCWtQlQ<2Xd4(bqt46=fL4P9zc&zetv4T)A@P(G24J6af@tvDmZQw{QOu3WcVA zQ6iCm7cBI5;Z!O$QGJBxc_@mq;d71_#XulnUc7j5>Uxb|izl!ckH?>mTWSFI>zy>d zp%0-b2*UR9&5jZb1`&_PpQ7hiKU8BF#?E9i=7$d-CS6S@JuWg=GMS9&k7W;hA9P)J z{rU6fo8#0f8HO3VxHJuf5KLO-3j_kVd-v`J%d(HX-wp)ZEX&%tTyA@u`UfF|Y92|0 zTrRiWD_8b89O@S(Nh*q>_z${82T>FUmP(G~G7Q7mg+k%UkTmB+!m=z1g~F4=c_c9S z`(QB~4!=gwu=6gloOl7Ia{Adgdhl*`YlJ&fn)R3E4Gb7~L79_G{@X+F%X lhtmH#sfW^saU%Y$;C~$!RdqF#F2eu-002ovPDHLkV1mXoUW@<$ literal 0 HcmV?d00001 diff --git a/star_lock/images/icon_lockGroup_item.png b/star_lock/images/icon_lockGroup_item.png new file mode 100644 index 0000000000000000000000000000000000000000..68fa570c11e764b25af170d5a93e49b3f2e3f609 GIT binary patch literal 4192 zcmb7IRaDepwEh9oN`rKFD%~Z+z#xruh=ha;HNwyxLxY0SIY>FAw1B9z(mj+QAq*h` zg9zU7|8O7gTK8d}+Gp*x&e`AD``ZU$WB|TH#!LnPz#Uy3EfZWH{7*=TaIKFOcnjB& z`si5s0{}VgKfwd?3K#)^ibhvU!wg=4DU9%;oiFU`J;I=6Qt|Kl@5;XC# z6Kh~B9~r&lEQLBhJd+bOufM5iC;jeyzUyi?NT3a7qGuzg-@6Frn2r7NiBAvc(TxEg1*G34OE<r&UU3TWR|RCGgZ zeNP!4DOGSe^KuD_JrQC5`Z0Tvay^*Av}@^pYCHqz)b4#oFsewjp^#?Y{u!sQ2QeLq zzv#jv^RdGSLE_?vX>k-23y)B2lO!i%1|HRaAWc1iT9%~&@}&)qq!z}K$&F9*j0lXp zl*eT_nNRc$vYdK3vv0Qb8nwPZcK)8Q<|6XeKi99BbiQ^a($rLXZB<_iGi$O(Ofgww zPPMVFQ1s4*{Pj=VMG=~HB5S!j#|e;wJ(<`-;<)Ef!-ZN4!g9RFqY&s?S#Ao?0PuYS zr8ZVZ9nq0X*L_4~ui&5hy5F+V^>uM_;rJ)XDDt6u`Q|qFq z7o%=qug`?ot8jMLS@Ie8*?6|Ake}v4h+>`)h$kTqF$pF%+1Rlwa9I~f?C!XPBgO@E z;O!(JIBjIA1p`yot=I@XQ-qu6iG^$!kBtP4AmSF&h3Lnc{+7u6u~!R*2Lw#n}K@Or(R7dZxG_1CMX zP@Kh>M$^&(-Yt>NMcsKX)%C@Yw=&&X_wjWS@e&IoBOmQ*aOnW=ujx9k1OZMLVWt=~ z>{izt<6Oe;F$&#(XA0YN8b{UCZm^Lcr0~0MVmB~WuA%qmNW>XC-QM8*J}_X-CO(>*d5Y!xdM<&)c>1Zq@Z(CAWy9N%2oBzo9O|ow0X~ z+-r``*(~30_o6x8J+C#sQrG-w`uEcT%Q(prya@W|gt?j*okd-Cy!jm+V00fO;K&UN zYyW_ieq)mLD+C-%Kj>LO!wB9Kb(^%X*}E+>fZEY_DNuOf;7XOis7(>W#U?vi2 zK}jOv;DwZmzP2+e3qc#5kACc*dn}R}BapOs?eS(4?mL#BWLU-2CqYSW6N09ifq7Hm zK)Ty)SvhC6`A`aFUTz=p(BOl<$6N#sZ!nyKC=$OXj#%`!pOlc1lzU&FX0P>g%7l+4 zI)UPhtM8IsUghg*luaC8^YX@3Z?WRViN*`9V3$E}hnN^v({b zFuwn+9G&UAnp?L~(K~9Kmwb~rW(W{qeolh7% zY@M}m+FZxfVO&^=#2icduK7$o(xWTlzh4h*u8CWN<`aPT6S zg?qE==+=$bcDl;EFEpa9N5y{(jpM@WNdN~gR&|Yj1(xn>QaI$?Fx^$=89k&ng}6~WFJOX~?w+&_$&y-A-;9PT^maKQtD z4|n}1K3=w^E3;5V-?>SfB>8>x^FM{m>2_lPC!IQv_h5YN_}d=WoiKcIfJ%w0v)&^G zs5Bhtk8y)&kK>C9FKL_lOcwB)qyy7aF;a$YpKSbpL`9{{)`bj}YE=GgQj!-bw-N|t(AcmOLQ z18lq3;T}pi=}~L#wtq5S--$ZD$Ds;r-73?Vm42*LD~PfQnD06nrA41PI_j zmG>C|Q>%~>RnNDAtw3cv@&Ei=KyCYMYkVlRq%zL03-fKiL}QUA4t(*~3Vm$#&X0V# zc`VWfIEo~V(Xf1-&eDTb{4J@WrpU!$=gG%$y?@cZ;z}#cWVvN7#co`NPPLJq4loJb zK6XGVL$de55@UmRQUX^@)@U}<`h~{!-01EAKBzQahpMB97f!_S4`yShqV%nJ@k@Ti zi^iG0o?ge;uiELUs*zg|V2dMCiAdPoN>&Wvh4_6Xiz3aWGF3FGX-{qk1Y5u~Z=;Kp z2x}Fa%Xv8b->e_TGPYx`LNDf00ac0I&kGW^0){oTd9CoW*D6Y41a{|v2i{^^AAU|} z)eR^5nd0aGPvm%5al*lc$vr{~yhw3ofMI)+=hXkC_ev>;HFoya&biR+1 zw#k;Wyf6aH9Oh=iZ8rU&mPwanj2|tJ?c%~?vHTIzJ(%vSBs6?K_a{L*OBg71+> zO}RKOIfv(z@|>f7Emy(agjK6&ipCU2K79KZg)V1vS;^V<@A}h^#3Om+{tbp3*8@j_ zTK4Bo-djDKu$li+l{}xj#@b=*Jz>Q^a~uPzTg6YO3U5ff=H6#Nr7u@Q2t5~-aDE24 zh2&8iC1+xpnDn1NTHKP%H@fy$u3hVw`RcFiDVINyC_ejmz{5s~UF7jdDiKrpR3?2n z-g+Z`CF{VD14lD$c21&oYuy%ixLCTI%P8b<-W|{RglNhpKs0ZdRlF!|*(Fhr8Xf(| zn;$|m8`|lN<1IaI{QiviaF#f>{aZjJBf-mhi48wPyS+6gKiFpM)Z|}5J=gp6FJ63K zL8{0VR%bRV^I1CdW76)c2XXEY@iGICwHZ*WZZ2LP7_zlFeJL9L-^H4RN`$@l10mQa z9V^7c8?|55Sl-ro;r3C$tl~L|6sw)AxI9hw84j_vEo3d3#a|qr@t)4!E`cjT9n6Q8 zqJ!w=tEe$>o&|f$5e$iH%fw~z^f$GOc8xPOd_lm!v}miA=_9#b2iu7@iAM_0ZgsNz z-tNzT9P7i4xLGh70GsvHkb=?=aj(nNU!b&Y&L^Z2c{T3Rb$9F>vmA4+zp{pWGB;G( z-u!%|hf}ryms!knNY4!PKjH&3am`R*{V&`+*uw#N{CWy;QQn9ntBu_mjgGexVy-c8 zEdp(y=hj3FigvJp?0lHX1Yrs-0x0N#uy<}ojiIGQ4W!kH1SJXrJ4@h4#wP;3io%w& zS>4?km%qX34SyA)Vq!KgRk)r1ERO{I>RXaiJwK@Fg!J<-gS)9853_EEPD*c&5BpXT za0y@Cv}4*hPbDH=Kqwqu{^X+%TocQSUv5)@E)+0RZW@q~>PiFZ%`Z^Pp?%F4)}Anw zM}=(19!bF4`*q`zrD3HnY5mxBb4X?WJbSl+JTOzyw}dvCQvWv#(N`l%VkLc$Rv>M5 zbt-U&MamSm=$Dxry}o0}EW2G%YMtTufvrRGBkT0kap=dX&_Ro zFSuJgv{OIdhVZ#Hjyj`<%Vt+;I1y>Ef;hMiH%POkpIj((|F4@)>6 z$@Tn1H;^Rr@sI66XwlBCs!mR z(w<`G@GH?>;%|gUA+Kd==97ew9Uh@cCAy2uY~0CecmrA0dDFo zcVn>(0`JVi`K;EIxa*9R3XB#SVrvC)5mZXQYQw&MIF=TZcoTue5hE1~Lxu$dgeR`J zOI(nFrV)0H;Akb~_w^U678WvG3keLMH4yL65>{+j!B`J6Qu~SCW834Bhlfhw;%-88q;OOA40V5$tt*?eLFJ*@E|sc9Z!Ph(^;px?VIGv*1+kp{I=b#90L#c{mMPL zuBwh{kdvYv-60%cRBq^iKv<(+%Fn#YOv#&~G4^yN^BB_6l;h_s%fYQuduoX@nBsA- oC$S~FQL8XGeUAor4>e-dwjh#pf=EOh?#lqs1sQ0eG#^L*53E4?I{*Lx literal 0 HcmV?d00001 diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index 398e0481..6e9c5107 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -199,9 +199,12 @@ "touchUnlock":"Touch Unlock", "pushNotification":"Push Notification", "lockUserManagement":"Lock User Management", + "aboutToExpire":"About to expire", "authorizedAdmin":"Authorized Admin", "lockGroup":"Lock Group", "transferSmartLock":"Transfer Smart Lock", + "selectiveLock":"Selective lock", + "recipientInformation":"recipientInformation", "transferGateway":"Transfer Gateway", "multiLanguage":"Multi Language", "lockScreen":"Lock Screen", @@ -236,7 +239,6 @@ "problemTwo":"Problem Two", "problemThree":"Problem Three", "pleaseEnterYourAnswer":"Please Enter Your Answer", - "aboutToExpire":"About to expire", "designation": "designation", "state": "State", diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 833edfed..79399173 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -202,6 +202,8 @@ "authorizedAdmin":"authorizedAdmin", "lockGroup":"lockGroup", "transferSmartLock":"transferSmartLock", + "selectiveLock":"selectiveLock", + "recipientInformation":"recipientInformation", "transferGateway":"transferGateway", "multiLanguage":"multiLanguage", "lockScreen":"lockScreen", @@ -236,7 +238,7 @@ "problemTwo":"problemTwo", "problemThree":"problemThree", "pleaseEnterYourAnswer":"pleaseEnterYourAnswer", - "aboutToExpire":"About to expire", + "aboutToExpire":"aboutToExpire", "designation": "designation", "state": "state", diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index bd462406..91d7a2b5 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -202,6 +202,8 @@ "authorizedAdmin":"授权管理员", "lockGroup":"锁分组", "transferSmartLock":"转移智能锁", + "selectiveLock":"选择锁", + "recipientInformation":"接收人信息", "transferGateway":"转移网关", "multiLanguage":"多语言", "lockScreen":"锁屏", diff --git a/star_lock/images/normal_circle.png b/star_lock/images/normal_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..7884e181787c04cc9c51ae0ba6f8bd8ca1d7b11b GIT binary patch literal 1343 zcmV-F1;F}=P)}q%4Uw~2y z%ku5pH~8}93$)wqUB_|i0011vDdBMV{rdX4!Z1vVVVH>PxyEivC>S#3jY}>X9 z0Kl?rHl0qFU%q?^FJ8P@dj7yN(%0A5aB*>Q)a&(*5kiqY1L$z9kPN!2~SvD&O!XeM|5DW$vo@kcw zcnr;E69^%Dj^or*sZ{0l>(>wpg??SyG)+)db%### zj1od9tSHJc#`x!?JH&d$Iz%>vK!2f18M`L6+<63_EM(=@f&Z0=)>EBSo>LGd|h&-38)^z@|D z=^SitZ~r4nQuw#q&QPn>Mi&wwCR5Iu)ON7Q!^m3d^!t zw6(QW?smK7@p$aF)1!>XW4OG$ET_}yGRkB!Kq(zIn@zvH9;MlA0;P1A$z%XUqftmC z5<7&DJMeqQhQ`zMN`98bTl?iC<0#vlkng%Gkw2wA!0G=van zG#Yz?AXH|Pfw>$)mSx!7+}zhRt=MQZRwg-3qtO6O(~215eOZ?0`sbu?i+)9n@xHF> zMNQM{t6Jl?NkCoK^&-Z2KcCMR7fJ%A2l%5hmuY@?y5)Hu7=|%Px8A&YbDU16AN^*b z9MQ5Ys8*}c?RNi+9C4anuLreS?a32cNs>y-RJoRtzGE;LK&#b)uV26Je*gY`E*lR9 zgDHeigi<;jkH>S__}bc9c57>^oXKP$8jUVJ|G%X=l6_5f9}EBh002ovPDHLkV1nmc Be(L}L literal 0 HcmV?d00001 diff --git a/star_lock/images/select_circle.png b/star_lock/images/select_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..a14a5c4fb171f3c1fe3219402ad9f6c0be9c1a58 GIT binary patch literal 1763 zcmV<91|0c`P)T|@ zjOTF|wsjq8q)`${m)`$Mj5Oc()0uD1ne+dKGEEcR(u)@_X3FLA1w~PKUDth@rui6# zDbh4uJMmkTsagQjWdx(;2} zQLR={sZ?$%iV_9@mSyFUk&)#{BqH|}esgm(S}K*IgpjJw=UWH_0vH+^0>^Q-=PHVV zQmKSoE{9^VxMCQFYiMX_b#88MwWsj0SnP5>pTEYktSkt^b)M(JFwDE=tV`20$g&Jc zl5VN0%KQEPm9uBh{?_UF9mB7$uirKd!yOC;7skfMKnQtn=tdcaft{TlWHOl*LP+J( zrAv#QoM#I!iXtyb((>To;KRwu$=fcMt1G}(s#dGm-rio^-`~G12*Q%x{m>RZ9*K#srio-S30am`1A)Mu>FMc*t$y3GV2|rN6bePh$H#j^Y9WfE z5Q#*>RHvqy7O-xKgPoF;BTiO;HA0G$9FwtZ(36^Cg zs}iz=mn3PK=lORA&+VJoOdI%1HjvJm*vXrCQ#&ln0VjpAVG5xU3Lo(Vb0LDjVEZx@ z1Oe4*H7ZFGB9X{hLKFUw_Qt+fNx#ly!_+t%i+_jTOJ&|F4rb@LOe*%jK?xLZN6U;Dt9P?mp6R@3Hn? z(8o%?GV#w}4o6Roye7*&{hpd-*6AzyD4*XaTo@#iRZ!RB(Vc_%m7P8sw5^w~sswy7{1Z;!; z9@F1@R(TgCUmZ@pRvI22#_|54Uh_jkLu~`*_D!tCyI<$6v=-Nq+ixByuh(1uOt!bT zFK`@}wA)B*rj3plpl)cVaJX7GisLwN9G6Ta5*J9hT%PfGJU8ru{UtXC>a|+s^msfs zDwWC%Q4}TYbUJMVrL+ATb-SESrxU8G^5o#)z(>=xZJ-^CyT8|Jm6N7vXqx6DrfIr5 zfj@pa?5A4gJaQ#`grcabuJ>;i>4tP&2TjvO;&3>Moxl$`d%p$jG^eiXU>K%IIF3u! zYBk$HV{M+fd!<%6Yqc6!mX(Rec$Z)I-@nlx^HZ1$HN&6eBmm%WIOKdj z-!@oa@Nm!BFU?QWmK*e3E(exnW#9;YbaZsNP$;ZuTKmV{D>F30r+Pp7;Zqc@%rp;_ zrfDb^iz_1|Bg?=Md?XT)4a0EBa(lOVeE4v)+-rUPF=Oc{$g&K>FkHtTPQ9qSUhk?T zNw@60%WpqraP?yE{=n6XhfYGHOw)uUNw>USZ`}&7!_UsnuBxiaXEK?#!71u+m;cQt z-LL;|KB4jbXSAgSlF4MCswzJ_JKGEo0D(Z@P9~FCv0JqK0~CJvyt`N6>O}@We9l-} zAGKNynM`IS5D45kdHgN->FMc*gpf)ikyx}VAO8S_AHQ(mr>`6zbQ6b9QTXXA2Y&p* zVF_-UCK8FnA|a&G=onjC+-qxV{}u!x8V-j$0_dgPmrA9uySuwOKR<8pRRaHQD1^h| zs2~U(!2sPiS|v$BGMQX$)o5thTsZdU|5rBm?(Qy9sZ`qrLr0wvK@g%76BB*wjHFU2 zNRnjR8TtS1Nu5+LyMd-@B9qBE;Gd}SDXL< literal 0 HcmV?d00001 diff --git a/star_lock/lib/appRouters.dart b/star_lock/lib/appRouters.dart index 6b0e6cc2..7311e0af 100644 --- a/star_lock/lib/appRouters.dart +++ b/star_lock/lib/appRouters.dart @@ -1,7 +1,11 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageListPage.dart'; +import 'package:star_lock/mine/mineSet/lockGroup/lockGroupList_page.dart'; +import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageList_page.dart'; import 'package:star_lock/mine/mineSet/mineSet_page.dart'; +import 'package:star_lock/mine/mineSet/transferSmartLock/recipientInformation_page.dart'; +import 'package:star_lock/mine/mineSet/transferSmartLock/selectBranch_page.dart'; +import 'package:star_lock/mine/mineSet/transferSmartLock/transferSmartLock_page.dart'; import 'login/forgetPassword/starLock_forgetPassword_page.dart'; import 'login/login/starLock_login_page.dart'; @@ -86,6 +90,7 @@ import 'mine/minePersonInfo/minePersonInfoResetPassword/minePersonInfoResetPassw import 'mine/minePersonInfo/minePersonInfoSetSafetyProblem/minePersonInfoSetSafetyProblem_page.dart'; import 'mine/mineSet/appUnlockNeedMobileNetworkingLock/appUnlockNeedMobileNetworkingLock_page.dart'; import 'mine/mineSet/hideInvalidUnlockPermissions/hideInvalidUnlockPermissions_page.dart'; +import 'mine/mineSet/lockGroup/lockItemList_page.dart'; import 'mine/mineSet/lockScreen/lockScreen_page.dart'; import 'mine/mine_page.dart'; import 'mine/supportStaff/supportStaff_page.dart'; @@ -99,7 +104,7 @@ import 'mine/valueAddedServices/valueAddedServicesNoteAndEmailDetail/valueAddedS import 'mine/valueAddedServices/valueAddedServicesRealName/valueAddedServicesRealName_page.dart'; import 'mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/valueAddedServicesAddSMSTemplate_page.dart'; import 'mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/valueAddedServicesListSMSTemplate_page.dart'; -import 'mine/mineSet/authorizedAdministrator/authorizedAdministratorListPage.dart'; +import 'mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart'; import 'starLockApplication.dart'; abstract class Routers { @@ -241,6 +246,11 @@ abstract class Routers { static const lockUserManageLisPage = '/LockUserManageLisPage'; //我的设置-锁用户管理 static const authorizedAdministratorListPage = '/AuthorizedAdministratorListPage'; //我的设置-授权管理员 + static const lockGroupListPage = '/LockGroupListPage'; //我的设置-锁分组 + static const lockItemListPage = '/LockItemListPage'; //锁分组-锁列表 + static const transferSmartLockPage = '/transferSmartLockPage'; //转移智能锁 + static const recipientInformationPage = '/recipientInformationPage'; //接受人信息 + static const selectBranchPage = '/SelectBranchPage'; //选择分店 static const starLockLoginPage = '/StarLockLoginPage'; // 登录 static const starLockRegisterPage = '/StarLockRegisterPage'; // 注册 @@ -648,6 +658,18 @@ abstract class AppRouters { page: () => const AuthorizedAdministratorListPage()), GetPage( name: Routers.lockUserManageLisPage, - page: () => const LockUserManageListListPage()) + page: () => const LockUserManageListListPage()), + GetPage( + name: Routers.lockGroupListPage, page: () => const LockGroupListPage()), + GetPage( + name: Routers.lockItemListPage, page: () => const LockItemListPage()), + GetPage( + name: Routers.transferSmartLockPage, + page: () => const TransferSmartLockPage()), + GetPage( + name: Routers.recipientInformationPage, + page: () => const RecipientInformationPage()), + GetPage( + name: Routers.selectBranchPage, page: () => const SelectBranchPage()) ]; } diff --git a/star_lock/lib/app_settings/app_colors.dart b/star_lock/lib/app_settings/app_colors.dart index 5901a74d..746a9ab9 100644 --- a/star_lock/lib/app_settings/app_colors.dart +++ b/star_lock/lib/app_settings/app_colors.dart @@ -116,4 +116,6 @@ class AppColors { static Color progressValueColor = const Color(0xFF0093E5); static const greyLineColor = Color.fromRGBO(240, 240, 240, 1); //灰色分割线 + static const darkGrayTextColor = Color.fromRGBO(65, 65, 65, 1); //深灰色字体 + static const placeholderTextColor = Color.fromRGBO(128, 128, 128, 1); //占位字体颜色 } diff --git a/star_lock/lib/main.dart b/star_lock/lib/main.dart index 5e81342f..7fc3b1e4 100644 --- a/star_lock/lib/main.dart +++ b/star_lock/lib/main.dart @@ -23,19 +23,18 @@ void main() async { } class MyApp extends StatefulWidget { - const MyApp({GlobalKey? key}):super(key: key); + const MyApp({GlobalKey? key}) : super(key: key); @override State createState() => _MyAppState(); } class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { - @override Widget build(BuildContext context) { return ScreenUtilInit( designSize: const Size(750, 1334), - builder: (w, a) => _initMaterialApp()); + builder: (w, a) => _initMaterialApp()); } GetMaterialApp _initMaterialApp() => GetMaterialApp( @@ -47,17 +46,19 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], - localeResolutionCallback: (locale,supportedLocales){ - if(!supportedLocales.contains(locale)) { - int idx = appSupportedLocales.indexWhere((element) => element.languageCode == locale!.languageCode); - if(idx != -1) { + localeResolutionCallback: (locale, supportedLocales) { + if (!supportedLocales.contains(locale)) { + int idx = appSupportedLocales.indexWhere( + (element) => element.languageCode == locale!.languageCode); + if (idx != -1) { locale = appSupportedLocales[idx]; - }else { + } else { locale = const Locale('zh', 'CN'); } } // print("localelocalelocalelocalelocale locale:${locale} locale.languageCode:${locale.languageCode} locale.countryCode:${locale.countryCode} supportedLocales:${supportedLocales}"); - AppManager().setLanCode(code: '${locale!.languageCode}_${locale.countryCode}'); + AppManager() + .setLanCode(code: '${locale!.languageCode}_${locale.countryCode}'); return locale; }, // locale: StoreService.to.getLanguageCode().isNotEmpty ? appDept.deptSupportedLocales.where((element) => element.languageCode == StoreService.to.getLanguageCode()).first : Get.deviceLocale, @@ -68,21 +69,19 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { backgroundColor: const Color(0xFFF6F6F6), primaryColor: const Color(0xFFFFFFFF), textTheme: TextTheme( - //用在非Material组件上的文字显示, - bodyText1: TextStyle( - fontSize: 28.sp, color: const Color(0xff2E2B2B)), + //用在非Material组件上的文字显示, + bodyText1: + TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), //Material组件上的文字显示 - bodyText2: TextStyle( - fontSize: 28.sp, color: const Color(0xff2E2B2B)), + bodyText2: + TextStyle(fontSize: 28.sp, color: const Color(0xff2E2B2B)), button: TextStyle(fontSize: 28.sp)), - iconTheme: - IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)), + iconTheme: IconThemeData(size: 28.sp, color: const Color(0xff2E2B2B)), appBarTheme: AppBarTheme( backgroundColor: const Color(0xFFFFFFFF), elevation: 0, centerTitle: true, - iconTheme: - IconThemeData(color: const Color(0xff333333), size: 36.sp), + iconTheme: IconThemeData(color: const Color(0xff333333), size: 36.sp), titleTextStyle: TextStyle( color: const Color(0xff333333), fontWeight: FontWeight.w400, @@ -93,8 +92,7 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { ), debugShowCheckedModeBanner: false, getPages: AppRouters.routePages, - initialRoute: '/' - ); + initialRoute: '/'); @override void initState() { @@ -117,15 +115,14 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { print("应用进入后台"); } } - } // 设置国际化信息 Future _initTranslation() async => TranslationLoader.loadTranslation( - zhSource: "images/lan/lan_zh.json", - enSource: "images/lan/lan_en.json", - keySource: "images/lan/lan_keys.json", -); + zhSource: "images/lan/lan_zh.json", + enSource: "images/lan/lan_en.json", + keySource: "images/lan/lan_keys.json", + ); // 设置包名服务设备信息 Future _setCommonServices() async { diff --git a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart index 2827c7ba..82073e45 100644 --- a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart +++ b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart @@ -27,7 +27,7 @@ class _AuthorizedAdministratorListPageState backgroundColor: AppColors.mainColor, actionsList: [ IconButton( - icon: const Icon(Icons.add), + icon: Image.asset('images/icon_add_white.png'), onPressed: () { // 处理操作按钮的点击事件 Navigator.pushNamed(context, Routers.authorizedAdminManagePage); diff --git a/star_lock/lib/mine/mineSet/lockGroup/lockGroupList_page.dart b/star_lock/lib/mine/mineSet/lockGroup/lockGroupList_page.dart new file mode 100644 index 00000000..6d22bf78 --- /dev/null +++ b/star_lock/lib/mine/mineSet/lockGroup/lockGroupList_page.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../../appRouters.dart'; +import '../../../../../app_settings/app_colors.dart'; +import '../../../../../tools/commonItem.dart'; +import '../../../../../tools/submitBtn.dart'; +import '../../../../../tools/titleAppBar.dart'; +import '../../../../../translations/trans_lib.dart'; + +class LockGroupListPage extends StatefulWidget { + const LockGroupListPage({Key? key}) : super(key: key); + + @override + State createState() => _LockGroupListPageState(); +} + +class _LockGroupListPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.basicInformation!.tr, + haveBack: true, + actionsList: [ + IconButton( + icon: Image.asset('images/icon_add_white.png'), + onPressed: () { + // 处理操作按钮的点击事件-添加锁分组 + }, + ), + ], + backgroundColor: AppColors.mainColor), + body: Column( + children: [ + Expanded(child: _buildMainUI()), + ], + ), + ); + } + + Widget _buildMainUI() { + return ListView.builder( + itemCount: 2, + itemBuilder: (c, index) { + if (index == 1) { + return Center( + child: SizedBox( + height: 40.h, + child: const Text( + '锁数量:1', + style: TextStyle( + color: AppColors.darkGrayTextColor, fontSize: 14), + ), + ), + ); + } else { + return CommonItem( + leftTitel: "未分组(1)", + rightTitle: "", + allHeight: 70.h, + isHaveLine: true, + action: () { + Navigator.pushNamed(context, Routers.lockItemListPage); + }); + } + }); + } +} diff --git a/star_lock/lib/mine/mineSet/lockGroup/lockItemList_page.dart b/star_lock/lib/mine/mineSet/lockGroup/lockItemList_page.dart new file mode 100644 index 00000000..9b87feec --- /dev/null +++ b/star_lock/lib/mine/mineSet/lockGroup/lockItemList_page.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../../app_settings/app_colors.dart'; +import '../../../../../tools/commonItem.dart'; +import '../../../../../tools/titleAppBar.dart'; +import '../../../../../translations/trans_lib.dart'; + +class LockItemListPage extends StatefulWidget { + const LockItemListPage({Key? key}) : super(key: key); + + @override + State createState() => _LockItemListPageState(); +} + +class _LockItemListPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.basicInformation!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), + body: ListView.builder( + itemBuilder: (context, index) { + return _listItemView(); + }, + itemCount: 2, + ), + ); + } + + Widget _listItemView() { + return GestureDetector( + child: Container( + color: Colors.white, + height: 70.h, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: 20.w, + ), + Image.asset( + 'images/icon_lockGroup_item.png', + width: 30, + height: 30, + fit: BoxFit.fill, + ), + SizedBox( + width: 8.w, + ), + const Text( + 'Daisy', + style: TextStyle(fontSize: 14), + ) + ], + ), + ), + onTap: () {}, + ); + } +} diff --git a/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart b/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart index 0e1a2fb7..ce9cc138 100644 --- a/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart +++ b/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart @@ -23,7 +23,7 @@ class _LockUserManageListListPageState return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( - barTitle: TranslationLoader.lanKeys!.authorizedAdmin!.tr, + barTitle: TranslationLoader.lanKeys!.lockUserManagement!.tr, haveBack: true, backgroundColor: AppColors.mainColor, actionsList: [ diff --git a/star_lock/lib/mine/mineSet/mineSet_page.dart b/star_lock/lib/mine/mineSet/mineSet_page.dart index 782a14e4..6310488f 100644 --- a/star_lock/lib/mine/mineSet/mineSet_page.dart +++ b/star_lock/lib/mine/mineSet/mineSet_page.dart @@ -81,14 +81,19 @@ class _MineSetPageState extends State { rightTitle: "", isHaveLine: true, isHaveDirection: true, - action: () {}), + action: () { + Navigator.pushNamed(context, Routers.lockGroupListPage); + }), CommonItem( leftTitel: TranslationLoader.lanKeys!.transferSmartLock!.tr, rightTitle: "", isHaveLine: true, isHaveDirection: true, - action: () {}), + action: () { + Navigator.pushNamed( + context, Routers.transferSmartLockPage); + }), CommonItem( leftTitel: TranslationLoader.lanKeys!.transferGateway!.tr, rightTitle: "", diff --git a/star_lock/lib/mine/mineSet/transferSmartLock/recipientInformation_page.dart b/star_lock/lib/mine/mineSet/transferSmartLock/recipientInformation_page.dart new file mode 100644 index 00000000..dc8129ea --- /dev/null +++ b/star_lock/lib/mine/mineSet/transferSmartLock/recipientInformation_page.dart @@ -0,0 +1,198 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../appRouters.dart'; +import '../../../../app_settings/app_colors.dart'; +import '../../../../tools/titleAppBar.dart'; +import '../../../../translations/trans_lib.dart'; + +class RecipientInformationPage extends StatefulWidget { + const RecipientInformationPage({Key? key}) : super(key: key); + + @override + State createState() => + _RecipientInformationPageState(); +} + +class _RecipientInformationPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.recipientInformation!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + ), + body: Column( + children: [ + SizedBox(height: 150.h, child: _buildMainUI()), + SizedBox( + height: 20.h, + ), + _buildAccoutRow(), + _buildBottomText(), + _buildNextBtn(), + Expanded( + child: SizedBox( + height: 64.h, + )), + _buildRemoveBadLockBtn(), + SizedBox( + height: 64.h, + ) + ], + ), + ); + } + + Widget _buildMainUI() { + return ListView.separated( + itemCount: 2, + separatorBuilder: (context, index) { + return Divider( + height: 1, + indent: 20.w, + endIndent: 20.w, + color: AppColors.greyLineColor, + ); + }, + itemBuilder: (c, index) { + if (index == 0) { + return _electronicKeyItem( + 'images/select_circle.png', "个人用户", () {}); + } else { + return _electronicKeyItem( + 'images/normal_circle.png', "好房管家", () {}); + } + }); + } + + Widget _electronicKeyItem( + String leftIcon, String leftTitle, Function() action) { + return GestureDetector( + child: Container( + color: Colors.white, + height: 70.h, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: 40.w, + ), + GestureDetector( + child: Image.asset( + leftIcon, + width: 16, + height: 16, + ), + ), + SizedBox( + width: 16.w, + ), + Text( + leftTitle, + style: TextStyle(fontSize: 28.sp), + ) + ], + ), + ), + onTap: () {}, + ); + } + + Widget _buildAccoutRow() { + return Container( + height: 60.h, + color: Colors.white, + child: Row( + children: [ + SizedBox( + width: 40.w, + ), + Text( + '账号', + style: + TextStyle(color: AppColors.darkGrayTextColor, fontSize: 24.sp), + ), + Expanded( + child: TextField( + textAlign: TextAlign.right, + keyboardType: TextInputType.text, + onChanged: (value) {}, + decoration: InputDecoration( + border: InputBorder.none, + hintText: '请输入手机号或email', + hintStyle: TextStyle( + color: AppColors.placeholderTextColor, + fontSize: ScreenUtil().setSp(24), + textBaseline: TextBaseline.alphabetic), + ), + )), + SizedBox( + width: 20.w, + ), + Image.asset( + 'images/icon_addressBook.png', + width: 28.w, + height: 28.h, + ), + SizedBox( + width: 40.w, + ) + ], + ), + ); + } + + Widget _buildBottomText() { + return Padding( + padding: EdgeInsets.only(top: 20.h, bottom: 80.h), + child: Text( + '选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权', + style: + TextStyle(fontSize: 20.sp, color: AppColors.placeholderTextColor), + textAlign: TextAlign.left, + ), + ); + } + + Widget _buildNextBtn() { + return GestureDetector( + child: Container( + color: Colors.grey, + width: ScreenUtil().screenWidth - 80.w, + height: 64.h, + child: TextButton( + onPressed: () { + Navigator.pushNamed(context, Routers.selectBranchPage); + }, + child: Text( + '下一步', + style: TextStyle(fontSize: 28.sp, color: Colors.white), + )), + ), + ); + } + + Widget _buildRemoveBadLockBtn() { + return Row( + children: [ + const Expanded(child: SizedBox()), + TextButton( + onPressed: () {}, + child: Text( + '移除坏锁', + style: TextStyle( + fontSize: 28.sp, color: AppColors.darkGrayTextColor), + textAlign: TextAlign.end, + )), + SizedBox( + width: 10.h, + ) + ], + ); + } +} diff --git a/star_lock/lib/mine/mineSet/transferSmartLock/selectBranch_page.dart b/star_lock/lib/mine/mineSet/transferSmartLock/selectBranch_page.dart new file mode 100644 index 00000000..e6d63755 --- /dev/null +++ b/star_lock/lib/mine/mineSet/transferSmartLock/selectBranch_page.dart @@ -0,0 +1,134 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../appRouters.dart'; +import '../../../../app_settings/app_colors.dart'; +import '../../../../tools/titleAppBar.dart'; +import '../../../../translations/trans_lib.dart'; + +class SelectBranchPage extends StatefulWidget { + const SelectBranchPage({Key? key}) : super(key: key); + + @override + State createState() => _SelectBranchPageState(); +} + +class _SelectBranchPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.recipientInformation!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + ), + body: Column( + children: [ + _buildTopView(), + SizedBox( + height: 20.h, + ), + Expanded(child: _buildMainUI()), + _buildNextBtn(), + SizedBox( + height: 64.h, + ) + ], + ), + ); + } + + Widget _buildTopView() { + return Container( + height: 120.h, + width: ScreenUtil().screenWidth, + color: Colors.white, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(left: 40.w, top: 20.h, bottom: 16.h), + child: Text( + '公寓', + style: TextStyle(fontSize: 28.sp), + ), + ), + Padding( + padding: EdgeInsets.only(left: 40.w), + child: Text('管理员:18682150237', + style: TextStyle( + color: AppColors.darkGrayTextColor, fontSize: 24.sp)), + ) + ], + ), + ); + } + + Widget _buildMainUI() { + return ListView.separated( + itemCount: 5, + separatorBuilder: (context, index) { + return Divider( + height: 1, + indent: 20.w, + endIndent: 20.w, + color: AppColors.greyLineColor, + ); + }, + itemBuilder: (c, index) { + return _electronicKeyItem('images/select_circle.png', "分组一", () {}); + }); + } + + Widget _electronicKeyItem( + String leftIcon, String leftTitle, Function() action) { + return GestureDetector( + child: Container( + color: Colors.white, + height: 70.h, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: 40.w, + ), + GestureDetector( + child: Image.asset( + leftIcon, + width: 16, + height: 16, + ), + ), + SizedBox( + width: 16.w, + ), + Text( + leftTitle, + style: TextStyle(fontSize: 28.sp), + ) + ], + ), + ), + onTap: () {}, + ); + } + + Widget _buildNextBtn() { + return GestureDetector( + child: Container( + color: AppColors.mainColor, + width: ScreenUtil().screenWidth, + height: 64.h, + child: TextButton( + onPressed: () {}, + child: Text( + '下一步', + style: TextStyle(fontSize: 28.sp, color: Colors.white), + )), + ), + ); + } +} diff --git a/star_lock/lib/mine/mineSet/transferSmartLock/transferSmartLock_page.dart b/star_lock/lib/mine/mineSet/transferSmartLock/transferSmartLock_page.dart new file mode 100644 index 00000000..0101074a --- /dev/null +++ b/star_lock/lib/mine/mineSet/transferSmartLock/transferSmartLock_page.dart @@ -0,0 +1,166 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../appRouters.dart'; +import '../../../../app_settings/app_colors.dart'; +import '../../../../tools/titleAppBar.dart'; +import '../../../../translations/trans_lib.dart'; + +class TransferSmartLockPage extends StatefulWidget { + const TransferSmartLockPage({Key? key}) : super(key: key); + + @override + State createState() => _TransferSmartLockPageState(); +} + +class _TransferSmartLockPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.selectiveLock!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + onPressed: () {}, + child: Text( + '全选', + style: TextStyle(color: Colors.white, fontSize: 28.sp), + )) + ], + ), + body: Column( + children: [ + _searchWidget(), + SizedBox( + height: 10.h, + ), + Expanded(child: _buildMainUI()), + SizedBox( + height: 20.h, + ), + _buildNextBtn(), + SizedBox( + height: 64.h, + ) + ], + ), + ); + } + + Widget _searchWidget() { + return Container( + height: 60.h, + margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), + decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.circular(5)), + child: TextField( + //输入框一行 + maxLines: 1, + // controller: _controller, + autofocus: false, + decoration: InputDecoration( + //输入里面输入文字内边距设置 + contentPadding: const EdgeInsets.only( + top: 12.0, left: -19.0, right: -15.0, bottom: 8.0), + hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr, + //不需要输入框下划线 + border: InputBorder.none, + //左边图标设置 + icon: Padding( + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), + ), + ), + ), + ); + } + + Widget _buildMainUI() { + return ListView.separated( + itemCount: 10, + separatorBuilder: (context, index) { + return Divider( + height: 1, + indent: 20.w, + endIndent: 20.w, + color: AppColors.greyLineColor, + ); + }, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { + Navigator.pushNamed(context, Routers.authorizedAdminDetailPage); + }); + }); + } + + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { + return GestureDetector( + child: Container( + color: Colors.white, + height: 70.h, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: 20.w, + ), + GestureDetector( + child: Image.asset( + 'images/icon_round_unSelet.png', + width: 16, + height: 16, + ), + ), + SizedBox( + width: 16.w, + ), + Image.asset( + 'images/icon_lockGroup_item.png', + width: 30, + height: 30, + fit: BoxFit.fill, + ), + SizedBox( + width: 8.w, + ), + const Text( + 'Daisy', + style: TextStyle(fontSize: 14), + ) + ], + ), + ), + onTap: () {}, + ); + } + + Widget _buildNextBtn() { + return GestureDetector( + child: Container( + color: Colors.grey, + width: ScreenUtil().screenWidth, + height: 64.h, + child: TextButton( + onPressed: () { + Navigator.pushNamed(context, Routers.recipientInformationPage); + }, + child: Text( + '下一步', + style: TextStyle(fontSize: 28.sp, color: Colors.white), + )), + ), + ); + } +} diff --git a/star_lock/lib/translations/lanKeyEntity.dart b/star_lock/lib/translations/lanKeyEntity.dart index ddf9fac9..30d51c93 100644 --- a/star_lock/lib/translations/lanKeyEntity.dart +++ b/star_lock/lib/translations/lanKeyEntity.dart @@ -198,6 +198,8 @@ class LanKeyEntity { this.authorizedAdmin, this.lockGroup, this.transferSmartLock, + this.selectiveLock, + this.recipientInformation, this.transferGateway, this.multiLanguage, this.lockScreen, @@ -564,6 +566,8 @@ class LanKeyEntity { authorizedAdmin = json['authorizedAdmin']; lockGroup = json['lockGroup']; transferSmartLock = json['transferSmartLock']; + selectiveLock = json['selectiveLock']; + recipientInformation = json['recipientInformation']; transferGateway = json['transferGateway']; multiLanguage = json['multiLanguage']; @@ -946,6 +950,8 @@ class LanKeyEntity { String? authorizedAdmin; String? lockGroup; String? transferSmartLock; + String? selectiveLock; + String? recipientInformation; String? transferGateway; String? multiLanguage; @@ -1324,6 +1330,8 @@ class LanKeyEntity { map['authorizedAdmin'] = authorizedAdmin; map['lockGroup'] = lockGroup; map['transferSmartLock'] = transferSmartLock; + map['selectiveLock'] = selectiveLock; + map['recipientInformation'] = recipientInformation; map['transferGateway'] = transferGateway; map['multiLanguage'] = multiLanguage; From 3ff5e63d5398e28577640cea157ce692b7189d49 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Wed, 26 Jul 2023 09:23:25 +0800 Subject: [PATCH 4/4] =?UTF-8?q?1=EF=BC=8C=E6=9B=B4=E6=96=B0=E9=83=A8?= =?UTF-8?q?=E5=88=86UI=202=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=9B=BE=E7=89=87=203=EF=BC=8C=E6=96=B0=E5=A2=9E=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E7=BD=91=E5=85=B3=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/controls_user.png | Bin 0 -> 4127 bytes star_lock/images/getewayType_G2.png | Bin 0 -> 6143 bytes star_lock/images/icon_btn_add.png | Bin 0 -> 1711 bytes star_lock/images/icon_fingerprint.png | Bin 0 -> 8193 bytes star_lock/images/icon_password.png | Bin 0 -> 3640 bytes star_lock/images/lan/lan_zh.json | 2 +- .../images/lockType/addLock_touchScreen.png | Bin 0 -> 39349 bytes .../images/lockType/lockType_allLocks.png | Bin 0 -> 11622 bytes .../images/lockType/lockType_bicycleLock.png | Bin 0 -> 5828 bytes .../images/lockType/lockType_doorLock.png | Bin 0 -> 4264 bytes .../lockType/lockType_intelligentLockCore.png | Bin 0 -> 3941 bytes .../images/lockType/lockType_padlock.png | Bin 0 -> 5438 bytes .../images/lockType/lockType_parkingLock.png | Bin 0 -> 8086 bytes .../lockType/lockType_remoteControl.png | Bin 0 -> 5985 bytes .../images/lockType/lockType_safeLock.png | Bin 0 -> 8089 bytes star_lock/lib/appRouters.dart | 7 +- .../authorizedAdminList_page.dart | 100 ++++++---- .../electronicKeyList_page.dart | 167 +++++++++------- .../ImportOtherLockData_page.dart | 108 ++++++---- .../lockDetail/lockDetail_page.dart | 188 +++++++++++------- .../lockOperatingRecord_page.dart | 131 +++++++----- .../otherTypeKeyList_page.dart | 109 ++++++---- .../passwordKeyList/passwordKeyList_page.dart | 96 +++++---- .../mine/addLock/addLock/addLock_page.dart | 58 +++--- .../seletLockType/seletLockType_page.dart | 97 +++++---- .../gateway/gatewayList/gatewayList_page.dart | 112 ++++++++--- .../lib/mine/message/messageList_page.dart | 55 +++-- .../authorizedAdministratorList_page.dart | 2 +- .../lockUserManageList_page.dart | 32 +-- star_lock/lib/mine/mineSet/mineSet_page.dart | 5 +- .../selectGetewayList_page.dart | 132 ++++++++++++ star_lock/lib/tools/commonItem.dart | 2 +- star_lock/lib/tools/submitBtn.dart | 69 +++++-- star_lock/pubspec.yaml | 1 + 34 files changed, 995 insertions(+), 478 deletions(-) create mode 100644 star_lock/images/controls_user.png create mode 100644 star_lock/images/getewayType_G2.png create mode 100644 star_lock/images/icon_btn_add.png create mode 100644 star_lock/images/icon_fingerprint.png create mode 100644 star_lock/images/icon_password.png create mode 100644 star_lock/images/lockType/addLock_touchScreen.png create mode 100644 star_lock/images/lockType/lockType_allLocks.png create mode 100644 star_lock/images/lockType/lockType_bicycleLock.png create mode 100644 star_lock/images/lockType/lockType_doorLock.png create mode 100644 star_lock/images/lockType/lockType_intelligentLockCore.png create mode 100644 star_lock/images/lockType/lockType_padlock.png create mode 100644 star_lock/images/lockType/lockType_parkingLock.png create mode 100644 star_lock/images/lockType/lockType_remoteControl.png create mode 100644 star_lock/images/lockType/lockType_safeLock.png create mode 100644 star_lock/lib/mine/mineSet/transferGateway/selectGetewayList_page.dart diff --git a/star_lock/images/controls_user.png b/star_lock/images/controls_user.png new file mode 100644 index 0000000000000000000000000000000000000000..4bb2c1c23c5332fd1fdaa8da3c0ac7f1139442a2 GIT binary patch literal 4127 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 JSR-!{{9pZl*QNjf literal 0 HcmV?d00001 diff --git a/star_lock/images/getewayType_G2.png b/star_lock/images/getewayType_G2.png new file mode 100644 index 0000000000000000000000000000000000000000..2f4920ea11b9bf1f50c364db7ff7ee141c40221e GIT binary patch literal 6143 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 literal 0 HcmV?d00001 diff --git a/star_lock/images/icon_btn_add.png b/star_lock/images/icon_btn_add.png new file mode 100644 index 0000000000000000000000000000000000000000..bc6e692ccdf1ae3f945368d05a4eca93c0b98d0f GIT binary patch literal 1711 zcmV;g22lBlP)Qg1Y% z-e@58BL`7A7#eu3PJF0X%q+eoO}lkpHn+H-Z`Wk$B3u9fJrC#DI9idB#GPL@mA7i4 zi>Q_1@*26H^``VnQMr`)$KPy}dv{mn{6PSK5hijcBZ;$SCUHNThtkJt=y(XEr{pj50 z6tSSk5;Z{2BX7$>{gzo1xpJjgMZ-Uoh*Nf)a&3Z2SsfiiFd?3TQi8I3GAiz?Hr^24 zpQFoJGMT^VE6AteU#q0pwFjJE%M5dSs)nP$28#}h(s&T^-~N*}5jpuTh${G|1O;DY z>)%Nm!_|3>@pXdDN1Qv=Fbe?LnLHLx>Sz`K=B4mhF-@HTpUg0K^AYDxUol<{XYFj> z=V*pO4Ivx_mZ$5yw!faP1LyP7`;Vg;hOC{<`@FSx`7>(|v}~%jvv{b~Z-*NRBE0)W z1m7B?5|(N^i(h-7Wm8v;oeW#cq=XWchl%|nl+E}P69ATyN_mR4OiFmVp_AeL=UnU1 zd!DmB!Q%GPfewcAO2riStsE9q+gW^GshHA!UkAhAo)=dkJhJP-;`Y==o8ermIHTba ziw?dfZE1MKqI0d{49|9(;gdFT0m3W09xQHe0NjSF>STRwBO4MrP1;i1$c9wa$$G$T zxagKN4dIzx4;Hsax8ZU*GqifN$K#O#K*fF899lWrO-28 z0&5zA_er(8)IL=H*B>frw3 z9_9#x2aq~CKb5zIT1l{&pUT@P03^oJicpKunlZ7Y5^&FlGm@w#6*Ikw3^R8Da2rlH zbLSD>{aDCo^$5=`?Ti~p?uS;Bb_^as>JsBxtAE-aj`LFZJcMVKg}ENsOjopcz!Bx8(|`Mf~!e8hDDQm zi_-W@?e}#W;I5gi`yAnsWntA!-R`G%b}~Hm1@6yuGiQa0rXRN`PYV2r2>@YIBE2|$ zJXiU2Lzh#S9n18)M#qrbP|5UNJ41_)*;|X)8lw_IypdGz$&SeBs?qD5?dZD5_5J%o z@ok7dNHTD+$mO;DV37-wN)shRBpfF;My~eO?sJlwvovBoM^T`LklaEM1(!Rgx!|&h z+(PBayFXBZg3p%fH~NZEti;PJ6;pEZT^})(zD}5jQcQ?%z0TLGWt7+SqDnju7j8(2 zTaPlFV z;OIqhStu*wmrUjluMI{;e0#PYcdk5rRhk?2YaZHDRVVBBJ}awQ+M~s~rICZkopf_A zTeswmL&aidQMoj&qPEk@G_OSH;2axA%hSzVp;jx?{sqSfmAC8*=$!xn002ovPDHLk FV1lZKOCbON literal 0 HcmV?d00001 diff --git a/star_lock/images/icon_fingerprint.png b/star_lock/images/icon_fingerprint.png new file mode 100644 index 0000000000000000000000000000000000000000..5a328b79545bab023e79f39ebbde3fd181f86609 GIT binary patch literal 8193 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 Xg56r`-Khe{(h!Y@Ix1C4R$>1Gjqxk! literal 0 HcmV?d00001 diff --git a/star_lock/images/lockType/lockType_doorLock.png b/star_lock/images/lockType/lockType_doorLock.png new file mode 100644 index 0000000000000000000000000000000000000000..a7be3c3ae58e345c7329bddc56a78c4368d0bd5d GIT binary patch literal 4264 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 KMNUMnLSTZQz6fOi literal 0 HcmV?d00001 diff --git a/star_lock/images/lockType/lockType_intelligentLockCore.png b/star_lock/images/lockType/lockType_intelligentLockCore.png new file mode 100644 index 0000000000000000000000000000000000000000..75e9c7dbf44f615822d6acb64746fdd0f24a15f2 GIT binary patch literal 3941 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 u*@} literal 0 HcmV?d00001 diff --git a/star_lock/images/lockType/lockType_padlock.png b/star_lock/images/lockType/lockType_padlock.png new file mode 100644 index 0000000000000000000000000000000000000000..78c19584581ec00321ed3087ec3a60b6d7fe3ad5 GIT binary patch literal 5438 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 UO;@xFuptUjQPNPXkT(zcA9FcyEC2ui literal 0 HcmV?d00001 diff --git a/star_lock/images/lockType/lockType_parkingLock.png b/star_lock/images/lockType/lockType_parkingLock.png new file mode 100644 index 0000000000000000000000000000000000000000..9e174dd39210c35ac870bfd4c2b3f38dd7be95ef GIT binary patch literal 8086 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 XF)a8=O{F_rv?CtLtIL(im<9h2ulS7` literal 0 HcmV?d00001 diff --git a/star_lock/images/lockType/lockType_remoteControl.png b/star_lock/images/lockType/lockType_remoteControl.png new file mode 100644 index 0000000000000000000000000000000000000000..104c3f795aa08e910a20cdb418c72f5dc7eeccca GIT binary patch literal 5985 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 TV%Za6W{$Y8q^Ve}U=jR3x3qOF literal 0 HcmV?d00001 diff --git a/star_lock/images/lockType/lockType_safeLock.png b/star_lock/images/lockType/lockType_safeLock.png new file mode 100644 index 0000000000000000000000000000000000000000..2d4a05f7323baa0b9f3a6e506ca03779fbbcf5b4 GIT binary patch literal 8089 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 MlIShi`xA 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 literal 0 HcmV?d00001 diff --git a/star_lock/lib/appRouters.dart b/star_lock/lib/appRouters.dart index 7311e0af..511ecde2 100644 --- a/star_lock/lib/appRouters.dart +++ b/star_lock/lib/appRouters.dart @@ -3,6 +3,7 @@ import 'package:get/get.dart'; import 'package:star_lock/mine/mineSet/lockGroup/lockGroupList_page.dart'; import 'package:star_lock/mine/mineSet/lockUserManage/lockUserManageList_page.dart'; import 'package:star_lock/mine/mineSet/mineSet_page.dart'; +import 'package:star_lock/mine/mineSet/transferGateway/selectGetewayList_page.dart'; import 'package:star_lock/mine/mineSet/transferSmartLock/recipientInformation_page.dart'; import 'package:star_lock/mine/mineSet/transferSmartLock/selectBranch_page.dart'; import 'package:star_lock/mine/mineSet/transferSmartLock/transferSmartLock_page.dart'; @@ -251,6 +252,7 @@ abstract class Routers { static const transferSmartLockPage = '/transferSmartLockPage'; //转移智能锁 static const recipientInformationPage = '/recipientInformationPage'; //接受人信息 static const selectBranchPage = '/SelectBranchPage'; //选择分店 + static const selectGetewayListPage = '/selectGetewayListPage'; //选择网关 static const starLockLoginPage = '/StarLockLoginPage'; // 登录 static const starLockRegisterPage = '/StarLockRegisterPage'; // 注册 @@ -670,6 +672,9 @@ abstract class AppRouters { name: Routers.recipientInformationPage, page: () => const RecipientInformationPage()), GetPage( - name: Routers.selectBranchPage, page: () => const SelectBranchPage()) + name: Routers.selectBranchPage, page: () => const SelectBranchPage()), + GetPage( + name: Routers.selectGetewayListPage, + page: () => const SelectGetewayListPage()) ]; } diff --git a/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdminList/authorizedAdminList_page.dart b/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdminList/authorizedAdminList_page.dart index 19b2d66f..64441ddf 100644 --- a/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdminList/authorizedAdminList_page.dart +++ b/star_lock/lib/main/lockDetail/authorizedAdmin/authorizedAdminList/authorizedAdminList_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -13,7 +12,8 @@ class AuthorizedAdminListPage extends StatefulWidget { const AuthorizedAdminListPage({Key? key}) : super(key: key); @override - State createState() => _AuthorizedAdminListPageState(); + State createState() => + _AuthorizedAdminListPageState(); } class _AuthorizedAdminListPageState extends State { @@ -21,13 +21,20 @@ class _AuthorizedAdminListPageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.authorizedAdmin!.tr, haveBack:true, backgroundColor: AppColors.mainColor, actionsList: [ - TextButton( - child: Text(TranslationLoader.lanKeys!.reset!.tr, style: const TextStyle(color: Colors.white),), - onPressed: (){ - - },), - ],), + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.authorizedAdmin!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + child: Text( + TranslationLoader.lanKeys!.reset!.tr, + style: const TextStyle(color: Colors.white), + ), + onPressed: () {}, + ), + ], + ), body: Column( children: [ _searchWidget(), @@ -35,24 +42,23 @@ class _AuthorizedAdminListPageState extends State { SubmitBtn( btnName: TranslationLoader.lanKeys!.authorizedAdmin!.tr, borderRadius: 20.w, - margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), + margin: EdgeInsets.only( + left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: (){ + onClick: () { Navigator.pushNamed(context, Routers.authorizedAdminManagePage); - } - ), + }), ], ), ); } - Widget _searchWidget(){ + Widget _searchWidget() { return Container( - height: 80.h, - margin: EdgeInsets.only(top:20.w, left: 20.w, right: 20.w), + height: 60.h, + margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5)), + color: Colors.white, borderRadius: BorderRadius.circular(5)), child: TextField( //输入框一行 maxLines: 1, @@ -67,40 +73,54 @@ class _AuthorizedAdminListPageState extends State { border: InputBorder.none, //左边图标设置 icon: Padding( - padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w), - child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,), + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), ), ), ), ); } - Widget _buildMainUI(){ + Widget _buildMainUI() { return ListView.builder( - itemCount:10, - itemBuilder: (c, index){ - return _electronicKeyItem('images/icon_lock.png', "张三", "2023.6.21 11.15", "2023.6.21 11.15",(){ + itemCount: 10, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { Navigator.pushNamed(context, Routers.authorizedAdminDetailPage); }); - } - ); + }); } - Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, String beginTime, String endTime, Function() action){ + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { return GestureDetector( onTap: action, child: Container( height: 100.h, margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), - decoration: BoxDecoration( + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 30.w,), - Image.asset(lockTypeIcon, width: 50.w, height: 50.w,), - SizedBox(width: 30.w,), + SizedBox( + width: 30.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -108,23 +128,31 @@ class _AuthorizedAdminListPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), ], ), - SizedBox(height:5.h), + SizedBox(height: 5.h), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("2023.6.21 11.15 永久", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Text( + "2023.6.21 11.15 永久", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), diff --git a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyList/electronicKeyList_page.dart b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyList/electronicKeyList_page.dart index 57f9120c..55b18a7a 100644 --- a/star_lock/lib/main/lockDetail/electronicKey/electronicKeyList/electronicKeyList_page.dart +++ b/star_lock/lib/main/lockDetail/electronicKey/electronicKeyList/electronicKeyList_page.dart @@ -19,87 +19,108 @@ class _ElectronicKeyListPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.electronicKey!.tr, haveBack:true, backgroundColor: AppColors.mainColor, actionsList: [ + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.electronicKey!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ TextButton( - child: Text(TranslationLoader.lanKeys!.reset!.tr, style: const TextStyle(color: Colors.white),), - onPressed: (){ - - },), - ],), - body: Column( - children: [ - _searchWidget(), - Expanded(child: _buildMainUI()), - SubmitBtn( - btnName: TranslationLoader.lanKeys!.sendKey!.tr, - borderRadius: 20.w, - margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), - padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: (){ - Navigator.pushNamed(context, Routers.sendElectronicKeyManagePage); - } + child: Text( + TranslationLoader.lanKeys!.reset!.tr, + style: const TextStyle(color: Colors.white), ), - ], - ), + onPressed: () {}, + ), + ], + ), + body: Column( + children: [ + _searchWidget(), + Expanded(child: _buildMainUI()), + SubmitBtn( + btnName: TranslationLoader.lanKeys!.sendKey!.tr, + borderRadius: 20.w, + margin: EdgeInsets.only( + left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), + padding: EdgeInsets.only(top: 25.w, bottom: 25.w), + onClick: () { + Navigator.pushNamed( + context, Routers.sendElectronicKeyManagePage); + }), + ], + ), ); } - Widget _searchWidget(){ + Widget _searchWidget() { return Container( - height: 80.h, - margin: EdgeInsets.only(top:20.w, left: 20.w, right: 20.w), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5)), - child: TextField( - //输入框一行 - maxLines: 1, - // controller: _controller, - autofocus: false, - decoration: InputDecoration( - //输入里面输入文字内边距设置 - contentPadding: const EdgeInsets.only( - top: 12.0, left: -19.0, right: -15.0, bottom: 8.0), - hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr, - //不需要输入框下划线 - border: InputBorder.none, - //左边图标设置 - icon: Padding( - padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w), - child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,), - ), + height: 60.h, + margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), + decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.circular(5)), + child: TextField( + //输入框一行 + maxLines: 1, + // controller: _controller, + autofocus: false, + decoration: InputDecoration( + //输入里面输入文字内边距设置 + contentPadding: const EdgeInsets.only( + top: 12.0, left: -19.0, right: -15.0, bottom: 8.0), + hintText: TranslationLoader.lanKeys!.pleaseEnter!.tr, + //不需要输入框下划线 + border: InputBorder.none, + //左边图标设置 + icon: Padding( + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, ), ), - ); - } - - Widget _buildMainUI(){ - return ListView.builder( - itemCount:10, - itemBuilder: (c, index){ - return _electronicKeyItem('images/icon_lock.png', "张三", "2023.6.21 11.15", "2023.6.21 11.15",(){ - Navigator.pushNamed(context, Routers.electronicKeyDetailPage); - }); - } + ), + ), ); } - Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, String beginTime, String endTime, Function() action){ + Widget _buildMainUI() { + return ListView.builder( + itemCount: 10, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { + Navigator.pushNamed(context, Routers.electronicKeyDetailPage); + }); + }); + } + + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { return GestureDetector( onTap: action, child: Container( height: 100.h, margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), - decoration: BoxDecoration( + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 30.w,), - Image.asset(lockTypeIcon, width: 50.w, height: 50.w,), - SizedBox(width: 30.w,), + SizedBox( + width: 30.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -109,26 +130,38 @@ class _ElectronicKeyListPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), - SizedBox(width:20.w), - Text("待接收", style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w500), ), + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), + SizedBox(width: 20.w), + Text( + "待接收", + style: TextStyle( + fontSize: 24.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.w), + SizedBox(width: 20.w), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("2023.6.21 11.15-2023.6.21 11.15", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Text( + "2023.6.21 11.15-2023.6.21 11.15", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), diff --git a/star_lock/lib/main/lockDetail/lcokSet/importOtherLockData/ImportOtherLockData_page.dart b/star_lock/lib/main/lockDetail/lcokSet/importOtherLockData/ImportOtherLockData_page.dart index d44e60de..a62e92f9 100644 --- a/star_lock/lib/main/lockDetail/lcokSet/importOtherLockData/ImportOtherLockData_page.dart +++ b/star_lock/lib/main/lockDetail/lcokSet/importOtherLockData/ImportOtherLockData_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -12,7 +11,8 @@ class ImportOtherLockDataPage extends StatefulWidget { const ImportOtherLockDataPage({Key? key}) : super(key: key); @override - State createState() => _ImportOtherLockDataPageState(); + State createState() => + _ImportOtherLockDataPageState(); } class _ImportOtherLockDataPageState extends State { @@ -20,43 +20,48 @@ class _ImportOtherLockDataPageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.importOtherLockData!.tr, haveBack:true, backgroundColor: AppColors.mainColor), - body:Container( + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.importOtherLockData!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), + body: Container( padding: EdgeInsets.all(30.w), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Expanded(child: Text(TranslationLoader.lanKeys!.importOtherLockDataTip!.tr)), + Expanded( + child: Text(TranslationLoader + .lanKeys!.importOtherLockDataTip!.tr)), ], ), - SizedBox(height: 20.h,), + SizedBox( + height: 20.h, + ), _searchWidget(), - SizedBox(height: 10.h,), + SizedBox( + height: 10.h, + ), Expanded(child: _buildMainUI()), - SubmitBtn(btnName: TranslationLoader.lanKeys!.sure!.tr, + SubmitBtn( + btnName: TranslationLoader.lanKeys!.sure!.tr, borderRadius: 20.w, fontSize: 32.sp, // margin: EdgeInsets.only(left: 03.w, right: 30.w, top: 20.w), padding: EdgeInsets.only(top: 20.w, bottom: 20.w), - onClick: () { - - } - ), + onClick: () {}), ], ), - ) - ); + )); } - Widget _searchWidget(){ + Widget _searchWidget() { return Container( - height: 70.h, + height: 60.h, // margin: EdgeInsets.only(top:20.w), decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5)), + color: Colors.white, borderRadius: BorderRadius.circular(5)), child: TextField( //输入框一行 maxLines: 1, @@ -71,40 +76,54 @@ class _ImportOtherLockDataPageState extends State { border: InputBorder.none, //左边图标设置 icon: Padding( - padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w), - child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,), + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), ), ), ), ); } - Widget _buildMainUI(){ + Widget _buildMainUI() { return ListView.builder( - itemCount:20, - itemBuilder: (c, index){ - return _electronicKeyItem('images/icon_lock.png', "张三", "2023.6.21 11.15", "2023.6.21 11.15",(){ + itemCount: 20, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { // Navigator.pushNamed(context, Routers.electronicKeyDetailPage); }); - } - ); + }); } - Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, String beginTime, String endTime, Function() action){ + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { return GestureDetector( onTap: action, child: Container( height: 100.h, margin: EdgeInsets.only(top: 15.h), - decoration: BoxDecoration( + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 30.w,), - Image.asset(lockTypeIcon, width: 50.w, height: 50.w,), - SizedBox(width: 30.w,), + SizedBox( + width: 30.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -114,30 +133,41 @@ class _ImportOtherLockDataPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), - SizedBox(width:20.w), - Text("待接收", style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w500), ), + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), + SizedBox(width: 20.w), + Text( + "待接收", + style: TextStyle( + fontSize: 24.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.w), + SizedBox(width: 20.w), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("2023.6.21 11.15-2023.6.21 11.15", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Text( + "2023.6.21 11.15-2023.6.21 11.15", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), ); } - } diff --git a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart index 51050a2c..eec1a81b 100644 --- a/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/star_lock/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -19,103 +18,146 @@ class _LockDetailPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Colors.white, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.starLock!.tr, haveBack:true, backgroundColor: AppColors.mainColor), - body: Column( - children: [ - topWidget(), - Expanded(child: bottomWidget()) - ], - ), + backgroundColor: Colors.white, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.starLock!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), + body: Column( + children: [topWidget(), Expanded(child: bottomWidget())], + ), ); } - Widget topWidget(){ - return Column( - children: [ - SizedBox(height:40.h), - Stack( - alignment: Alignment.centerRight, - children: [ - Align( - alignment:Alignment.center, - child: Text("MCBN01-ea9240", style: TextStyle(fontSize: 36.sp, fontWeight: FontWeight.w500),) - ), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Text("100%", style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w500), ), - SizedBox(width:5.w), - Image.asset('images/main/icon_main_cell.png', width: 50.w, height: 50.w,), - SizedBox(width:30.w), - ], - ), - ], - ), - SizedBox(height: 40.h), - Container( - width: 1.sw, - height: 280.w, - child: Stack( + Widget topWidget() { + return Column( + children: [ + SizedBox(height: 40.h), + Stack( + alignment: Alignment.centerRight, + children: [ + Align( + alignment: Alignment.center, + child: Text( + "MCBN01-ea9240", + style: + TextStyle(fontSize: 36.sp, fontWeight: FontWeight.w500), + )), + Row( + mainAxisAlignment: MainAxisAlignment.end, children: [ - Center(child: Image.asset('images/main/icon_main_openLockBtn.png', width: 280.w, height: 280.w)), - Align( - alignment: const Alignment(0.5, 1), - child: Image.asset('images/main/icon_main_remoteUnlocking.png', width: 90.w, height: 90.w,) + Text( + "100%", + style: + TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w500), ), + SizedBox(width: 5.w), + Image.asset( + 'images/main/icon_main_cell.png', + width: 50.w, + height: 50.w, + ), + SizedBox(width: 30.w), ], ), - ), - SizedBox(height: 40.h,), - Row( - mainAxisAlignment: MainAxisAlignment.center, + ], + ), + SizedBox(height: 40.h), + Container( + width: 1.sw, + height: 280.w, + child: Stack( children: [ - Text(TranslationLoader.lanKeys!.clickUnlockAndHoldDownClose!.tr, style: TextStyle(fontSize: 28.sp, color: const Color(0xFFB3B3B3), fontWeight: FontWeight.w500),), + Center( + child: Image.asset('images/main/icon_main_openLockBtn.png', + width: 280.w, height: 280.w)), + Align( + alignment: const Alignment(0.5, 1), + child: Image.asset( + 'images/main/icon_main_remoteUnlocking.png', + width: 90.w, + height: 90.w, + )), ], ), - SizedBox(height: 40.h,), - Container(height: 0.5.h, color: Colors.grey,) - ], - ); + ), + SizedBox( + height: 40.h, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + TranslationLoader.lanKeys!.clickUnlockAndHoldDownClose!.tr, + style: TextStyle( + fontSize: 24.sp, + color: const Color(0xFFB3B3B3), + fontWeight: FontWeight.w500), + ), + ], + ), + SizedBox( + height: 40.h, + ), + Divider( + height: 1, + color: const Color(0xFFB3B3B3), + indent: 20.w, + endIndent: 20.w, + ) + ], + ); } - Widget bottomWidget(){ + Widget bottomWidget() { return Container( - margin: EdgeInsets.only(left:10.w, right:10.w, top: 25.h), + margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 25.h), // color: Colors.blue, child: SizedBox( - child:GridView.count( + child: GridView.count( crossAxisCount: 4, // childAspectRatio: 3, crossAxisSpacing: 20.w, mainAxisSpacing: 10.h, physics: const NeverScrollableScrollPhysics(), children: [ - bottomItem('images/main/icon_main_clockingIn.png', TranslationLoader.lanKeys!.checkingIn!.tr, (){ + bottomItem('images/main/icon_main_clockingIn.png', + TranslationLoader.lanKeys!.checkingIn!.tr, () { Navigator.pushNamed(context, Routers.checkingInListPage); }), - bottomItem('images/main/icon_main_electronicKey.png', TranslationLoader.lanKeys!.electronicKey!.tr, (){ + bottomItem('images/main/icon_main_electronicKey.png', + TranslationLoader.lanKeys!.electronicKey!.tr, () { Navigator.pushNamed(context, Routers.electronicKeyListPage); }), - bottomItem('images/main/icon_main_password.png', TranslationLoader.lanKeys!.password!.tr, (){ + bottomItem('images/main/icon_main_password.png', + TranslationLoader.lanKeys!.password!.tr, () { Navigator.pushNamed(context, Routers.passwordKeyListPage); }), - bottomItem('images/main/icon_main_icCard.png', TranslationLoader.lanKeys!.card!.tr, (){ - Navigator.pushNamed(context, Routers.otherTypeKeyListPage, arguments: 0); + bottomItem('images/main/icon_main_icCard.png', + TranslationLoader.lanKeys!.card!.tr, () { + Navigator.pushNamed(context, Routers.otherTypeKeyListPage, + arguments: 0); }), - bottomItem('images/main/icon_main_fingerprint.png', TranslationLoader.lanKeys!.fingerprint!.tr, (){ - Navigator.pushNamed(context, Routers.otherTypeKeyListPage, arguments: 1); + bottomItem('images/main/icon_main_fingerprint.png', + TranslationLoader.lanKeys!.fingerprint!.tr, () { + Navigator.pushNamed(context, Routers.otherTypeKeyListPage, + arguments: 1); }), - bottomItem('images/main/icon_main_remoteControl.png', TranslationLoader.lanKeys!.remoteControl!.tr, (){ - Navigator.pushNamed(context, Routers.otherTypeKeyListPage, arguments: 2); + bottomItem('images/main/icon_main_remoteControl.png', + TranslationLoader.lanKeys!.remoteControl!.tr, () { + Navigator.pushNamed(context, Routers.otherTypeKeyListPage, + arguments: 2); }), - bottomItem('images/main/icon_main_authorizedAdmin.png', TranslationLoader.lanKeys!.authorizedAdmin!.tr, (){ + bottomItem('images/main/icon_main_authorizedAdmin.png', + TranslationLoader.lanKeys!.authorizedAdmin!.tr, () { Navigator.pushNamed(context, Routers.authorizedAdminListPage); }), - bottomItem('images/main/icon_main_operatingRecord.png', TranslationLoader.lanKeys!.operatingRecord!.tr, (){ + bottomItem('images/main/icon_main_operatingRecord.png', + TranslationLoader.lanKeys!.operatingRecord!.tr, () { Navigator.pushNamed(context, Routers.lockOperatingRecordPage); }), - bottomItem('images/main/icon_main_set.png', TranslationLoader.lanKeys!.set!.tr, (){ + bottomItem('images/main/icon_main_set.png', + TranslationLoader.lanKeys!.set!.tr, () { Navigator.pushNamed(context, Routers.lockSetPage); }), ], @@ -124,27 +166,31 @@ class _LockDetailPageState extends State { ); } - Widget bottomItem(String iconUrl,String name, Function() onClick){ + Widget bottomItem(String iconUrl, String name, Function() onClick) { var width = 65.w; var height = 70.h; return GestureDetector( - onTap:onClick, + onTap: onClick, child: Container( // height: 300.h, - color: Colors.white, + color: Colors.white, child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( width: width, height: height, - child: Image.asset(iconUrl, width: width,height: height,fit: BoxFit.fitWidth), + child: Image.asset(iconUrl, + width: width, height: height, fit: BoxFit.fitWidth), ), SizedBox(height: 15.w), - Expanded(child: Text(name,style: TextStyle(fontSize: 25.sp, color:const Color(0xff333333)),textAlign: TextAlign.center)) + Expanded( + child: Text(name, + style: TextStyle( + fontSize: 25.sp, color: const Color(0xff333333)), + textAlign: TextAlign.center)) ], - ) - ), + )), ); } } diff --git a/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart b/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart index 629f1de1..83ae0f5e 100644 --- a/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart +++ b/star_lock/lib/main/lockDetail/lockOperatingRecord/lockOperatingRecord_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -12,7 +11,8 @@ class LockOperatingRecordPage extends StatefulWidget { const LockOperatingRecordPage({Key? key}) : super(key: key); @override - State createState() => _LockOperatingRecordPageState(); + State createState() => + _LockOperatingRecordPageState(); } class _LockOperatingRecordPageState extends State { @@ -20,29 +20,42 @@ class _LockOperatingRecordPageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle:TranslationLoader.lanKeys!.operatingRecord!.tr, haveBack:true, backgroundColor: AppColors.mainColor, actionsList: [ - TextButton( - child: const Text("操作", style: TextStyle(color: Colors.white),), - onPressed: (){ - JhPopMenus.showLinePop(context, clickCallback: (index, selText) { - print('选中index: $index'); - print('选中text: $selText'); + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.operatingRecord!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + child: const Text( + "操作", + style: TextStyle(color: Colors.white), + ), + onPressed: () { + JhPopMenus.showLinePop(context, clickCallback: (index, selText) { + print('选中index: $index'); + print('选中text: $selText'); - if (selText == '添加朋友') { - // JhNavUtils.pushNamed(context, 'WxAddFriendPage'); - } - if (selText == '扫一扫') { - // _scan(); - } - }); - },), - ],), + if (selText == '添加朋友') { + // JhNavUtils.pushNamed(context, 'WxAddFriendPage'); + } + if (selText == '扫一扫') { + // _scan(); + } + }); + }, + ), + ], + ), body: Column( children: [ Container( // crossAxisAlignment: CrossAxisAlignment.start, padding: EdgeInsets.all(20.h), - child: Text(TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr, textAlign: TextAlign.start,), + child: Text( + TranslationLoader.lanKeys!.lockOperatingRecordTip!.tr, + textAlign: TextAlign.start, + style: TextStyle(fontSize: 24.sp), + ), ), _searchWidget(), Expanded(child: _buildMainUI()), @@ -51,13 +64,12 @@ class _LockOperatingRecordPageState extends State { ); } - Widget _searchWidget(){ + Widget _searchWidget() { return Container( height: 60.h, margin: EdgeInsets.only(left: 20.w, right: 20.w), decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5)), + color: Colors.white, borderRadius: BorderRadius.circular(5)), child: TextField( //输入框一行 maxLines: 1, @@ -73,84 +85,109 @@ class _LockOperatingRecordPageState extends State { border: InputBorder.none, //左边图标设置 icon: Padding( - padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w), - child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,), + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), ), ), ), ); } - Widget _buildMainUI(){ + Widget _buildMainUI() { return ListView.builder( - itemCount:20, - itemBuilder: (c, index){ - if(index%2 == 0){ + itemCount: 20, + itemBuilder: (c, index) { + if (index % 2 == 0) { return _dateItem("2023-06-29"); - }else{ - return _operatingRecordItem('images/icon_lock.png', "张三", "2023.6.21 11.15", "2023.6.21 11.15",(){ + } else { + return _operatingRecordItem('images/controls_user.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { // Navigator.pushNamed(context, Routers.electronicKeyDetailPage); }); } - } - ); + }); } - Widget _dateItem(String lockDate){ + Widget _dateItem(String lockDate) { return Container( height: 70.h, // color: Colors.red, - padding: EdgeInsets.only(left:20.h, right: 20.h), + padding: EdgeInsets.only(left: 20.h, right: 20.h), child: Row( children: [ - Text(lockDate, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), + Text( + lockDate, + style: TextStyle(fontSize: 28.sp), + ), ], ), ); } - Widget _operatingRecordItem(String lockTypeIcon, String lockTypeTitle, String beginTime, String endTime, Function() action){ + Widget _operatingRecordItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { return GestureDetector( onTap: action, child: Container( - height: 110.h, + height: 90.h, padding: EdgeInsets.only(left: 20.w, right: 20.w), - decoration: BoxDecoration( + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 30.w,), - Image.asset(lockTypeIcon, width: 50.w, height: 50.w,), - SizedBox(width: 30.w,), + SizedBox( + width: 20.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Row( children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 28.sp, color: AppColors.blackColor), + ), ], ), - SizedBox(height:10.h), + SizedBox(height: 10.h), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("2023.6.21 11.15-2023.6.21 11.15", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Text( + "2023.6.21 11.15-2023.6.21 11.15", + style: TextStyle( + fontSize: 28.sp, + color: AppColors.darkGrayTextColor), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), ); } - } diff --git a/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart b/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart index 5b31d911..ec538074 100644 --- a/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart +++ b/star_lock/lib/main/lockDetail/otherTypeKey/otherTypeKeyList/otherTypeKeyList_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -17,38 +16,46 @@ class OtherTypeKeyListPage extends StatefulWidget { } class _OtherTypeKeyListPageState extends State { - @override Widget build(BuildContext context) { var type = ModalRoute.of(context)?.settings.arguments as int; return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: getAppBarTitle(type), haveBack:true, backgroundColor: AppColors.mainColor, actionsList: [ - TextButton( - child: Text(TranslationLoader.lanKeys!.reset!.tr, style: const TextStyle(color: Colors.white),), - onPressed: (){ - - },), - ],), + appBar: TitleAppBar( + barTitle: getAppBarTitle(type), + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + child: Text( + TranslationLoader.lanKeys!.reset!.tr, + style: const TextStyle(color: Colors.white), + ), + onPressed: () {}, + ), + ], + ), body: Column( children: [ _searchWidget(), Expanded(child: _buildMainUI(type)), SubmitBtn( - btnName: '${TranslationLoader.lanKeys!.getTip!.tr} ${getAppBarTitle(type)}', + btnName: + '${TranslationLoader.lanKeys!.getTip!.tr} ${getAppBarTitle(type)}', borderRadius: 20.w, - margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), + margin: EdgeInsets.only( + left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: (){ - Navigator.pushNamed(context, Routers.otherTypeKeyManagePage, arguments: type); - } - ), + onClick: () { + Navigator.pushNamed(context, Routers.otherTypeKeyManagePage, + arguments: type); + }), ], ), ); } - String getAppBarTitle(int type){ + String getAppBarTitle(int type) { String title = ""; switch (type) { case 0: @@ -66,13 +73,12 @@ class _OtherTypeKeyListPageState extends State { return title; } - Widget _searchWidget(){ + Widget _searchWidget() { return Container( - height: 80.h, - margin: EdgeInsets.only(top:20.w, left: 20.w, right: 20.w), + height: 60.h, + margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5)), + color: Colors.white, borderRadius: BorderRadius.circular(5)), child: TextField( //输入框一行 maxLines: 1, @@ -87,40 +93,55 @@ class _OtherTypeKeyListPageState extends State { border: InputBorder.none, //左边图标设置 icon: Padding( - padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w), - child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,), + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), ), ), ), ); } - Widget _buildMainUI(int type){ + Widget _buildMainUI(int type) { return ListView.builder( - itemCount:10, - itemBuilder: (c, index){ - return _electronicKeyItem('images/icon_lock.png', "张三", "2023.6.21 11.15", "2023.6.21 11.15",(){ - Navigator.pushNamed(context, Routers.otherTypeKeyDetailPage, arguments: type); + itemCount: 10, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { + Navigator.pushNamed(context, Routers.otherTypeKeyDetailPage, + arguments: type); }); - } - ); + }); } - Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, String beginTime, String endTime, Function() action){ + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { return GestureDetector( onTap: action, child: Container( height: 100.h, margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), - decoration: BoxDecoration( + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 30.w,), - Image.asset(lockTypeIcon, width: 50.w, height: 50.w,), - SizedBox(width: 30.w,), + SizedBox( + width: 30.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -128,23 +149,31 @@ class _OtherTypeKeyListPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), ], ), - SizedBox(height:5.h), + SizedBox(height: 5.h), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("2023.6.21 11.15 永久", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Text( + "2023.6.21 11.15 永久", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), diff --git a/star_lock/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_page.dart b/star_lock/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_page.dart index fe3ecb2b..b1b742ca 100644 --- a/star_lock/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_page.dart +++ b/star_lock/lib/main/lockDetail/passwordKey/passwordKeyList/passwordKeyList_page.dart @@ -20,13 +20,20 @@ class _PasswordKeyListPageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.password!.tr, haveBack:true, backgroundColor: AppColors.mainColor, actionsList: [ - TextButton( - child: Text(TranslationLoader.lanKeys!.reset!.tr, style: const TextStyle(color: Colors.white),), - onPressed: (){ - - },), - ],), + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.password!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + child: Text( + TranslationLoader.lanKeys!.reset!.tr, + style: const TextStyle(color: Colors.white), + ), + onPressed: () {}, + ), + ], + ), body: Column( children: [ _searchWidget(), @@ -34,24 +41,23 @@ class _PasswordKeyListPageState extends State { SubmitBtn( btnName: TranslationLoader.lanKeys!.getPassword!.tr, borderRadius: 20.w, - margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), + margin: EdgeInsets.only( + left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: (){ + onClick: () { Navigator.pushNamed(context, Routers.passwordKeyManagePage); - } - ), + }), ], ), ); } - Widget _searchWidget(){ + Widget _searchWidget() { return Container( - height: 80.h, - margin: EdgeInsets.only(top:20.w, left: 20.w, right: 20.w), + height: 60.h, + margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5)), + color: Colors.white, borderRadius: BorderRadius.circular(5)), child: TextField( //输入框一行 maxLines: 1, @@ -66,40 +72,54 @@ class _PasswordKeyListPageState extends State { border: InputBorder.none, //左边图标设置 icon: Padding( - padding: EdgeInsets.only(top:30.w, bottom: 20.w, right: 20.w, left: 20.w), - child: Image.asset('images/main/icon_main_search.png', width: 40.w, height: 40.w,), + padding: EdgeInsets.only( + top: 30.w, bottom: 20.w, right: 20.w, left: 20.w), + child: Image.asset( + 'images/main/icon_main_search.png', + width: 40.w, + height: 40.w, + ), ), ), ), ); } - Widget _buildMainUI(){ + Widget _buildMainUI() { return ListView.builder( - itemCount:10, - itemBuilder: (c, index){ - return _electronicKeyItem('images/icon_lock.png', "张三", "2023.6.21 11.15", "2023.6.21 11.15",(){ + itemCount: 10, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { Navigator.pushNamed(context, Routers.passwordKeyDetailPage); }); - } - ); + }); } - Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, String beginTime, String endTime, Function()? action){ + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function()? action) { return GestureDetector( onTap: action, child: Container( height: 100.h, margin: EdgeInsets.only(left: 20.w, right: 20.w, top: 20.w), - decoration: BoxDecoration( + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 30.w,), - Image.asset(lockTypeIcon, width: 50.w, height: 50.w,), - SizedBox(width: 30.w,), + SizedBox( + width: 30.w, + ), + Image.asset( + lockTypeIcon, + width: 50.w, + height: 50.w, + ), + SizedBox( + width: 30.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -107,23 +127,31 @@ class _PasswordKeyListPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), + Text( + lockTypeTitle, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), ], ), - SizedBox(height:5.h), + SizedBox(height: 5.h), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("2023.6.21 11.15 永久", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Text( + "2023.6.21 11.15 永久", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), diff --git a/star_lock/lib/mine/addLock/addLock/addLock_page.dart b/star_lock/lib/mine/addLock/addLock/addLock_page.dart index 3c7e6198..6c8cd325 100644 --- a/star_lock/lib/mine/addLock/addLock/addLock_page.dart +++ b/star_lock/lib/mine/addLock/addLock/addLock_page.dart @@ -16,54 +16,66 @@ class AddLockPage extends StatefulWidget { State createState() => _AddLockPageState(); } -class _AddLockPageState extends State with BaseWidget{ - +class _AddLockPageState extends State with BaseWidget { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.addLock!.tr, haveBack:true, backgroundColor: AppColors.mainColor), + backgroundColor: Colors.white, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.addLock!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), body: Column( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, children: [ - SizedBox(height: 100.h,), + SizedBox( + height: 100.h, + ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text(TranslationLoader.lanKeys!.lightTouchScreen!.tr, style: TextStyle(fontSize: 36.sp, fontWeight: FontWeight.w500),), + Text( + TranslationLoader.lanKeys!.lightTouchScreen!.tr, + style: TextStyle(fontSize: 36.sp, fontWeight: FontWeight.w500), + ), ], ), - SizedBox(height: 120.h,), - Image.asset('images/main/icon_main_addLock.png', width: 150.w, height: 150.w,), - SizedBox(height: 120.h,), + SizedBox( + height: 120.h, + ), + Image.asset( + 'images/lockType/addLock_touchScreen.png', + width: 278.w, + height: 278.w, + ), + SizedBox( + height: 120.h, + ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text(TranslationLoader.lanKeys!.lightTouchScreenTip!.tr, style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500),), + Text( + TranslationLoader.lanKeys!.lightTouchScreenTip!.tr, + style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), - SizedBox(height: 120.h,), + SizedBox( + height: 120.h, + ), SubmitBtn( btnName: TranslationLoader.lanKeys!.next!.tr, borderRadius: 20.w, - margin: EdgeInsets.only(left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), - padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: (){ + onClick: () { Navigator.pushNamed(context, Routers.nearbyLockPage); - } - ), + }), ], ), ); } + void onShow() {} - void onShow(){ - - } - - void onHide(){ - - } + void onHide() {} } diff --git a/star_lock/lib/mine/addLock/seletLockType/seletLockType_page.dart b/star_lock/lib/mine/addLock/seletLockType/seletLockType_page.dart index 1ee17593..27c7af92 100644 --- a/star_lock/lib/mine/addLock/seletLockType/seletLockType_page.dart +++ b/star_lock/lib/mine/addLock/seletLockType/seletLockType_page.dart @@ -15,12 +15,15 @@ class SeletLockTypePage extends StatefulWidget { State createState() => _SeletLockTypePageState(); } -class _SeletLockTypePageState extends State with BaseWidget{ +class _SeletLockTypePageState extends State with BaseWidget { @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.addLock!.tr, haveBack:true, backgroundColor: AppColors.mainColor), + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.addLock!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), body: Column( children: [ allLock(), @@ -33,25 +36,33 @@ class _SeletLockTypePageState extends State with BaseWidget{ crossAxisSpacing: 10, mainAxisSpacing: 10, children: [ - lockTypeItem('images/icon_lock.png', TranslationLoader.lanKeys!.doorLock!.tr, (){ + lockTypeItem('images/lockType/lockType_doorLock.png', + TranslationLoader.lanKeys!.doorLock!.tr, () { Navigator.pushNamed(context, Routers.addLockPage); }), - lockTypeItem('images/icon_lock.png', TranslationLoader.lanKeys!.padlock!.tr, (){ + lockTypeItem('images/lockType/lockType_padlock.png', + TranslationLoader.lanKeys!.padlock!.tr, () { Navigator.pushNamed(context, Routers.addLockPage); }), - lockTypeItem('images/icon_lock.png', TranslationLoader.lanKeys!.safeLock!.tr, (){ + lockTypeItem('images/lockType/lockType_safeLock.png', + TranslationLoader.lanKeys!.safeLock!.tr, () { Navigator.pushNamed(context, Routers.addLockPage); }), - lockTypeItem('images/icon_lock.png', TranslationLoader.lanKeys!.intelligentLockCore!.tr, (){ + lockTypeItem( + 'images/lockType/lockType_intelligentLockCore.png', + TranslationLoader.lanKeys!.intelligentLockCore!.tr, () { Navigator.pushNamed(context, Routers.addLockPage); }), - lockTypeItem('images/icon_lock.png', TranslationLoader.lanKeys!.parkingLock!.tr, (){ + lockTypeItem('images/lockType/lockType_parkingLock.png', + TranslationLoader.lanKeys!.parkingLock!.tr, () { Navigator.pushNamed(context, Routers.addLockPage); }), - lockTypeItem('images/icon_lock.png', TranslationLoader.lanKeys!.bicycleLock!.tr, (){ + lockTypeItem('images/lockType/lockType_bicycleLock.png', + TranslationLoader.lanKeys!.bicycleLock!.tr, () { Navigator.pushNamed(context, Routers.addLockPage); }), - lockTypeItem('images/icon_lock.png', TranslationLoader.lanKeys!.longRangeControl!.tr, (){ + lockTypeItem('images/lockType/lockType_remoteControl.png', + TranslationLoader.lanKeys!.longRangeControl!.tr, () { Navigator.pushNamed(context, Routers.addLockPage); }), ], @@ -63,41 +74,51 @@ class _SeletLockTypePageState extends State with BaseWidget{ ); } - - Widget allLock(){ + Widget allLock() { return GestureDetector( - onTap: (){ - - }, + onTap: () {}, child: Container( height: 150.h, color: Colors.white, margin: const EdgeInsets.all(10), child: Row( children: [ - SizedBox(width:40.w), - Image.asset('images/icon_lock.png', width: 80.w, height: 100.w,), - SizedBox(width:40.w), + SizedBox(width: 40.w), + Image.asset( + 'images/lockType/lockType_allLocks.png', + width: 88.w, + height: 80.w, + ), + SizedBox(width: 40.w), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(TranslationLoader.lanKeys!.allLock!.tr, style: TextStyle(fontSize: 30.sp, fontWeight: FontWeight.w500)), - Text(TranslationLoader.lanKeys!.searchAllLockType!.tr, style: TextStyle(fontSize: 26.sp, fontWeight: FontWeight.w500)), + Text(TranslationLoader.lanKeys!.allLock!.tr, + style: TextStyle( + fontSize: 30.sp, fontWeight: FontWeight.w500)), + Text(TranslationLoader.lanKeys!.searchAllLockType!.tr, + style: TextStyle( + fontSize: 26.sp, fontWeight: FontWeight.w500)), ], ), ), - SizedBox(width:40.w), - Image.asset('images/icon_right.png', width: 60.w, height: 60.w,), - SizedBox(width:40.w), + SizedBox(width: 40.w), + Image.asset( + 'images/icon_right.png', + width: 60.w, + height: 60.w, + ), + SizedBox(width: 40.w), ], ), ), ); } - Widget lockTypeItem(String lockTypeIcon, String lockTypeTitle, Function() action){ + Widget lockTypeItem( + String lockTypeIcon, String lockTypeTitle, Function() action) { return GestureDetector( onTap: action, child: Container( @@ -106,30 +127,38 @@ class _SeletLockTypePageState extends State with BaseWidget{ // margin: EdgeInsets.all(10), child: Row( children: [ - SizedBox(width:20.w), - Image.asset(lockTypeIcon, width: 40.w, height: 50.w,), - SizedBox(width:20.w), + SizedBox(width: 20.w), + Image.asset( + lockTypeIcon, + width: 40.w, + height: 57.w, + ), + SizedBox(width: 20.w), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(lockTypeTitle, style: TextStyle(fontSize: 30.sp, fontWeight: FontWeight.w500)), + Text(lockTypeTitle, + style: TextStyle( + fontSize: 30.sp, fontWeight: FontWeight.w500)), ], ), ), - SizedBox(width:20.w), - Image.asset('images/icon_right.png', width: 60.w, height: 60.w,), - SizedBox(width:20.w), + SizedBox(width: 20.w), + Image.asset( + 'images/icon_right.png', + width: 60.w, + height: 60.w, + ), + SizedBox(width: 20.w), ], ), ), ); } - void onShow(){ - } + void onShow() {} - void onHide(){ - } + void onHide() {} } diff --git a/star_lock/lib/mine/gateway/gatewayList/gatewayList_page.dart b/star_lock/lib/mine/gateway/gatewayList/gatewayList_page.dart index 585f32f4..e247e947 100644 --- a/star_lock/lib/mine/gateway/gatewayList/gatewayList_page.dart +++ b/star_lock/lib/mine/gateway/gatewayList/gatewayList_page.dart @@ -19,42 +19,65 @@ class _GatewayListPageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.gateway!.tr, haveBack:true, backgroundColor: AppColors.mainColor, actionsList: [ - GestureDetector( - onTap: (){ - Navigator.pushNamed(context, Routers.seletGatewayTypePage); - }, - child: Image.asset('images/icon_add_white.png', width: 50.w, height: 50.w,) - ), - SizedBox(width: 30.w,), - ],), + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.gateway!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + GestureDetector( + onTap: () { + Navigator.pushNamed(context, Routers.seletGatewayTypePage); + }, + child: Image.asset( + 'images/icon_add_white.png', + width: 50.w, + height: 50.w, + )), + SizedBox( + width: 30.w, + ), + ], + ), body: ListView.builder( - itemCount:10, - itemBuilder: (c, index){ - return _gatewatListItem('images/mine/icon_mine_gatewayListMainIcon.png', "星锁网关", "在线", "2", (){ + itemCount: 10, + itemBuilder: (c, index) { + return _gatewatListItem( + 'images/mine/icon_mine_gatewayListMainIcon.png', + "星锁网关", + "在线", + "2", () { Navigator.pushNamed(context, Routers.gatewayDetailPage); }); - } - ), + }), ); } - Widget _gatewatListItem(String lockTypeIcon, String gateWayName, String isOnline, String lockNumber, Function() action){ + Widget _gatewatListItem(String lockTypeIcon, String gateWayName, + String isOnline, String lockNumber, Function() action) { return GestureDetector( onTap: action, child: Container( // height: 100.h, margin: const EdgeInsets.only(bottom: 2), - padding: EdgeInsets.only(left: 10.w, right: 20.w, top: 20.h, bottom: 20.h), - decoration: BoxDecoration( + padding: + EdgeInsets.only(left: 10.w, right: 20.w, top: 20.h, bottom: 20.h), + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 10.w,), - Image.asset(lockTypeIcon, width: 90.w, height: 90.w,), - SizedBox(width: 20.w,), + SizedBox( + width: 10.w, + ), + Image.asset( + lockTypeIcon, + width: 60.w, + height: 60.w, + ), + SizedBox( + width: 20.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -64,31 +87,56 @@ class _GatewayListPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(gateWayName, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), + Text( + gateWayName, + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(height:5.h), + SizedBox(height: 5.h), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ - Image.asset('images/mine/icon_mine_gatewayListOnline.png', width: 40.w, height: 40.w,), - SizedBox(width: 10.w,), - Text("在线", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), - SizedBox(width: 80.w,), - Image.asset('images/mine/icon_mine_gatewayListNumber.png', width: 40.w, height: 40.w,), - SizedBox(width: 10.w,), - Text("2", style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Image.asset( + 'images/mine/icon_mine_gatewayListOnline.png', + width: 40.w, + height: 40.w, + ), + SizedBox( + width: 10.w, + ), + Text( + "在线", + style: TextStyle( + fontSize: 24.sp, fontWeight: FontWeight.w500), + ), + SizedBox( + width: 80.w, + ), + Image.asset( + 'images/mine/icon_mine_gatewayListNumber.png', + width: 40.w, + height: 40.w, + ), + SizedBox( + width: 10.w, + ), + Text( + "2", + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ), - SizedBox(width:20.h), - + SizedBox(width: 20.h), ], ), ), diff --git a/star_lock/lib/mine/message/messageList_page.dart b/star_lock/lib/mine/message/messageList_page.dart index c7e4eb80..5cfea2a2 100644 --- a/star_lock/lib/mine/message/messageList_page.dart +++ b/star_lock/lib/mine/message/messageList_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -20,34 +19,47 @@ class _MessageListPageState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, - appBar: TitleAppBar(barTitle: TranslationLoader.lanKeys!.message!.tr, haveBack:true, backgroundColor: AppColors.mainColor), + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.message!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor), body: ListView.builder( - itemCount:10, - itemBuilder: (c, index){ - return _seletGatewayListListItem('images/mine/icon_mine_gatewayListMainIcon.png', "您的钥匙已发送成功", "2023.6.21 11.15", (){ + itemCount: 10, + itemBuilder: (c, index) { + return _seletGatewayListListItem('images/icon_lockGroup_item.png', + "您的钥匙已发送成功", "2023.6.21 11.15", () { // Navigator.pushNamed(context, Routers.gatewayConfigurationWifiPage); }); - } - ), + }), ); } - Widget _seletGatewayListListItem(String lockTypeIcon, String gateWayName, String networkSignal, Function() action){ + Widget _seletGatewayListListItem(String lockTypeIcon, String gateWayName, + String networkSignal, Function() action) { return GestureDetector( onTap: action, child: Container( // height: 100.h, margin: const EdgeInsets.only(bottom: 2), - padding: EdgeInsets.only(left: 10.w, right: 20.w, top: 20.h, bottom: 20.h), - decoration: BoxDecoration( + padding: + EdgeInsets.only(left: 10.w, right: 20.w, top: 20.h, bottom: 20.h), + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10.w), ), child: Row( children: [ - SizedBox(width: 10.w,), - Image.asset(lockTypeIcon, width: 80.w, height: 80.w,), - SizedBox(width: 20.w,), + SizedBox( + width: 10.w, + ), + Image.asset( + lockTypeIcon, + width: 80.w, + height: 80.w, + ), + SizedBox( + width: 20.w, + ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, @@ -57,22 +69,30 @@ class _MessageListPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(gateWayName, style: TextStyle(fontSize: 32.sp, fontWeight: FontWeight.w500), ), + Text( + gateWayName, + style: TextStyle( + fontSize: 32.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(height:5.h), + SizedBox(height: 5.h), Container( child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ // Image.asset('images/mine/icon_mine_gatewaySignal_strong.png', width: 40.w, height: 40.w,), // SizedBox(width: 10.w,), - Text(networkSignal, style: TextStyle(fontSize: 28.sp, fontWeight: FontWeight.w500), ), + Text( + networkSignal, + style: TextStyle( + fontSize: 28.sp, fontWeight: FontWeight.w500), + ), ], ), ), - SizedBox(width:20.h), + SizedBox(width: 20.h), ], ), ) @@ -81,5 +101,4 @@ class _MessageListPageState extends State { ), ); } - } diff --git a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart index 82073e45..42225461 100644 --- a/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart +++ b/star_lock/lib/mine/mineSet/authorizedAdministrator/authorizedAdministratorList_page.dart @@ -46,7 +46,7 @@ class _AuthorizedAdministratorListPageState Widget _searchWidget() { return Container( - height: 80.h, + height: 60.h, margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(5)), diff --git a/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart b/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart index ce9cc138..2b5bef11 100644 --- a/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart +++ b/star_lock/lib/mine/mineSet/lockUserManage/lockUserManageList_page.dart @@ -6,7 +6,6 @@ import '../../../../appRouters.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/titleAppBar.dart'; import '../../../../translations/trans_lib.dart'; -import '../../../tools/submitBtn.dart'; class LockUserManageListListPage extends StatefulWidget { const LockUserManageListListPage({Key? key}) : super(key: key); @@ -40,16 +39,25 @@ class _LockUserManageListListPageState children: [ _searchWidget(), Expanded(child: _buildMainUI()), - SubmitBtn( - btnName: TranslationLoader.lanKeys!.sendGroupKey!.tr, - borderRadius: 20.w, - margin: EdgeInsets.only( - left: 30.w, right: 30.w, top: 30.w, bottom: 30.w), - padding: EdgeInsets.only(top: 25.w, bottom: 25.w), - onClick: () { - Navigator.pushNamed( - context, Routers.massSendElectronicKeyManagePage); - }), + SizedBox( + width: ScreenUtil().screenWidth - 40.w, + height: 80.h, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.white, + ), + onPressed: () {}, + child: Text( + '群发钥匙', + style: TextStyle( + color: AppColors.mainColor, + fontSize: 28.sp, + fontWeight: FontWeight.w600), + )), + ), + SizedBox( + height: 64.h, + ) ], ), ); @@ -57,7 +65,7 @@ class _LockUserManageListListPageState Widget _searchWidget() { return Container( - height: 80.h, + height: 60.h, margin: EdgeInsets.only(top: 20.w, left: 20.w, right: 20.w), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(5)), diff --git a/star_lock/lib/mine/mineSet/mineSet_page.dart b/star_lock/lib/mine/mineSet/mineSet_page.dart index 6310488f..c5fd0330 100644 --- a/star_lock/lib/mine/mineSet/mineSet_page.dart +++ b/star_lock/lib/mine/mineSet/mineSet_page.dart @@ -98,7 +98,10 @@ class _MineSetPageState extends State { leftTitel: TranslationLoader.lanKeys!.transferGateway!.tr, rightTitle: "", isHaveDirection: true, - action: () {}), + action: () { + Navigator.pushNamed( + context, Routers.selectGetewayListPage); + }), SizedBox( height: 10.h, ), diff --git a/star_lock/lib/mine/mineSet/transferGateway/selectGetewayList_page.dart b/star_lock/lib/mine/mineSet/transferGateway/selectGetewayList_page.dart new file mode 100644 index 00000000..5804a64b --- /dev/null +++ b/star_lock/lib/mine/mineSet/transferGateway/selectGetewayList_page.dart @@ -0,0 +1,132 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; + +import '../../../../appRouters.dart'; +import '../../../../app_settings/app_colors.dart'; +import '../../../../tools/titleAppBar.dart'; +import '../../../../translations/trans_lib.dart'; + +class SelectGetewayListPage extends StatefulWidget { + const SelectGetewayListPage({Key? key}) : super(key: key); + + @override + State createState() => _SelectGetewayListPageState(); +} + +class _SelectGetewayListPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.mainBackgroundColor, + appBar: TitleAppBar( + barTitle: TranslationLoader.lanKeys!.selectGateway!.tr, + haveBack: true, + backgroundColor: AppColors.mainColor, + actionsList: [ + TextButton( + onPressed: () {}, + child: Text( + '全选', + style: TextStyle(color: Colors.white, fontSize: 28.sp), + )) + ], + ), + body: Column( + children: [ + SizedBox( + height: 10.h, + ), + Expanded(child: _buildMainUI()), + SizedBox( + height: 20.h, + ), + _buildNextBtn(), + SizedBox( + height: 64.h, + ) + ], + ), + ); + } + + Widget _buildMainUI() { + return ListView.separated( + itemCount: 10, + separatorBuilder: (context, index) { + return Divider( + height: 1, + indent: 20.w, + endIndent: 20.w, + color: AppColors.greyLineColor, + ); + }, + itemBuilder: (c, index) { + return _electronicKeyItem('images/icon_lock.png', "张三", + "2023.6.21 11.15", "2023.6.21 11.15", () { + Navigator.pushNamed(context, Routers.authorizedAdminDetailPage); + }); + }); + } + + Widget _electronicKeyItem(String lockTypeIcon, String lockTypeTitle, + String beginTime, String endTime, Function() action) { + return GestureDetector( + child: Container( + color: Colors.white, + height: 70.h, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: 20.w, + ), + GestureDetector( + child: Image.asset( + 'images/icon_round_unSelet.png', + width: 16, + height: 16, + ), + ), + SizedBox( + width: 16.w, + ), + Image.asset( + 'images/getewayType_G2.png', + width: 60.w, + height: 60.w, + fit: BoxFit.fill, + ), + SizedBox( + width: 16.w, + ), + Text( + '星锁网关', + style: TextStyle(fontSize: 28.sp), + ) + ], + ), + ), + onTap: () {}, + ); + } + + Widget _buildNextBtn() { + return GestureDetector( + child: Container( + color: Colors.grey, + width: ScreenUtil().screenWidth, + height: 64.h, + child: TextButton( + onPressed: () { + Navigator.pushNamed(context, Routers.recipientInformationPage); + }, + child: Text( + '下一步', + style: TextStyle(fontSize: 28.sp, color: Colors.white), + )), + ), + ); + } +} diff --git a/star_lock/lib/tools/commonItem.dart b/star_lock/lib/tools/commonItem.dart index 2c2f33c4..eb0e1cd3 100644 --- a/star_lock/lib/tools/commonItem.dart +++ b/star_lock/lib/tools/commonItem.dart @@ -32,7 +32,7 @@ class CommonItem extends StatelessWidget { // mainAxisAlignment: MainAxisAlignment.center, children: [ Container( - height: allHeight ?? 70.h, + height: allHeight ?? 60.h, color: Colors.white, padding: EdgeInsets.only( left: 20.w, right: 10.w), // , top: 20.w, bottom: 20.w diff --git a/star_lock/lib/tools/submitBtn.dart b/star_lock/lib/tools/submitBtn.dart index 235d9294..a0f8c2c7 100644 --- a/star_lock/lib/tools/submitBtn.dart +++ b/star_lock/lib/tools/submitBtn.dart @@ -4,13 +4,11 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import '../app_settings/app_colors.dart'; - /* * 提交按钮 公用组件 * */ class SubmitBtn extends StatelessWidget { - String? btnName; Function()? onClick; @@ -29,10 +27,39 @@ class SubmitBtn extends StatelessWidget { double? borderRadius; - SubmitBtn({Key? key, required this.btnName,this.borderRadius,this.color,this.padding,this.onClick,this.margin,this.width,this.backgroundColorList,this.fontSize}) : super(key: key); + SubmitBtn( + {Key? key, + required this.btnName, + this.borderRadius, + this.color, + this.padding, + this.onClick, + this.margin, + this.width, + this.backgroundColorList, + this.fontSize}) + : super(key: key); @override Widget build(BuildContext context) { + return SizedBox( + width: ScreenUtil().screenWidth - 40.w, + height: 44, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: AppColors.mainColor, + ), + onPressed: () { + if (onClick != null) { + onClick!(); + } + }, + child: Text( + btnName!, + style: TextStyle(color: Colors.white, fontSize: 30.sp), + )), + ); + /* return GestureDetector( child: Container( width: width??690.w, @@ -41,31 +68,33 @@ class SubmitBtn extends StatelessWidget { bottom: 20.w ), margin: margin??EdgeInsets.only(top: 30.w), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(borderRadius??30.w), - gradient: LinearGradient( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(borderRadius ?? 10.w), + gradient: LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, - colors: backgroundColorList??[ - AppColors.mainColor,AppColors.mainColor, - ], - ) - ), + colors: backgroundColorList ?? + [ + AppColors.mainColor, + AppColors.mainColor, + ], + )), child: Center( - child: Text(btnName!,style: TextStyle( - fontSize: fontSize??36.sp, - height: 1.3, - decoration: TextDecoration.none, - fontWeight: FontWeight.w500, - color: color??Colors.white - )), + child: Text(btnName!, + style: TextStyle( + fontSize: fontSize ?? 30.sp, + height: 1.3, + decoration: TextDecoration.none, + fontWeight: FontWeight.w500, + color: color ?? Colors.white)), ), ), - onTap: (){ - if(onClick!=null){ + onTap: () { + if (onClick != null) { onClick!(); } }, ); + */ } } diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index 70d2abb9..aa73a15a 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -95,6 +95,7 @@ flutter: - images/main/ - images/lan/ - images/mine/ + - images/lockType/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware