feat:新增 ota 升级页面信息显示

This commit is contained in:
anfe 2024-05-13 14:08:21 +08:00
parent 9b6d8285e3
commit c4c95eaa59
10 changed files with 800 additions and 775 deletions

View File

@ -833,5 +833,11 @@
"姓名":"Name", "姓名":"Name",
"发送":"Send", "发送":"Send",
"请确认姓名全名和身份证号码是否正确":"Please confirm that the full name and ID number are correct", "请确认姓名全名和身份证号码是否正确":"Please confirm that the full name and ID number are correct",
"传输期间请勿离开当前页面":"Do not leave the current page during transfer" "传输期间请勿离开当前页面":"Do not leave the current page during transfer",
"机型": "models",
"硬件版本": "Hardware version",
"固件版本": "Firmware version",
"手动升级": "Manual upgrade",
"设备连接中...": "Device Connecting...",
"升级过程中无法开锁,请先开锁后再升级": "The lock cannot be unlocked during the upgrade, please unlock the lock before upgrading"
} }

View File

@ -861,5 +861,11 @@
"姓名":"姓名", "姓名":"姓名",
"发送":"发送", "发送":"发送",
"请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确", "请确认姓名全名和身份证号码是否正确":"请确认姓名全名和身份证号码是否正确",
"传输期间请勿离开当前页面":"传输期间请勿离开当前页面" "传输期间请勿离开当前页面":"传输期间请勿离开当前页面",
"机型": "机型",
"硬件版本": "硬件版本",
"固件版本": "固件版本",
"手动升级": "手动升级",
"设备连接中...": "设备连接中...",
"升级过程中无法开锁,请先开锁后再升级": "升级过程中无法开锁,请先开锁后再升级"
} }

View File

@ -14,7 +14,6 @@
"number": "号", "number": "号",
"additive": "添加者", "additive": "添加者",
"addTime": "添加时间", "addTime": "添加时间",
"reset": "重置", "reset": "重置",
"sendKey": "发送钥匙", "sendKey": "发送钥匙",
"timeLimit": "限时", "timeLimit": "限时",
@ -43,7 +42,6 @@
"fridayShort": "五", "fridayShort": "五",
"saturdayShort": "六", "saturdayShort": "六",
"sundayShort": "日", "sundayShort": "日",
"realNameAuthentication": "实名认证", "realNameAuthentication": "实名认证",
"sendKeyBottomTip": "接收者在有效期内可以不限次数使用", "sendKeyBottomTip": "接收者在有效期内可以不限次数使用",
"send": "发送", "send": "发送",
@ -120,7 +118,6 @@
"leaveEarly": "早退", "leaveEarly": "早退",
"noCardPunched": "未打卡", "noCardPunched": "未打卡",
"holidayInfo": "假日信息", "holidayInfo": "假日信息",
"basicInformation": "基本信息", "basicInformation": "基本信息",
"wirelessKeyboard": "无线键盘", "wirelessKeyboard": "无线键盘",
"doorMagnetic": "门磁", "doorMagnetic": "门磁",
@ -193,7 +190,6 @@
"upgrade": "升级", "upgrade": "升级",
"leisure": "空闲", "leisure": "空闲",
"checkedIn": "已入住", "checkedIn": "已入住",
"lanEnglish": "英文", "lanEnglish": "英文",
"lanChinese": "中文", "lanChinese": "中文",
"multilingual": "多语言", "multilingual": "多语言",
@ -208,7 +204,6 @@
"supportStaff": "客服", "supportStaff": "客服",
"set": "设置", "set": "设置",
"moreServices": "更多服务", "moreServices": "更多服务",
"moreSet": "更多设置", "moreSet": "更多设置",
"prompTone": "提示音", "prompTone": "提示音",
"touchUnlock": "触摸开锁", "touchUnlock": "触摸开锁",
@ -267,7 +262,6 @@
"aboutToExpire": "即将到期", "aboutToExpire": "即将到期",
"changeName": "修改名称", "changeName": "修改名称",
"deAuthorize": "去授权", "deAuthorize": "去授权",
"designation": "名称", "designation": "名称",
"state": "状态", "state": "状态",
"wifiName": "WiFi名称", "wifiName": "WiFi名称",
@ -297,7 +291,6 @@
"preferredDNS": "首选DNS", "preferredDNS": "首选DNS",
"alternativeDNS": "备选DNS", "alternativeDNS": "备选DNS",
"noStaticIPIsUsed": "不使用静态IP", "noStaticIPIsUsed": "不使用静态IP",
"allLock": "所有锁", "allLock": "所有锁",
"searchAllLockType": "搜索所有锁类型", "searchAllLockType": "搜索所有锁类型",
"doorLock": "门锁", "doorLock": "门锁",
@ -314,7 +307,6 @@
"nearbyLock": "附近的锁", "nearbyLock": "附近的锁",
"addSuccessfullyPleaseRename": "如需修改名字请重新命名,点击确定添加锁", "addSuccessfullyPleaseRename": "如需修改名字请重新命名,点击确定添加锁",
"whenAddingLockThePhoneMustBeNextToTheLock": "添加锁时,手机必须在锁旁边", "whenAddingLockThePhoneMustBeNextToTheLock": "添加锁时,手机必须在锁旁边",
"login": "登录", "login": "登录",
"register": "注册", "register": "注册",
"forgetPassword": "忘记密码", "forgetPassword": "忘记密码",
@ -327,20 +319,17 @@
"countryAndRegion": "国家/地区", "countryAndRegion": "国家/地区",
"select": "选择", "select": "选择",
"getVerificationCode": "获取验证码", "getVerificationCode": "获取验证码",
"businessCooperation": "商务合作", "businessCooperation": "商务合作",
"officialWebsite": "官网", "officialWebsite": "官网",
"computerWebVersion": "电脑网页版", "computerWebVersion": "电脑网页版",
"hotelSystem": "酒店系统", "hotelSystem": "酒店系统",
"manualWebVersion": "说明书网页版", "manualWebVersion": "说明书网页版",
"introduce": "介绍", "introduce": "介绍",
"note": "短信", "note": "短信",
"mail": "邮件", "mail": "邮件",
"advancedFunction": "高级功能", "advancedFunction": "高级功能",
"pushMessage": "推送", "pushMessage": "推送",
"recordsRetention": "记录保存", "recordsRetention": "记录保存",
"smsBuyTip": "您可通过短信将密码、电子钥匙信息发给接收人。", "smsBuyTip": "您可通过短信将密码、电子钥匙信息发给接收人。",
"emailBuyTip": "您可通过邮件将密码、电子钥匙信息发给接收人。", "emailBuyTip": "您可通过邮件将密码、电子钥匙信息发给接收人。",
"currentRemainingQuantity": "当前剩余数量", "currentRemainingQuantity": "当前剩余数量",
@ -348,14 +337,12 @@
"customSMSTemplate": "自定义短信模版", "customSMSTemplate": "自定义短信模版",
"customMailTemplate": "自定义邮件模版", "customMailTemplate": "自定义邮件模版",
"record": "记录", "record": "记录",
"buyRealNameTip": "给用户发送电子钥匙时,可以要求其开锁前先进行人脸识别,以保证是他本人在操作。人脸实名认证调用国家公安系统接口,为付费功能,请购买次数后再使用。", "buyRealNameTip": "给用户发送电子钥匙时,可以要求其开锁前先进行人脸识别,以保证是他本人在操作。人脸实名认证调用国家公安系统接口,为付费功能,请购买次数后再使用。",
"buyRealNameSelectYouWantBuyTip": "请选择你希望的实名认证频数", "buyRealNameSelectYouWantBuyTip": "请选择你希望的实名认证频数",
"forTheFirstTime": "仅首次", "forTheFirstTime": "仅首次",
"onceDay": "每日一次", "onceDay": "每日一次",
"weekOnce": "每周一次", "weekOnce": "每周一次",
"monthOnce": "每月一次", "monthOnce": "每月一次",
"currentState": "当前状态", "currentState": "当前状态",
"onTrial": "试用中", "onTrial": "试用中",
"haveNotOpened": "未开通", "haveNotOpened": "未开通",
@ -367,7 +354,6 @@
"tipsForBuyingAdvancedFeatures": "更多的高级功能正在开发中,如果您需要这些功能,欢迎根据锁的数量开通服务。高级功能仅能用于您自己的锁。如果您是授权管理员,请联系锁的最高管理员开通服务。", "tipsForBuyingAdvancedFeatures": "更多的高级功能正在开发中,如果您需要这些功能,欢迎根据锁的数量开通服务。高级功能仅能用于您自己的锁。如果您是授权管理员,请联系锁的最高管理员开通服务。",
"freeTrial": "免费体验", "freeTrial": "免费体验",
"openNow": "立即开通", "openNow": "立即开通",
"buySMS": "购买短信", "buySMS": "购买短信",
"buyMail": "购买邮件", "buyMail": "购买邮件",
"buyRealNameAuthenticationTimes": "购买实名认证次数", "buyRealNameAuthenticationTimes": "购买实名认证次数",
@ -376,7 +362,6 @@
"modeOfPayment": "支付方式", "modeOfPayment": "支付方式",
"alipay": "支付宝", "alipay": "支付宝",
"goToPay": "去支付", "goToPay": "去支付",
"customTemplatesTip": "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人", "customTemplatesTip": "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人",
"haveOpened": "已开通", "haveOpened": "已开通",
"unHaveOpenedTip1": "该功能是高级功能,请开通后再使用", "unHaveOpenedTip1": "该功能是高级功能,请开通后再使用",
@ -395,17 +380,14 @@
"templateTip2": "你收到一把电子钥匙,请使用小程序开门。", "templateTip2": "你收到一把电子钥匙,请使用小程序开门。",
"templateTip3": "或安装App来开门。", "templateTip3": "或安装App来开门。",
"expectedNotoCount": "预计产生短信条数", "expectedNotoCount": "预计产生短信条数",
"templateTip4": "提示:向其他人发送消息时,关键宇", "templateTip4": "提示:向其他人发送消息时,关键宇",
"and": "和", "and": "和",
"willBeReplacedWithTheActualValue": "将替换为实际值", "willBeReplacedWithTheActualValue": "将替换为实际值",
"downloadLink": "下载链接", "downloadLink": "下载链接",
"lockScreenTip": "功能开启后,需使用指纹、人脸或账号密码来打开 APP。3分钟内不需要再次验证", "lockScreenTip": "功能开启后,需使用指纹、人脸或账号密码来打开 APP。3分钟内不需要再次验证",
"hideInvalidUnlockPermissionsTip": "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。", "hideInvalidUnlockPermissionsTip": "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。",
"appUnlockRequiresMobilePhoneAccessToTheLockTip": "对于选中的这些锁当用户用APP开锁时他的手机需要是连网的否则无法开锁", "appUnlockRequiresMobilePhoneAccessToTheLockTip": "对于选中的这些锁当用户用APP开锁时他的手机需要是连网的否则无法开锁",
"checkAll": "全选", "checkAll": "全选",
"wifiDistributionNetwork": "WiFi配网", "wifiDistributionNetwork": "WiFi配网",
"configuringWiFi": "配置WiFi", "configuringWiFi": "配置WiFi",
"pleaseEnterWifiName": "请输入WiFi名字", "pleaseEnterWifiName": "请输入WiFi名字",
@ -416,7 +398,6 @@
"effectiveDay": "有效日", "effectiveDay": "有效日",
"stressCard": "胁迫卡", "stressCard": "胁迫卡",
"stressPassword": "胁迫密码", "stressPassword": "胁迫密码",
"whetherTheEmployeeHasPassword": "员工是否有密码", "whetherTheEmployeeHasPassword": "员工是否有密码",
"whetherTheEmployeeHasCard": "员工是否有卡", "whetherTheEmployeeHasCard": "员工是否有卡",
"whetherTheEmployeeHasFingerprint": "员工是否有指纹", "whetherTheEmployeeHasFingerprint": "员工是否有指纹",
@ -428,7 +409,6 @@
"getFingerprint": "获取指纹", "getFingerprint": "获取指纹",
"safeVerify": "安全验证", "safeVerify": "安全验证",
"deleteAccountTips": "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?", "deleteAccountTips": "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?",
"humanFace": "人脸", "humanFace": "人脸",
"monitoring": "监控", "monitoring": "监控",
"videoLog": "视频日志", "videoLog": "视频日志",
@ -436,7 +416,6 @@
"superAdmin": "超级管理员", "superAdmin": "超级管理员",
"normalUser": "普通用户", "normalUser": "普通用户",
"gatewayDevice": "网关设备", "gatewayDevice": "网关设备",
"illumination": "照明", "illumination": "照明",
"doorOpener": "开门器", "doorOpener": "开门器",
"faceUnlocks": "面容开锁", "faceUnlocks": "面容开锁",
@ -445,7 +424,6 @@
"motorPowerSetting": "电机功率设置", "motorPowerSetting": "电机功率设置",
"bluetoothBroadcast": "蓝牙广播", "bluetoothBroadcast": "蓝牙广播",
"whetherInternetRequiredWhenUnlocking": "开锁时是否需联网", "whetherInternetRequiredWhenUnlocking": "开锁时是否需联网",
"selectTheLockToJoinTheGroup": "选择要加入分组的锁", "selectTheLockToJoinTheGroup": "选择要加入分组的锁",
"lockTrCount": "锁数量", "lockTrCount": "锁数量",
"xiaomiIOTPlatform": "小米IOT平台", "xiaomiIOTPlatform": "小米IOT平台",
@ -453,7 +431,6 @@
"pleaseEnterAGroupName": "请输入分组名称", "pleaseEnterAGroupName": "请输入分组名称",
"hint": "提示", "hint": "提示",
"areYouSureYouWantToDeleteIt": "确定要删除吗?", "areYouSureYouWantToDeleteIt": "确定要删除吗?",
"faceUnlocksSet": "面容开锁设置", "faceUnlocksSet": "面容开锁设置",
"automaticBrighteningScreen": "自动亮屏", "automaticBrighteningScreen": "自动亮屏",
"sensingDistance": "感应距离", "sensingDistance": "感应距离",
@ -464,23 +441,19 @@
"closeRange": "近距离", "closeRange": "近距离",
"addAndUseFaceWhenUnlocking": "添加和使用面容开锁时", "addAndUseFaceWhenUnlocking": "添加和使用面容开锁时",
"addAndUseFaceWhenUnlockingTip": "\n1、请尽量保持单人在门前操作\n2、请站立在门锁正前方约0.5~0.8米,面向门锁;\n3、请保持脸部无遮挡露出五官\n4、面容识别异常时可触摸数字键盘任意按键手动重启人脸识别。", "addAndUseFaceWhenUnlockingTip": "\n1、请尽量保持单人在门前操作\n2、请站立在门锁正前方约0.5~0.8米,面向门锁;\n3、请保持脸部无遮挡露出五官\n4、面容识别异常时可触摸数字键盘任意按键手动重启人脸识别。",
"second": "秒", "second": "秒",
"motorPowerSettingTip": "请根据门锁实际情况,请谨慎选择电机功率:", "motorPowerSettingTip": "请根据门锁实际情况,请谨慎选择电机功率:",
"miniwatt": "小功率:", "miniwatt": "小功率:",
"miniwattTip": "耗电少", "miniwattTip": "耗电少",
"highPower": "大功率:", "highPower": "大功率:",
"highPowerTip": "如果开锁时锁舌不能正常收回,,或需要带动\n天地钩建议选择大功率。此时耗电将会\n增加。", "highPowerTip": "如果开锁时锁舌不能正常收回,,或需要带动\n天地钩建议选择大功率。此时耗电将会\n增加。",
"openingDirectionSetTip": "请谨慎选择您家的开门方向(如果选择错误,将无法正常开关门):", "openingDirectionSetTip": "请谨慎选择您家的开门方向(如果选择错误,将无法正常开关门):",
"openLeft": "左开", "openLeft": "左开",
"openRight": "右开", "openRight": "右开",
"judgmentMethod": "判断方法:\n", "judgmentMethod": "判断方法:\n",
"judgmentMethodContent": "人站在屋外,面向入户门。\n如果门的合页或门轴在左边则门是左开\n如果门的合页或门轴在右边则门是右开。\n如果设置错误将无法正常开关门。\n建议由安装或维修人员操作。", "judgmentMethodContent": "人站在屋外,面向入户门。\n如果门的合页或门轴在左边则门是左开\n如果门的合页或门轴在右边则门是右开。\n如果设置错误将无法正常开关门。\n建议由安装或维修人员操作。",
"customMode": "自定义模式", "customMode": "自定义模式",
"videoSlot": "录像时段", "videoSlot": "录像时段",
"密码": "密码", "密码": "密码",
"卡": "卡", "卡": "卡",
"指纹": "指纹", "指纹": "指纹",
@ -710,7 +683,6 @@
"密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。": "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。", "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。": "密码生成后请在当日2359前使用一次进行激活否则过0点后未激活则失效。密码激活后有效期内不限次数使用。",
"密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。": "密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。", "密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。": "密码生成后请在当日2359前使用否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。",
"密码不一致哦": "密码不一致哦", "密码不一致哦": "密码不一致哦",
"相机": "相机", "相机": "相机",
"相册": "相册", "相册": "相册",
"读写": "读写", "读写": "读写",
@ -727,10 +699,8 @@
"请手动在系统设置中开启": "请手动在系统设置中开启", "请手动在系统设置中开启": "请手动在系统设置中开启",
"权限以继续使用应用": "权限以继续使用应用。", "权限以继续使用应用": "权限以继续使用应用。",
"去设置": "去设置", "去设置": "去设置",
"虹膜": "虹膜", "虹膜": "虹膜",
"手掌": "手掌", "手掌": "手掌",
"商城": "商城", "商城": "商城",
"我的": "我的", "我的": "我的",
"微信公众号推送": "微信公众号推送", "微信公众号推送": "微信公众号推送",
@ -826,7 +796,6 @@
"当前剩余数量": "当前剩余数量", "当前剩余数量": "当前剩余数量",
"购买": "购买", "购买": "购买",
"实名认证为付费功能,请购买后再使用": "实名认证为付费功能,请购买后再使用", "实名认证为付费功能,请购买后再使用": "实名认证为付费功能,请购买后再使用",
"退出添加": "退出添加", "退出添加": "退出添加",
"管理员已满": "管理员已满", "管理员已满": "管理员已满",
"用户已满": "用户已满", "用户已满": "用户已满",
@ -840,12 +809,10 @@
"密码已存在": "密码已存在", "密码已存在": "密码已存在",
"请输入密码": "请输入密码", "请输入密码": "请输入密码",
"暂无密码,无需重置": "暂无密码,无需重置", "暂无密码,无需重置": "暂无密码,无需重置",
"真实姓名": "真实姓名", "真实姓名": "真实姓名",
"身份证号": "身份证号", "身份证号": "身份证号",
"请输入真实姓名": "请输入真实姓名", "请输入真实姓名": "请输入真实姓名",
"请输入身份证号": "请输入身份证号", "请输入身份证号": "请输入身份证号",
"点击返回设备配对": "点击返回设备配对", "点击返回设备配对": "点击返回设备配对",
"无法连接?尝试升级": "无法连接?尝试升级", "无法连接?尝试升级": "无法连接?尝试升级",
"固件升级提示": "固件升级提示", "固件升级提示": "固件升级提示",
@ -864,6 +831,11 @@
"姓名": "姓名", "姓名": "姓名",
"发送": "发送", "发送": "发送",
"请确认姓名全名和身份证号码是否正确": "请确认姓名全名和身份证号码是否正确", "请确认姓名全名和身份证号码是否正确": "请确认姓名全名和身份证号码是否正确",
"传输期间请勿离开当前页面":"传输期间请勿离开当前页面" "传输期间请勿离开当前页面": "传输期间请勿离开当前页面",
"机型": "机型",
"硬件版本": "硬件版本",
"固件版本": "固件版本",
"手动升级": "手动升级",
"设备连接中...": "设备连接中...",
"升级过程中无法开锁,请先开锁后再升级": "升级过程中无法开锁,请先开锁后再升级"
} }

View File

@ -280,6 +280,17 @@ class BlueManage {
} }
} }
} }
// String listStr = scanDevices
// // .where((element) =>
// // element.advertisementData.advName == 'TMH_dc8f928369ed')
// .map((e) => 'advName:${e.advertisementData.advName} '
// 'serviceUuids:${e.advertisementData.serviceUuids} '
// '是否被重置:${e.advertisementData.serviceUuids[0].toString()[31]}')
// .join(',')
// .toString();
// AppLog.log('--->扫描到的设备 ${listStr} ');
scanDevicesCallBack(scanDevices); scanDevicesCallBack(scanDevices);
// EventBusManager().eventBusFir(scanDevices); // EventBusManager().eventBusFir(scanDevices);
// FlutterBluePlus.stopScan(); // FlutterBluePlus.stopScan();

View File

@ -90,7 +90,7 @@ abstract class Reply{
case 0x0e: case 0x0e:
// //
showErrorMessage("钥匙已存在"); showErrorMessage("钥匙已存在");
AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙无效"); AppLog.log("$logTag ${commandType!.typeName} 0x0e 钥匙已存在");
break; break;
case 0x0f: case 0x0f:
// //
@ -124,7 +124,7 @@ abstract class Reply{
break; break;
case 0xff: case 0xff:
// //
AppLog.log("$logTag ${commandType!.typeName} 0xff"); AppLog.log("$logTag ${commandType!.typeName} 0xff 异常,未知错误");
showErrorMessage("异常,未知错误"); showErrorMessage("异常,未知错误");
break; break;
default: default:

View File

@ -123,10 +123,6 @@ class LockDetailLogic extends BaseGetXController {
signKey: signKeyDataList, signKey: signKeyDataList,
privateKey: getPrivateKeyList, privateKey: getPrivateKeyList,
); );
break;
case 0x07:
//
break; break;
case 0x16: case 0x16:
// ... // ...
@ -138,6 +134,7 @@ class LockDetailLogic extends BaseGetXController {
break; break;
default: default:
// //
cancelBlueConnetctToastTimer();
break; break;
} }
} }

View File

@ -6,6 +6,7 @@ import 'dart:typed_data';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/blue/blue_manage.dart'; import 'package:star_lock/blue/blue_manage.dart';
@ -18,6 +19,7 @@ import 'package:star_lock/blue/sender_manage.dart';
import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart'; import 'package:star_lock/main/lockDetail/lockSet/lockSet/lockSet_logic.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import 'package:star_lock/tools/commonDataManage.dart'; import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/showTipView.dart';
import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/widget/permission/permission_dialog.dart'; import 'package:star_lock/widget/permission/permission_dialog.dart';
@ -67,7 +69,15 @@ class LockEscalationLogic extends BaseGetXController {
} }
String md5Str = md5.convert(otaBin!).toString(); String md5Str = md5.convert(otaBin!).toString();
headJson!['fwMd5'] = md5Str; headJson!['fwMd5'] = md5Str;
ShowTipView().showIosTipWithContentDialog("升级过程中无法开锁,请先开锁后再升级".tr,
() async {
blueOTAUpgrade(headJson!, [0, 0, 0, 0]); blueOTAUpgrade(headJson!, [0, 0, 0, 0]);
EasyLoading.show(
status: '设备连接中...'.tr, maskType: EasyLoadingMaskType.black);
Future.delayed(const Duration(seconds: 4), () {
EasyLoading.dismiss();
});
});
} }
// ota // ota
@ -217,7 +227,7 @@ class LockEscalationLogic extends BaseGetXController {
Uint8List bin = data.sublist(binOffset.toInt(), data.length); Uint8List bin = data.sublist(binOffset.toInt(), data.length);
//md5 //md5
String md5Str = md5.convert(bin).toString().toUpperCase(); String md5Str = md5.convert(bin).toString().toUpperCase();
AppLog.log('---> $md5Str ${meta['fwMd5']}'); AppLog.log('固件 md5 检验md5$md5Str 固件信息 md5${meta['fwMd5']}');
if (md5Str != meta['fwMd5']) { if (md5Str != meta['fwMd5']) {
showToast('文件校验失败 0x02'.tr); showToast('文件校验失败 0x02'.tr);
return null; return null;

View File

@ -31,21 +31,24 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
), ),
body: Container( body: Container(
padding: EdgeInsets.all(30.w), padding: EdgeInsets.all(30.w),
child: Column( child: Obx(() {
children: [ return updateView(logic);
Obx(() {
return logic.state.otaUpdateIng.value
? PopScope(
canPop: false,
onPopInvoked: (didPop) async {
if (logic.state.otaUpdateIng.value) {
logic.closeOTADAta();
}
},
child: const SizedBox(),
)
: const SizedBox();
}), }),
));
});
}
Widget updateView(LockEscalationLogic logic) {
if (logic.state.otaUpdateIng.value) {
return otaUpdate(logic);
}
return defaultUpdate(logic);
}
//
Widget defaultUpdate(LockEscalationLogic logic) {
return Column(
children: [
SizedBox( SizedBox(
height: 60.h, height: 60.h,
), ),
@ -63,8 +66,7 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
Text( Text(
// TranslationLoader.lanKeys!.haveNewVersion!.tr, // TranslationLoader.lanKeys!.haveNewVersion!.tr,
"未发现新版本", "未发现新版本",
style: TextStyle( style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
fontSize: 24.sp, fontWeight: FontWeight.w600),
) )
], ],
), ),
@ -73,8 +75,7 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
), ),
Text( Text(
"${TranslationLoader.lanKeys!.currentVersion!.tr}1.0.0", "${TranslationLoader.lanKeys!.currentVersion!.tr}1.0.0",
style: TextStyle( style: TextStyle(fontSize: 18.sp, color: AppColors.darkGrayTextColor),
fontSize: 18.sp, color: AppColors.darkGrayTextColor),
), ),
SizedBox( SizedBox(
height: 40.h, height: 40.h,
@ -89,44 +90,74 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
SizedBox( SizedBox(
height: 10.h, height: 10.h,
), ),
Obx(() { Align(
return !logic.state.otaUpdateIng.value alignment: Alignment.topRight,
? Row( child: GestureDetector(
mainAxisAlignment: MainAxisAlignment.end,
children: [
// Container(
// margin: EdgeInsets.only(top: 8, bottom: 8),
// width: Get.width,
// child: Center(
// child: Text(
// // "${TranslationLoader.lanKeys!.newVersion!.tr}1.0.1",
// "未发现新版本",
// style: TextStyle(
// color: AppColors.mainColor,
// fontSize: 18.sp),
// ),
// ),
// ),
GestureDetector(
onTap: () { onTap: () {
logic.otaUpdate(); logic.otaUpdate();
}, },
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text( child: Text(
'手动升级', '手动升级'.tr,
style: TextStyle( style: TextStyle(
color: AppColors.mainColor, color: AppColors.mainColor,
fontSize: 18.sp, fontSize: 18.sp,
fontWeight: FontWeight.w400), fontWeight: FontWeight.w400),
), ),
), ),
) ),
),
], ],
) );
: Padding( }
padding: EdgeInsets.symmetric(
horizontal: 50.w, vertical: 15.h), //ota升级
Widget otaUpdate(LockEscalationLogic logic) {
return Column(
children: [
SizedBox(
height: 20.h,
),
Text(
'${'机型'.tr}${logic.headJson?['platform']}-${logic.headJson?['product']}',
style: TextStyle(
color: AppColors.blackColor,
fontSize: 22.sp,
fontWeight: FontWeight.w600),
),
SizedBox(
height: 10.h,
),
Text(
'${'硬件版本'.tr}${logic.headJson?['hwVersion']}',
style: TextStyle(
color: AppColors.blackColor,
fontSize: 22.sp,
fontWeight: FontWeight.w600),
),
SizedBox(
height: 10.h,
),
Text(
'${'固件版本'.tr}${logic.headJson?['fwVersion']}',
style: TextStyle(
color: AppColors.blackColor,
fontSize: 22.sp,
fontWeight: FontWeight.w600),
),
SizedBox(
height: 20.h,
),
Text(
'传输期间请勿离开当前页面'.tr,
style: TextStyle(
color: AppColors.blackColor,
fontSize: 20.sp,
fontWeight: FontWeight.w400),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.h),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -142,25 +173,19 @@ class _LockEscalationPageState extends State<LockEscalationPage> {
), ),
Expanded( Expanded(
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(Radius.circular(10.r)),
Radius.circular(10.r)),
child: LinearProgressIndicator( child: LinearProgressIndicator(
value: logic value: logic.state.otaProgress.value, // 50%
.state.otaProgress.value, // 50%
backgroundColor: Colors.grey[200], backgroundColor: Colors.grey[200],
valueColor: valueColor:
AlwaysStoppedAnimation<Color>( AlwaysStoppedAnimation<Color>(AppColors.mainColor),
AppColors.mainColor),
), ),
), ),
), ),
], ],
), ),
),
],
); );
}),
],
),
));
});
} }
} }

View File

@ -1,4 +1,3 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -27,12 +26,17 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
backgroundColor: AppColors.mainBackgroundColor, 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( body: Column(
// mainAxisAlignment: MainAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SizedBox(height: 80.h,), SizedBox(
height: 80.h,
),
Container( Container(
margin: EdgeInsets.only(left: 50.w, right: 50.w), margin: EdgeInsets.only(left: 50.w, right: 50.w),
width: 1.sw, width: 1.sw,
@ -40,17 +44,24 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Flexible( Flexible(
child: Text(TranslationLoader.lanKeys!.addSuccessfullyPleaseRename!.tr, style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w500)) child: Text(
), TranslationLoader
.lanKeys!.addSuccessfullyPleaseRename!.tr,
style: TextStyle(
fontSize: 24.sp, fontWeight: FontWeight.w500))),
], ],
), ),
), ),
SizedBox(height: 80.h,), SizedBox(
height: 80.h,
),
Container( Container(
height: 80.h, height: 80.h,
// color: Colors.red, // color: Colors.red,
padding: EdgeInsets.only(left: 50.w, right: 50.w), padding: EdgeInsets.only(left: 50.w, right: 50.w),
child: TextField( child: TextField(
focusNode: state.focusNode,
autofocus: true,
controller: state.aliNameController, controller: state.aliNameController,
onChanged: (v) { onChanged: (v) {
state.aliName.value = v; state.aliName.value = v;
@ -66,35 +77,26 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
// height: 1.1, // height: 1.1,
fontSize: 24.sp, fontSize: 24.sp,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
color: const Color(0xFF999999) color: const Color(0xFF999999)),
),
border: OutlineInputBorder( border: OutlineInputBorder(
///
borderRadius: BorderRadius.all(Radius.circular(50.h)), borderRadius: BorderRadius.all(Radius.circular(50.h)),
///
borderSide: BorderSide( borderSide: BorderSide(
///
color: AppColors.mainColor, color: AppColors.mainColor,
///
width: 1, width: 1,
), ),
), ),
///
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
///
borderRadius: BorderRadius.all(Radius.circular(50.h)), borderRadius: BorderRadius.all(Radius.circular(50.h)),
///
borderSide: BorderSide( borderSide: BorderSide(
///
color: AppColors.mainColor, color: AppColors.mainColor,
///
width: 1, width: 1,
), ),
), ),
) )),
), ),
SizedBox(
height: 120.h,
), ),
SizedBox(height: 120.h,),
SubmitBtn( SubmitBtn(
btnName: TranslationLoader.lanKeys!.sure!.tr, btnName: TranslationLoader.lanKeys!.sure!.tr,
borderRadius: 20.w, borderRadius: 20.w,
@ -104,17 +106,12 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
// top: 30.w, // top: 30.w,
// bottom: 30.w // bottom: 30.w
), ),
padding: EdgeInsets.only( padding: EdgeInsets.only(top: 25.w, bottom: 25.w),
top: 25.w,
bottom: 25.w
),
onClick: () { onClick: () {
logic.addUserConnectBlue(); logic.addUserConnectBlue();
} }),
),
], ],
) ));
);
} }
@override @override
@ -130,6 +127,7 @@ class _SaveLockPageState extends State<SaveLockPage> with RouteAware {
void dispose() { void dispose() {
// TODO: implement dispose // TODO: implement dispose
/// ///
state.focusNode.unfocus();
AppRouteObserver().routeObserver.unsubscribe(this); AppRouteObserver().routeObserver.unsubscribe(this);
super.dispose(); super.dispose();
BlueManage().stopScan(); BlueManage().stopScan();

View File

@ -1,16 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
class SaveLockState { class SaveLockState {
var aliName = ''.obs; var aliName = ''.obs;
var pwdTimestamp = 0.obs; var pwdTimestamp = 0.obs;
var addressInfo = {}.obs; var addressInfo = {}.obs;
TextEditingController aliNameController = TextEditingController(); TextEditingController aliNameController = TextEditingController();
FocusNode focusNode = FocusNode();
var lockUserNo = 0; var lockUserNo = 0;
var lockInfo = {}; var lockInfo = {};
@ -24,6 +23,7 @@ class SaveLockState {
// //
var adminPasswordTF = TextEditingController(); var adminPasswordTF = TextEditingController();
var adminPassword = ''; var adminPassword = '';
var lockId = 0; var lockId = 0;