完善国际化信息
This commit is contained in:
parent
377963c41d
commit
0e99d60cb8
733
lan/lan_en.json
733
lan/lan_en.json
File diff suppressed because it is too large
Load Diff
@ -65,7 +65,7 @@
|
||||
"批量授权锁": "批量授权锁",
|
||||
"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人":"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。":"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。",
|
||||
"排列榜": "排列榜",
|
||||
"排列方式": "排列方式",
|
||||
"早到榜": "早到榜",
|
||||
"迟到榜": "迟到榜",
|
||||
"当前模式": "当前模式",
|
||||
@ -140,7 +140,7 @@
|
||||
|
||||
"开始":"开始",
|
||||
"全天":"全天",
|
||||
"在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭":"在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭",
|
||||
"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。":"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。",
|
||||
"请选择锁音量":"请选择锁音量",
|
||||
"功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。":"功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。",
|
||||
"低":"低",
|
||||
@ -244,9 +244,11 @@
|
||||
"首选DNS": "首选DNS",
|
||||
"备选DNS": "备选DNS",
|
||||
"不使用静态IP": "不使用静态IP",
|
||||
|
||||
"使用静态IP": "使用静态IP",
|
||||
"请输入子网掩码": "请输入子网掩码",
|
||||
"请输入默认网关": "请输入默认网关",
|
||||
"所有锁":"所有锁",
|
||||
"搜索所有锁类型":"搜索所有锁类型",
|
||||
"搜索所有类型的锁":"搜索所有类型的锁",
|
||||
"门锁":"门锁",
|
||||
"挂锁":"挂锁",
|
||||
"保险箱锁":"保险箱锁",
|
||||
@ -375,7 +377,6 @@
|
||||
"人脸":"人脸",
|
||||
"配件商城":"配件商城",
|
||||
"公司名称":"公司名称",
|
||||
"修改公司名字":"修改公司名字",
|
||||
"请输入公司名字":"请输入公司名字",
|
||||
"提示":"提示",
|
||||
"是否删除?":"是否删除?",
|
||||
@ -444,19 +445,18 @@
|
||||
"请输入钥匙名称": "请输入钥匙名称",
|
||||
"修改成功": "修改成功",
|
||||
"冻结": "冻结",
|
||||
"取消冻结": "取消冻结",
|
||||
"解除冻结": "解除冻结",
|
||||
"授权": "授权",
|
||||
"取消授权": "取消授权",
|
||||
"同时解冻其发送的钥匙": "同时解冻其发送的钥匙",
|
||||
"取消冻结会在用户APP连网后生效": "取消冻结会在用户APP连网后生效",
|
||||
"会在用户APP连网后生效": "会在用户APP连网后生效",
|
||||
"同时冻结其发送的钥匙": "同时冻结其发送的钥匙",
|
||||
"冻结会在用户APP连网后生效": "冻结会在用户APP连网后生效",
|
||||
"取消授权会在用户APP连网后生效": "取消授权会在用户APP连网后生效",
|
||||
"授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码",
|
||||
"失效时间需大于生效时间": "失效时间需大于生效时间",
|
||||
"生效时间需大于当前时间": "生效时间需大于当前时间",
|
||||
"失效日期要大于生效日期": "失效日期要大于生效日期",
|
||||
"失效时间要大于生效时间": "失效时间要大于生效时间",
|
||||
"失效时间需晚于生效时间": "失效时间需晚于生效时间",
|
||||
"生效时间需晚于当前时间": "生效时间需晚于当前时间",
|
||||
"失效日期需晚于生效日期": "失效日期需晚于生效日期",
|
||||
"修改有效期": "修改有效期",
|
||||
"生效日期": "生效日期",
|
||||
"失效日期": "失效日期",
|
||||
@ -490,7 +490,7 @@
|
||||
"生效时间不能小于当前时间": "生效时间不能小于当前时间",
|
||||
"结束时间不能小于当前时间": "结束时间不能小于当前时间",
|
||||
"是否为管理员": "是否为管理员",
|
||||
"已连接到锁,请将卡靠近锁的读卡区": "已连接到锁,请将卡靠近锁的读卡区",
|
||||
"已连接到锁,请将卡靠近门锁的读卡区": "已连接到锁,请将卡靠近门锁的读卡区",
|
||||
"尝试连接设备...": "尝试连接设备...",
|
||||
"地理位置": "地理位置",
|
||||
"检查以确保以下地址是正确的": "检查以确保以下地址是正确的",
|
||||
@ -665,7 +665,7 @@
|
||||
"指纹列表":"指纹列表",
|
||||
"经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网":"经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网",
|
||||
"打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。":"打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。",
|
||||
"门未开时间":"门未开时间",
|
||||
"未开门时间":"未开门时间",
|
||||
"添加和使用面容开锁时:":"添加和使用面容开锁时:",
|
||||
"云存":"云存",
|
||||
"本地":"本地",
|
||||
@ -689,7 +689,6 @@
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
|
||||
"不同意":"不同意",
|
||||
"同意":"同意",
|
||||
"当前状态:已开通":"当前状态:已开通",
|
||||
"该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用",
|
||||
"常用程序":"常用程序",
|
||||
"该锁已被重置":"该锁已被重置",
|
||||
@ -853,7 +852,6 @@
|
||||
"添加掌静脉": "添加掌静脉",
|
||||
"胁迫掌静脉": "胁迫掌静脉",
|
||||
"请不要将胁迫掌静脉用于日常开锁": "请不要将胁迫掌静脉用于日常开锁",
|
||||
"添加掌静脉提示": "添加掌静脉提示",
|
||||
"已连接到锁,请自然张开手掌,掌心正对摄像头": "已连接到锁,请自然张开手掌,掌心正对摄像头",
|
||||
"掌静脉详情": "掌静脉详情",
|
||||
"掌静脉号": "掌静脉号",
|
||||
@ -1001,7 +999,7 @@
|
||||
"快退至": "快退至",
|
||||
"暂无视频信息": "暂无视频信息",
|
||||
"加载出错": "加载出错",
|
||||
"距离一个成年人手臂长度": "距离一个成年人手臂长度",
|
||||
"请单人正对门锁,距离一个成年人手臂长度": "请单人正对门锁,距离一个成年人手臂长度",
|
||||
"(约0.6米)。": "(约0.6米)。",
|
||||
"保持脸部无遮挡,露出五官。": "保持脸部无遮挡,露出五官。",
|
||||
"准备好了,开始添加": "准备好了,开始添加",
|
||||
@ -1065,11 +1063,29 @@
|
||||
"退出演示模式": "退出演示模式",
|
||||
"提示:当前界面为展示界面,添加设备后才能继续使用": "提示:当前界面为展示界面,添加设备后才能继续使用",
|
||||
"门已上锁": "门已上锁",
|
||||
"您已在其他设备登录": "您已在其他设备登录",
|
||||
"您的账号在异地登录,如非本人,请尽快修改密码": "您的账号在异地登录,如非本人,请尽快修改密码",
|
||||
"开门成功": "开门成功",
|
||||
"开门失败": "开门失败",
|
||||
"呼叫提醒": "呼叫提醒",
|
||||
"收到来自": "收到来自",
|
||||
"锁的呼叫": "锁的呼叫",
|
||||
"加载数据中": "加载数据中"
|
||||
"加载数据中": "加载数据中",
|
||||
"搜索所有锁类型": "搜索所有锁类型",
|
||||
"锁电量更新时间": "锁电量更新时间",
|
||||
"1月": "1月",
|
||||
"2月": "2月",
|
||||
"3月": "3月",
|
||||
"4月": "4月",
|
||||
"5月": "5月",
|
||||
"6月": "6月",
|
||||
"7月": "7月",
|
||||
"8月": "8月",
|
||||
"9月": "9月",
|
||||
"10月": "10月",
|
||||
"11月": "11月",
|
||||
"12月": "12月",
|
||||
"热门城市": "热门城市",
|
||||
"导出锁数据": "导出锁数据",
|
||||
"一键开锁": "一键开锁",
|
||||
"已开通": "已开通"
|
||||
}
|
||||
|
||||
@ -65,7 +65,7 @@
|
||||
"批量授权锁": "批量授权锁",
|
||||
"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。",
|
||||
"排列榜": "排列榜",
|
||||
"排列方式": "排列方式",
|
||||
"早到榜": "早到榜",
|
||||
"迟到榜": "迟到榜",
|
||||
"当前模式": "当前模式",
|
||||
@ -139,7 +139,7 @@
|
||||
|
||||
"开始": "开始",
|
||||
"全天": "全天",
|
||||
"在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭": "在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭",
|
||||
"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。",
|
||||
"请选择锁音量": "请选择锁音量",
|
||||
"功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。": "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。",
|
||||
"低": "低",
|
||||
@ -243,8 +243,12 @@
|
||||
"首选DNS": "首选DNS",
|
||||
"备选DNS": "备选DNS",
|
||||
"不使用静态IP": "不使用静态IP",
|
||||
"使用静态IP": "使用静态IP",
|
||||
"请输入IP地址": "请输入IP地址",
|
||||
"请输入子网掩码": "请输入子网掩码",
|
||||
"请输入默认网关": "请输入默认网关",
|
||||
"所有锁": "所有锁",
|
||||
"搜索所有锁类型": "搜索所有锁类型",
|
||||
"搜索所有类型的锁": "搜索所有类型的锁",
|
||||
"门锁": "门锁",
|
||||
"挂锁": "挂锁",
|
||||
"保险箱锁": "保险箱锁",
|
||||
@ -357,7 +361,6 @@
|
||||
"人脸": "人脸",
|
||||
"配件商城": "配件商城",
|
||||
"公司名称": "公司名称",
|
||||
"修改公司名字": "修改公司名字",
|
||||
"请输入公司名字": "请输入公司名字",
|
||||
"提示": "提示",
|
||||
"是否删除?": "是否删除?",
|
||||
@ -425,19 +428,18 @@
|
||||
"请输入钥匙名称": "请输入钥匙名称",
|
||||
"修改成功": "修改成功",
|
||||
"冻结": "冻结",
|
||||
"取消冻结": "取消冻结",
|
||||
"解除冻结": "解除冻结",
|
||||
"授权": "授权",
|
||||
"取消授权": "取消授权",
|
||||
"同时解冻其发送的钥匙": "同时解冻其发送的钥匙",
|
||||
"取消冻结会在用户APP连网后生效": "取消冻结会在用户APP连网后生效",
|
||||
"会在用户APP连网后生效": "会在用户APP连网后生效",
|
||||
"同时冻结其发送的钥匙": "同时冻结其发送的钥匙",
|
||||
"冻结会在用户APP连网后生效": "冻结会在用户APP连网后生效",
|
||||
"取消授权会在用户APP连网后生效": "取消授权会在用户APP连网后生效",
|
||||
"授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码",
|
||||
"失效时间需大于生效时间": "失效时间需大于生效时间",
|
||||
"生效时间需大于当前时间": "生效时间需大于当前时间",
|
||||
"失效日期要大于生效日期": "失效日期要大于生效日期",
|
||||
"失效时间要大于生效时间": "失效时间要大于生效时间",
|
||||
"失效时间需晚于生效时间": "失效时间需晚于生效时间",
|
||||
"生效时间需晚于当前时间": "生效时间需晚于当前时间",
|
||||
"失效日期需晚于生效日期": "失效日期需晚于生效日期",
|
||||
"修改有效期": "修改有效期",
|
||||
"生效日期": "生效日期",
|
||||
"失效日期": "失效日期",
|
||||
@ -471,7 +473,7 @@
|
||||
"生效时间不能小于当前时间": "生效时间不能小于当前时间",
|
||||
"结束时间不能小于当前时间": "结束时间不能小于当前时间",
|
||||
"是否为管理员": "是否为管理员",
|
||||
"已连接到锁,请将卡靠近锁的读卡区": "已连接到锁,请将卡靠近锁的读卡区",
|
||||
"已连接到锁,请将卡靠近门锁的读卡区": "已连接到锁,请将卡靠近门锁的读卡区",
|
||||
"尝试连接设备...": "尝试连接设备...",
|
||||
"地理位置": "地理位置",
|
||||
"检查以确保以下地址是正确的": "检查以确保以下地址是正确的",
|
||||
@ -643,7 +645,7 @@
|
||||
"指纹列表": "指纹列表",
|
||||
"经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网": "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网。",
|
||||
"打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。": "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。",
|
||||
"门未开时间": "门未开时间",
|
||||
"未开门时间": "未开门时间",
|
||||
"添加和使用面容开锁时:": "添加和使用面容开锁时:",
|
||||
"云存": "云存",
|
||||
"本地": "本地",
|
||||
@ -667,7 +669,6 @@
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
|
||||
"不同意": "不同意",
|
||||
"同意": "同意",
|
||||
"当前状态:已开通": "当前状态:已开通",
|
||||
"该功能是高级功能,请开通后再使用": "该功能是高级功能,请开通后再使用",
|
||||
"常用程序": "常用程序",
|
||||
"该锁已被重置": "该锁已被重置",
|
||||
@ -819,7 +820,6 @@
|
||||
"添加掌静脉": "添加掌静脉",
|
||||
"胁迫掌静脉": "胁迫掌静脉",
|
||||
"请不要将胁迫掌静脉用于日常开锁": "请不要将胁迫掌静脉用于日常开锁",
|
||||
"添加掌静脉提示": "添加掌静脉提示",
|
||||
"已连接到锁,请自然张开手掌,掌心正对摄像头": "已连接到锁,请自然张开手掌,掌心正对摄像头",
|
||||
"掌静脉详情": "掌静脉详情",
|
||||
"掌静脉号": "掌静脉号",
|
||||
@ -967,7 +967,7 @@
|
||||
"快退至": "快退至",
|
||||
"暂无视频信息": "暂无视频信息",
|
||||
"加载出错": "加载出错",
|
||||
"距离一个成年人手臂长度": "距离一个成年人手臂长度",
|
||||
"请单人正对门锁,距离一个成年人手臂长度": "请单人正对门锁,距离一个成年人手臂长度",
|
||||
"(约0.6米)。": "(约0.6米)。",
|
||||
"保持脸部无遮挡,露出五官。": "保持脸部无遮挡,露出五官。",
|
||||
"准备好了,开始添加": "准备好了,开始添加",
|
||||
@ -1031,11 +1031,30 @@
|
||||
"退出演示模式": "退出演示模式",
|
||||
"提示:当前界面为展示界面,添加设备后才能继续使用": "提示:当前界面为展示界面,添加设备后才能继续使用",
|
||||
"门已上锁": "门已上锁",
|
||||
"您已在其他设备登录": "您已在其他设备登录",
|
||||
"您的账号在异地登录,如非本人,请尽快修改密码": "您的账号在异地登录,如非本人,请尽快修改密码",
|
||||
"开门成功": "开门成功",
|
||||
"开门失败": "开门失败",
|
||||
"呼叫提醒": "呼叫提醒",
|
||||
"收到来自": "收到来自",
|
||||
"锁的呼叫": "锁的呼叫",
|
||||
"加载数据中": "加载数据中"
|
||||
"加载数据中": "加载数据中",
|
||||
"搜索所有锁类型": "搜索所有锁类型",
|
||||
"锁电量更新时间": "锁电量更新时间",
|
||||
"1月": "1月",
|
||||
"2月": "2月",
|
||||
"3月": "3月",
|
||||
"4月": "4月",
|
||||
"5月": "5月",
|
||||
"6月": "6月",
|
||||
"7月": "7月",
|
||||
"8月": "8月",
|
||||
"9月": "9月",
|
||||
"10月": "10月",
|
||||
"11月": "11月",
|
||||
"12月": "12月",
|
||||
"热门城市": "热门城市",
|
||||
"导出锁数据": "导出锁数据",
|
||||
"一键开锁": "一键开锁",
|
||||
"已开通": "已开通"
|
||||
|
||||
}
|
||||
|
||||
@ -76,6 +76,7 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
|
||||
}
|
||||
AppManager().setLanCode(
|
||||
code: '${locale!.languageCode}_${locale.countryCode}');
|
||||
// AppLog.log('1111locale:$locale');
|
||||
return locale;
|
||||
},
|
||||
locale: StoreService.to.getLanguageCode()!.isNotEmpty
|
||||
|
||||
@ -52,11 +52,11 @@ class F {
|
||||
static String get title {
|
||||
switch (appFlavor) {
|
||||
case Flavor.local:
|
||||
return '星锁-local';
|
||||
return '${'星锁'.tr}-local';
|
||||
case Flavor.dev:
|
||||
return '星锁-dev';
|
||||
return '${'星锁'.tr}-dev';
|
||||
case Flavor.pre:
|
||||
return '星锁-pre';
|
||||
return '${'星锁'.tr}-pre';
|
||||
case Flavor.sky:
|
||||
return '锁通通'.tr;
|
||||
case Flavor.xhj:
|
||||
|
||||
@ -152,70 +152,7 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
|
||||
],
|
||||
),
|
||||
),
|
||||
Container(
|
||||
color: Colors.transparent,
|
||||
padding: EdgeInsets.symmetric(vertical: 30.h, horizontal: 40.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Obx(
|
||||
() => GestureDetector(
|
||||
onTap: () {
|
||||
state.agree.value = !state.agree.value;
|
||||
logic.changeAgreeState();
|
||||
},
|
||||
child: Container(
|
||||
width: 40.w,
|
||||
height: 40.w,
|
||||
// color: Colors.red,
|
||||
padding: EdgeInsets.only(
|
||||
left: 5.w,
|
||||
right: 10.w,
|
||||
),
|
||||
child: Image.asset(
|
||||
state.agree.value
|
||||
? 'images/icon_round_select.png'
|
||||
: 'images/icon_round_unSelect.png',
|
||||
width: 20.w,
|
||||
height: 20.w,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Row(children: <Widget>[
|
||||
Text('我已阅读并同意'.tr,
|
||||
style: TextStyle(
|
||||
color: const Color(0xff333333), fontSize: 20.sp)),
|
||||
GestureDetector(
|
||||
child: Text(
|
||||
'《${"用户协议".tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.userAgreementURL,
|
||||
'title': '用户协议'.tr
|
||||
});
|
||||
},
|
||||
),
|
||||
GestureDetector(
|
||||
child: Text(
|
||||
'《${"隐私政策".tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.privacyPolicyURL,
|
||||
'title': '隐私政策'.tr
|
||||
});
|
||||
},
|
||||
),
|
||||
]),
|
||||
],
|
||||
),
|
||||
),
|
||||
_buildBottomAgreement(),
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 40.w),
|
||||
child: Column(
|
||||
@ -383,4 +320,113 @@ class _StarLockLoginPageState extends State<StarLockLoginXHJPage> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildBottomAgreement() {
|
||||
return Container(
|
||||
width: 1.sw,
|
||||
padding: EdgeInsets.only(left: 40.w, bottom:30.w, right: 40.w, top: 40.h),
|
||||
child: Wrap(
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Obx(() => GestureDetector(
|
||||
onTap: () {
|
||||
state.agree.value = !state.agree.value;
|
||||
logic.changeAgreeState();
|
||||
},
|
||||
child: Container(
|
||||
width: 40.w,
|
||||
height: 40.w,
|
||||
// color: Colors.red,
|
||||
padding: EdgeInsets.only(
|
||||
left: 5.w,
|
||||
right: 10.w,
|
||||
),
|
||||
child: Image.asset(
|
||||
state.agree.value
|
||||
? 'images/icon_round_select.png'
|
||||
: 'images/icon_round_unSelect.png',
|
||||
width: 20.w,
|
||||
height: 20.w,
|
||||
),
|
||||
)
|
||||
)),
|
||||
SizedBox(
|
||||
width: 10.w,
|
||||
),
|
||||
Text(
|
||||
'我已阅读并同意'.tr,
|
||||
style:
|
||||
TextStyle(color: const Color(0xff333333), fontSize: 20.sp),
|
||||
),
|
||||
GestureDetector(
|
||||
child: Text(
|
||||
'《${'用户协议'.tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.userAgreementURL,
|
||||
'title': '用户协议'.tr
|
||||
});
|
||||
},
|
||||
),
|
||||
GestureDetector(
|
||||
child: Text(
|
||||
'《${'隐私政策'.tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.privacyPolicyURL,
|
||||
'title': '隐私政策'.tr
|
||||
});
|
||||
},
|
||||
)
|
||||
|
||||
// Flexible(
|
||||
// child: Text.rich(
|
||||
// TextSpan(
|
||||
// text: '我已阅读并同意'.tr,
|
||||
// style:
|
||||
// TextStyle(color: const Color(0xff333333), fontSize: 20.sp),
|
||||
// children: <InlineSpan>[
|
||||
// WidgetSpan(
|
||||
// alignment: PlaceholderAlignment.middle,
|
||||
// child: GestureDetector(
|
||||
// child: Text(
|
||||
// '《${'用户协议'.tr}》',
|
||||
// style: TextStyle(
|
||||
// color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
// onTap: () {
|
||||
// Get.toNamed(Routers.webviewShowPage,
|
||||
// arguments: <String, String>{
|
||||
// 'url': XSConstantMacro.userAgreementURL,
|
||||
// 'title': '用户协议'.tr
|
||||
// });
|
||||
// },
|
||||
// )),
|
||||
// WidgetSpan(
|
||||
// alignment: PlaceholderAlignment.middle,
|
||||
// child: GestureDetector(
|
||||
// child: Text(
|
||||
// '《${'隐私政策'.tr}》',
|
||||
// style: TextStyle(
|
||||
// color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
// onTap: () {
|
||||
// Get.toNamed(Routers.webviewShowPage,
|
||||
// arguments: <String, String>{
|
||||
// 'url': XSConstantMacro.privacyPolicyURL,
|
||||
// 'title': '隐私政策'.tr
|
||||
// });
|
||||
// },
|
||||
// )),
|
||||
// ],
|
||||
// )),
|
||||
// )
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -234,68 +234,77 @@ class _StarLockRegisterPageState extends State<StarLockRegisterXHJPage> {
|
||||
}
|
||||
|
||||
Widget _buildBottomAgreement() {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
state.agree.value = !state.agree.value;
|
||||
logic.changeAgreeState();
|
||||
},
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 16.h),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Obx(() => Image.asset(
|
||||
state.agree.value
|
||||
? 'images/icon_round_select.png'
|
||||
: 'images/icon_round_unSelect.png',
|
||||
width: 20.w,
|
||||
height: 20.w,
|
||||
)),
|
||||
SizedBox(
|
||||
width: 15.w,
|
||||
),
|
||||
Flexible(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: '我已阅读并同意'.tr,
|
||||
style:
|
||||
TextStyle(color: const Color(0xff333333), fontSize: 20.sp),
|
||||
children: <InlineSpan>[
|
||||
WidgetSpan(
|
||||
alignment: PlaceholderAlignment.middle,
|
||||
child: GestureDetector(
|
||||
child: Text(
|
||||
'《${'用户协议'.tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.userAgreementURL,
|
||||
'title': '用户协议'.tr
|
||||
});
|
||||
},
|
||||
)),
|
||||
WidgetSpan(
|
||||
alignment: PlaceholderAlignment.middle,
|
||||
child: GestureDetector(
|
||||
child: Text(
|
||||
'《${'隐私政策'.tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.privacyPolicyURL,
|
||||
'title': '隐私政策'.tr
|
||||
});
|
||||
},
|
||||
)),
|
||||
],
|
||||
)),
|
||||
return Padding(
|
||||
padding: EdgeInsets.only(bottom:20.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Obx(() => GestureDetector(
|
||||
onTap: () {
|
||||
state.agree.value = !state.agree.value;
|
||||
logic.changeAgreeState();
|
||||
},
|
||||
child: Container(
|
||||
width: 40.w,
|
||||
height: 40.w,
|
||||
// color: Colors.red,
|
||||
padding: EdgeInsets.only(
|
||||
left: 5.w,
|
||||
right: 10.w,
|
||||
),
|
||||
child: Image.asset(
|
||||
state.agree.value
|
||||
? 'images/icon_round_select.png'
|
||||
: 'images/icon_round_unSelect.png',
|
||||
width: 20.w,
|
||||
height: 20.w,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)),
|
||||
SizedBox(
|
||||
width: 10.w,
|
||||
),
|
||||
Flexible(
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
text: '我已阅读并同意'.tr,
|
||||
style:
|
||||
TextStyle(color: const Color(0xff333333), fontSize: 20.sp),
|
||||
children: <InlineSpan>[
|
||||
WidgetSpan(
|
||||
alignment: PlaceholderAlignment.middle,
|
||||
child: GestureDetector(
|
||||
child: Text(
|
||||
'《${'用户协议'.tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.userAgreementURL,
|
||||
'title': '用户协议'.tr
|
||||
});
|
||||
},
|
||||
)),
|
||||
WidgetSpan(
|
||||
alignment: PlaceholderAlignment.middle,
|
||||
child: GestureDetector(
|
||||
child: Text(
|
||||
'《${'隐私政策'.tr}》',
|
||||
style: TextStyle(
|
||||
color: AppColors.mainColor, fontSize: 20.sp)),
|
||||
onTap: () {
|
||||
Get.toNamed(Routers.webviewShowPage,
|
||||
arguments: <String, String>{
|
||||
'url': XSConstantMacro.privacyPolicyURL,
|
||||
'title': '隐私政策'.tr
|
||||
});
|
||||
},
|
||||
)),
|
||||
],
|
||||
)),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/app_settings/app_colors.dart';
|
||||
import 'package:star_lock/login/selectCountryRegion/common/countryRegionEntity.dart';
|
||||
|
||||
@ -20,7 +21,7 @@ class Utils {
|
||||
static Widget getSusItem(BuildContext context, String tag,
|
||||
{double susHeight = 40}) {
|
||||
if (tag == '★') {
|
||||
tag = '★ 热门城市';
|
||||
tag = '★ ${'热门城市'.tr}';
|
||||
}
|
||||
return Container(
|
||||
height: susHeight,
|
||||
|
||||
@ -5,6 +5,7 @@ import 'dart:io';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:star_lock/flavors.dart';
|
||||
import 'package:star_lock/login/login/app_get_version.dart';
|
||||
import 'package:star_lock/mine/about/debug/debug_tool.dart';
|
||||
@ -15,14 +16,13 @@ import 'package:star_lock/tools/customer_tool.dart';
|
||||
import 'package:star_lock/tools/device_info_service.dart';
|
||||
import 'package:star_lock/tools/pay/wx_pay_tool.dart';
|
||||
import 'package:star_lock/tools/platform_info_services.dart';
|
||||
import 'package:star_lock/tools/storage.dart';
|
||||
import 'package:star_lock/tools/push/xs_jPhush.dart';
|
||||
import 'package:star_lock/tools/storage.dart';
|
||||
import 'package:star_lock/translations/trans_lib.dart';
|
||||
|
||||
import 'app.dart';
|
||||
import 'app_settings/app_settings.dart';
|
||||
import 'tools/store_service.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
// 该文件不可作为编译入口,请查看 flavorizr.yaml 中的说明
|
||||
FutureOr<void> main() async {
|
||||
|
||||
@ -151,7 +151,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ class AddCardTypeLogic extends BaseGetXController{
|
||||
// }
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
// AppLog.log("state.timeLimitBeginTime.value:${state.timeLimitBeginTime.value} startDate:$startDate");
|
||||
|
||||
@ -60,7 +60,7 @@ class _AddICCardPageState extends State<AddICCardPage> with RouteAware {
|
||||
child: Center(
|
||||
child: Obx(() => Text(
|
||||
state.ifConnectScuess.value
|
||||
? '已连接到锁,请将卡靠近锁的读卡区'.tr
|
||||
? '已连接到锁,请将卡靠近门锁的读卡区'.tr
|
||||
: '尝试连接设备...'.tr,
|
||||
style: TextStyle(color: Colors.white, fontSize: 24.sp)))),
|
||||
),
|
||||
|
||||
@ -51,13 +51,13 @@ class _OtherTypeKeyChangeDatePageState extends State<OtherTypeKeyChangeDatePage>
|
||||
state.endTimeTimestamp.value ||
|
||||
state.beginTimeTimestamp.value ==
|
||||
state.endTimeTimestamp.value) {
|
||||
logic.showToast('失效时间需大于生效时间'.tr);
|
||||
logic.showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (state.endTimeTimestamp.value <
|
||||
DateTime.now().millisecondsSinceEpoch) {
|
||||
logic.showToast('生效时间需大于当前时间'.tr);
|
||||
logic.showToast('生效时间需晚于当前时间'.tr);
|
||||
return;
|
||||
}
|
||||
switch (state.pushType.value) {
|
||||
|
||||
@ -58,7 +58,7 @@ class _OtherTypeKeyChangeValidityDatePageState extends State<OtherTypeKeyChangeV
|
||||
|
||||
if (state.starDateTimestamp.value >
|
||||
state.endDateTimestamp.value) {
|
||||
logic.showToast('失效日期要大于生效日期'.tr);
|
||||
logic.showToast('失效日期需晚于生效日期'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ class _OtherTypeKeyChangeValidityDatePageState extends State<OtherTypeKeyChangeV
|
||||
|
||||
if (state.starTimeTimestamp.value >=
|
||||
state.endTimeTimestamp.value) {
|
||||
logic.showToast('失效时间要大于生效时间'.tr);
|
||||
logic.showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -197,7 +197,7 @@ class _CheckingInSetHolidaysPageState extends State<CheckingInSetHolidaysPage> {
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'${state.selectYear.value}${"年".tr}',
|
||||
'${state.selectYear.value}${'年'.tr}',
|
||||
style: TextStyle(color: Colors.white, fontSize: 26.sp),
|
||||
),
|
||||
SizedBox(
|
||||
@ -220,7 +220,7 @@ class _CheckingInSetHolidaysPageState extends State<CheckingInSetHolidaysPage> {
|
||||
// 模式,详见下方
|
||||
mode: DateMode.Y,
|
||||
// 后缀 默认Suffix.normal(),为空的话Suffix()
|
||||
suffix: Suffix(years: ' 年'),
|
||||
suffix: Suffix(years: ' 年'.tr),
|
||||
// 样式 详见下方样式
|
||||
pickerStyle: PickerStyle(
|
||||
cancelButton: GestureDetector(
|
||||
|
||||
@ -93,7 +93,7 @@ class _CheckingInListSeletMonthPageState extends State<CheckingInListSeletMonthP
|
||||
// color: Colors.blue,
|
||||
borderRadius: BorderRadius.circular(40.w),
|
||||
),
|
||||
child: Text('${index + 1}' + '月'.tr, style: TextStyle(fontSize: 24.sp, color: isFutureMonth(widget.selectYear, index + 1) ? Colors.grey : (index+1 == widget.selectMonth ? Colors.white : Colors.black)),
|
||||
child: Text(getMonthTr(index + 1), style: TextStyle(fontSize: 24.sp, color: isFutureMonth(widget.selectYear, index + 1) ? Colors.grey : (index+1 == widget.selectMonth ? Colors.white : Colors.black)),
|
||||
),
|
||||
));
|
||||
},
|
||||
@ -113,4 +113,36 @@ class _CheckingInListSeletMonthPageState extends State<CheckingInListSeletMonthP
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
String getMonthTr(int index){
|
||||
switch (index) {
|
||||
case 1:
|
||||
return '1月'.tr;
|
||||
case 2:
|
||||
return '2月'.tr;
|
||||
case 3:
|
||||
return '3月'.tr;
|
||||
case 4:
|
||||
return '4月'.tr;
|
||||
case 5:
|
||||
return '5月'.tr;
|
||||
case 6:
|
||||
return '6月'.tr;
|
||||
case 7:
|
||||
return '7月'.tr;
|
||||
case 8:
|
||||
return '8月'.tr;
|
||||
case 9:
|
||||
return '9月'.tr;
|
||||
case 10:
|
||||
return '10月'.tr;
|
||||
case 11:
|
||||
return '11月'.tr;
|
||||
case 12:
|
||||
return '12月'.tr;
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -531,7 +531,7 @@ class _CheckingInListPageState extends State<CheckingInListPage> {
|
||||
context,
|
||||
//默认的索引
|
||||
normalIndex: 0,
|
||||
title: '排列榜'.tr,
|
||||
title: '排列方式'.tr,
|
||||
cancelTitle: '取消'.tr,
|
||||
sureTitle: '确定'.tr,
|
||||
//要显示的列表
|
||||
|
||||
@ -131,7 +131,7 @@ class _CheckingInSetPageState extends State<CheckingInSetPage> {
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return ShowTFView(
|
||||
title: '修改公司名字'.tr,
|
||||
title: '修改名字'.tr,
|
||||
tipTitle: '',
|
||||
controller: state.changeNameController,
|
||||
inputFormatters: <TextInputFormatter>[
|
||||
|
||||
@ -33,7 +33,7 @@ class _CheckingInAddStaffPageState extends State<CheckingInAddStaffPage> {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle: state.isAdd.value == '1' ? '添加员工'.tr : '编辑员工'.tr,
|
||||
barTitle: state.isAdd.value == '1' ? '添加员工'.tr : '员工信息'.tr,
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor),
|
||||
body: Column(
|
||||
|
||||
@ -217,7 +217,7 @@ class _DoorLockLogPageState extends State<DoorLockLogPage> with RouteAware {
|
||||
top: 8.0,
|
||||
right: 8.0,
|
||||
child: Obx(() => Text(
|
||||
'${state.currentSelectDate.value.year}年${state.currentSelectDate.value.month}月',
|
||||
'${state.currentSelectDate.value.year}${'年'.tr}${state.currentSelectDate.value.month}${'月'.tr}',
|
||||
style: theme.textTheme.titleMedium!.copyWith(
|
||||
fontSize: 16,
|
||||
color: theme.colorScheme.secondary,
|
||||
|
||||
@ -135,7 +135,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||
}
|
||||
}
|
||||
|
||||
//取消冻结
|
||||
//解除冻结
|
||||
Future<void> cancelFreeze(int includeUnderlings) async {
|
||||
final ElectronicKeyListEntity entity = await ApiRepository.to.cancelFreeze(
|
||||
keyId: state.itemData.value.keyId.toString(),
|
||||
@ -274,7 +274,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||
// 授权管理员
|
||||
textList = <String>[
|
||||
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
|
||||
'取消冻结'.tr
|
||||
'解除冻结'.tr
|
||||
else
|
||||
'冻结'.tr,
|
||||
if (isLockOwner) '取消授权'.tr
|
||||
@ -284,7 +284,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||
if (state.keyType.value == 1 || state.keyType.value == 2) {
|
||||
textList = <String>[
|
||||
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
|
||||
'取消冻结'.tr
|
||||
'解除冻结'.tr
|
||||
else
|
||||
'冻结'.tr,
|
||||
if (state.itemData.value.keyRight == 1) '取消授权'.tr else '授权'.tr
|
||||
@ -292,7 +292,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||
} else if (state.keyType.value == 4) {
|
||||
textList = <String>[
|
||||
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
|
||||
'取消冻结'.tr
|
||||
'解除冻结'.tr
|
||||
else
|
||||
'冻结'.tr
|
||||
];
|
||||
@ -300,7 +300,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||
} else {
|
||||
textList = <String>[
|
||||
if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen)
|
||||
'取消冻结'.tr
|
||||
'解除冻结'.tr
|
||||
else
|
||||
'冻结'.tr,
|
||||
];
|
||||
@ -318,7 +318,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||
if (index == 0) {
|
||||
if (state.itemData.value.keyStatus ==
|
||||
XSConstantMacro.keyStatusFrozen) {
|
||||
// 取消冻结
|
||||
// 解除冻结
|
||||
if (state.itemData.value.keyRight == 1) {
|
||||
// 管理员
|
||||
ShowTipView().showDeleteAdministratorIsHaveAllDataDialog(
|
||||
@ -327,7 +327,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController {
|
||||
});
|
||||
} else {
|
||||
ShowTipView()
|
||||
.showIosTipWithContentDialog('取消冻结会在用户APP连网后生效'.tr, () {
|
||||
.showIosTipWithContentDialog('会在用户APP连网后生效'.tr, () {
|
||||
cancelFreeze(0);
|
||||
});
|
||||
}
|
||||
|
||||
@ -18,12 +18,12 @@ class ElectronicKeyDetailChangeDateLogic extends BaseGetXController {
|
||||
final int beginTimeTimestamp = DateTool().dateToTimestamp(state.beginTime.value, 1);
|
||||
final int endTimeTimestamp = DateTool().dateToTimestamp(state.endTime.value, 1);
|
||||
if (beginTimeTimestamp > endTimeTimestamp || beginTimeTimestamp == endTimeTimestamp) {
|
||||
showToast('失效时间需大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (endTimeTimestamp < DateTime.now().millisecondsSinceEpoch) {
|
||||
showToast('生效时间需大于当前时间'.tr);
|
||||
showToast('生效时间需晚于当前时间'.tr);
|
||||
return;
|
||||
}
|
||||
final KeyOperationRecordEntity entity = await ApiRepository.to.updateKeyDate(
|
||||
|
||||
@ -20,12 +20,12 @@ class ElectronicKeyPeriodValidityLogic extends BaseGetXController {
|
||||
final int endTimeTimestamp = DateTool().dateToTimestamp(state.endTime.value, 0);
|
||||
|
||||
if (starDateTimestamp >= endDateTimestamp) {
|
||||
showToast('失效日期要大于生效日期'.tr);
|
||||
showToast('失效日期需晚于生效日期'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (starTimeTimestamp >= endTimeTimestamp) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
final KeyOperationRecordEntity entity = await ApiRepository.to.updateKeyDate(
|
||||
|
||||
@ -50,7 +50,7 @@ class MassSendElectronicKeyLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -112,7 +112,7 @@ class MassSendElectronicKeyLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
|
||||
endTime = '0';
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -143,7 +143,7 @@ class _SendElectronicKeyViewState extends State<SendElectronicKeyView>
|
||||
rightTitle: '',
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: getTFWidget(
|
||||
false, '请输入姓名'.tr, 2, logic,
|
||||
false, '请输入'.tr, 2, logic,
|
||||
maxSize: 50)),
|
||||
Container(height: 10.h),
|
||||
],
|
||||
|
||||
@ -49,7 +49,7 @@ class AddFaceTypeLogic extends BaseGetXController {
|
||||
// }
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
} else if (state.selectType.value == '2') {
|
||||
|
||||
@ -50,7 +50,7 @@ class AddFingerprintTypeLogic extends BaseGetXController{
|
||||
// }
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
} else if (state.selectType.value == '2') {
|
||||
|
||||
@ -50,7 +50,7 @@ class AddIrisTypeLogic extends BaseGetXController {
|
||||
// }
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
} else if (state.selectType.value == '2') {
|
||||
|
||||
@ -4,6 +4,8 @@ import 'dart:async';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_addFace.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart';
|
||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||
import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart';
|
||||
import 'package:star_lock/main/lockDetail/iris/irisList/irisList_state.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import '../../../../blue/blue_manage.dart';
|
||||
@ -22,7 +24,7 @@ class IrisListLogic extends BaseGetXController {
|
||||
late StreamSubscription<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription =
|
||||
EventBusManager().eventBus!.on<Reply>().listen((reply) {
|
||||
EventBusManager().eventBus!.on<Reply>().listen((Reply reply) {
|
||||
// 添加人脸开始(此处用作删除人脸)
|
||||
if ((reply is SenderAddFaceReply) && (state.isDeletFaceData == true)) {
|
||||
_replyAddFaceBegin(reply);
|
||||
@ -41,7 +43,7 @@ class IrisListLogic extends BaseGetXController {
|
||||
|
||||
// 添加人脸开始---这里用作删除人脸
|
||||
Future<void> _replyAddFaceBegin(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
final int status = reply.data[2];
|
||||
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
@ -57,14 +59,14 @@ class IrisListLogic extends BaseGetXController {
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
// IoSenderManage.senderAddFaceCommand(
|
||||
// keyID:state.deletKeyID,
|
||||
@ -92,7 +94,7 @@ class IrisListLogic extends BaseGetXController {
|
||||
|
||||
// 获取人脸状态
|
||||
Future<void> _replyQueryingFaceStatus(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
final int status = reply.data[2];
|
||||
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
@ -112,7 +114,7 @@ class IrisListLogic extends BaseGetXController {
|
||||
|
||||
// 获取卡片状态
|
||||
Future<void> _replyReferEventRecordNumber(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
final int status = reply.data[2];
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
@ -130,46 +132,46 @@ class IrisListLogic extends BaseGetXController {
|
||||
|
||||
// 查询用户、指纹、密码、卡片数量(用于判断是否同步)
|
||||
Future<void> _replyCheckingUserInfoCount(Reply reply) async {
|
||||
int status = reply.data[2];
|
||||
final int status = reply.data[2];
|
||||
|
||||
// 用户数量
|
||||
int userNum = reply.data[5];
|
||||
final int userNum = reply.data[5];
|
||||
|
||||
// 指纹数量
|
||||
int fingerNum = reply.data[6];
|
||||
final int fingerNum = reply.data[6];
|
||||
|
||||
// 密码数量
|
||||
int pwdNum = reply.data[7];
|
||||
final int pwdNum = reply.data[7];
|
||||
|
||||
// 卡片数量
|
||||
int cardNum = reply.data[8];
|
||||
final int cardNum = reply.data[8];
|
||||
|
||||
// 记录数量
|
||||
int logsNum = reply.data[9];
|
||||
final int logsNum = reply.data[9];
|
||||
|
||||
// 版本
|
||||
int verNo = reply.data[10];
|
||||
final int verNo = reply.data[10];
|
||||
|
||||
// 最大管理员指纹数量
|
||||
int maxAdminFingerNum = reply.data[11];
|
||||
final int maxAdminFingerNum = reply.data[11];
|
||||
|
||||
// 最大用户指纹数量
|
||||
int maxUserFingerNum = reply.data[12];
|
||||
final int maxUserFingerNum = reply.data[12];
|
||||
|
||||
// 最大管理员密码数量
|
||||
int maxAdminPassNum = reply.data[13];
|
||||
final int maxAdminPassNum = reply.data[13];
|
||||
|
||||
// 最大用户密码数量
|
||||
int maxUserPassNum = reply.data[14];
|
||||
final int maxUserPassNum = reply.data[14];
|
||||
|
||||
// 最大管理员卡片数量
|
||||
int maxAdminCardNum = reply.data[15];
|
||||
final int maxAdminCardNum = reply.data[15];
|
||||
|
||||
// 最大用户卡片数量
|
||||
int maxUserCardNum = reply.data[16];
|
||||
final int maxUserCardNum = reply.data[16];
|
||||
|
||||
// 序列号
|
||||
var serialNo = reply.data.sublist(17, 21);
|
||||
final List<int> serialNo = reply.data.sublist(17, 21);
|
||||
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
@ -191,14 +193,14 @@ class IrisListLogic extends BaseGetXController {
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||
(BluetoothConnectionState state) async {
|
||||
if (state == BluetoothConnectionState.connected) {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
|
||||
final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
|
||||
|
||||
// IoSenderManage.senderQueryingFaceStatusCommand(
|
||||
// keyID: BlueManage().connectDeviceName,
|
||||
@ -220,14 +222,14 @@ class IrisListLogic extends BaseGetXController {
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||
(BluetoothConnectionState state) async {
|
||||
if (state == BluetoothConnectionState.connected) {
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
var publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
|
||||
final List<String>? publicKey = await Storage.getStringList(saveBluePublicKey);
|
||||
final List<int> getPublicKeyList = changeStringListToIntList(publicKey!);
|
||||
|
||||
// IoSenderManage.senderCheckingUserInfoCountCommand(
|
||||
// keyID: BlueManage().connectDeviceName,
|
||||
@ -252,14 +254,14 @@ class IrisListLogic extends BaseGetXController {
|
||||
BlueManage().blueSendData(BlueManage().connectDeviceName,
|
||||
(BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||
var signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
final List<String>? signKey = await Storage.getStringList(saveBlueSignKey);
|
||||
final List<int> signKeyDataList = changeStringListToIntList(signKey!);
|
||||
|
||||
var privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
final List<int> getPrivateKeyList = changeStringListToIntList(privateKey!);
|
||||
|
||||
var token = await Storage.getStringList(saveBlueToken);
|
||||
List<int> getTokenList = changeStringListToIntList(token!);
|
||||
final List<String>? token = await Storage.getStringList(saveBlueToken);
|
||||
final List<int> getTokenList = changeStringListToIntList(token!);
|
||||
|
||||
// IoSenderManage.senderAddFaceCommand(
|
||||
// keyID:state.deletKeyID,
|
||||
@ -290,8 +292,8 @@ class IrisListLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
// 获取虹膜列表
|
||||
void getIrisListData() async {
|
||||
var entity = await ApiRepository.to.getFaceListData(
|
||||
Future<void> getIrisListData() async {
|
||||
final FingerprintListDataEntity entity = await ApiRepository.to.getFaceListData(
|
||||
lockId: state.lockId.value.toString(),
|
||||
pageNo: '1',
|
||||
pageSize: '20',
|
||||
@ -303,37 +305,37 @@ class IrisListLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
// 删除的人脸
|
||||
void deletFacesData() async {
|
||||
var faceId = "";
|
||||
var type = "1";
|
||||
Future<void> deletFacesData() async {
|
||||
String faceId = '';
|
||||
String type = '1';
|
||||
if (state.isDeletAll == false) {
|
||||
faceId = state.deletKeyID;
|
||||
type = "0";
|
||||
type = '0';
|
||||
}
|
||||
var entity = await ApiRepository.to.deleteFaceData(
|
||||
final LoginEntity entity = await ApiRepository.to.deleteFaceData(
|
||||
faceId: int.parse(faceId),
|
||||
lockId: state.lockId.value,
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
showToast("删除成功");
|
||||
showToast('删除成功');
|
||||
state.isDeletFaceData = false;
|
||||
getIrisListData();
|
||||
}
|
||||
}
|
||||
|
||||
// 重置所有的人脸
|
||||
void clearAllFacesData() async {
|
||||
var faceId = "";
|
||||
var type = "1";
|
||||
Future<void> clearAllFacesData() async {
|
||||
String faceId = '';
|
||||
String type = '1';
|
||||
if (state.isDeletAll == false) {
|
||||
faceId = state.deletKeyID;
|
||||
type = "0";
|
||||
type = '0';
|
||||
}
|
||||
var entity = await ApiRepository.to.clearFaceData(
|
||||
final LoginEntity entity = await ApiRepository.to.clearFaceData(
|
||||
lockId: state.lockId.value,
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
showToast("重置成功");
|
||||
showToast('重置成功');
|
||||
state.isDeletFaceData = false;
|
||||
getIrisListData();
|
||||
}
|
||||
@ -342,18 +344,17 @@ class IrisListLogic extends BaseGetXController {
|
||||
// 监听修改完详情之后刷新列表
|
||||
late StreamSubscription _teamEvent;
|
||||
void _initRefreshAction() {
|
||||
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((event) {
|
||||
_teamEvent = eventBus.on<OtherTypeRefreshListEvent>().listen((OtherTypeRefreshListEvent event) {
|
||||
getIrisListData();
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> onReady() async {
|
||||
// TODO: implement onReady
|
||||
super.onReady();
|
||||
|
||||
// 获取是否是演示模式 演示模式不获取接口
|
||||
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
if (isDemoMode == false) {
|
||||
// _initReplySubscription();
|
||||
|
||||
@ -365,10 +366,9 @@ class IrisListLogic extends BaseGetXController {
|
||||
|
||||
@override
|
||||
Future<void> onInit() async {
|
||||
// TODO: implement onInit
|
||||
super.onInit();
|
||||
|
||||
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
if (isDemoMode == false) {
|
||||
// senderQueryingFingerprintStatus();
|
||||
// senderCheckingCardStatus();
|
||||
@ -379,10 +379,9 @@ class IrisListLogic extends BaseGetXController {
|
||||
|
||||
@override
|
||||
Future<void> onClose() async {
|
||||
// TODO: implement onClose
|
||||
super.onClose();
|
||||
|
||||
var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot);
|
||||
if (isDemoMode == false) {
|
||||
// _replySubscription.cancel();
|
||||
// _teamEvent.cancel();
|
||||
|
||||
@ -291,7 +291,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
ShowTipView().showSureAlertDialog(
|
||||
"${"锁电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}");
|
||||
"${"锁电量更新时间".tr}:${state.keyInfos.value.electricQuantityDate! != 0 ? DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString()) : "-"}");
|
||||
},
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
|
||||
@ -57,7 +57,7 @@ class _NormallyOpenModePageState extends State<NormallyOpenModePage> with RouteA
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Text('在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭'.tr,
|
||||
child: Text('你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。'.tr,
|
||||
style: TextStyle(fontSize: 20.sp),
|
||||
)),
|
||||
],
|
||||
|
||||
@ -88,7 +88,7 @@ class _NDaysUnopenedPageState extends State<NDaysUnopenedPage> {
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
CommonItem(
|
||||
leftTitel: '门未开时间'.tr,
|
||||
leftTitel: '未开门时间'.tr,
|
||||
rightTitle: '${state.unOpenDoorTime.value}' + '天'.tr,
|
||||
isHaveLine: true,
|
||||
isHaveRightWidget: false,
|
||||
|
||||
@ -44,23 +44,23 @@ class _AddPalmPageState extends State<AddPalmPage> with RouteAware{
|
||||
SizedBox(
|
||||
height: 60.h,
|
||||
),
|
||||
Container(
|
||||
padding: EdgeInsets.only(left: 20.w, right: 20.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Expanded(
|
||||
child: Text(
|
||||
'添加掌静脉提示'.tr,
|
||||
textAlign: TextAlign.left,
|
||||
maxLines: null,
|
||||
style:
|
||||
TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
// Container(
|
||||
// padding: EdgeInsets.only(left: 20.w, right: 20.w),
|
||||
// child: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
// children: <Widget>[
|
||||
// Expanded(
|
||||
// child: Text(
|
||||
// '添加掌静脉提示'.tr,
|
||||
// textAlign: TextAlign.left,
|
||||
// maxLines: null,
|
||||
// style:
|
||||
// TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
SizedBox(
|
||||
height: 120.h,
|
||||
),
|
||||
|
||||
@ -49,7 +49,7 @@ class AddPalmTypeLogic extends BaseGetXController {
|
||||
// }
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
// AppLog.log("state.timeLimitBeginTime.value:${state.timeLimitBeginTime.value} startDate:$startDate");
|
||||
|
||||
@ -80,12 +80,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController {
|
||||
final int endTimeTimestamp = DateTool().dateToTimestamp(state.selectFailureDate.value, 1);
|
||||
if (beginTimeTimestamp > endTimeTimestamp ||
|
||||
beginTimeTimestamp == endTimeTimestamp) {
|
||||
showToast('失效时间需大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (endTimeTimestamp < DateTime.now().millisecondsSinceEpoch) {
|
||||
showToast('生效时间需大于当前时间'.tr);
|
||||
showToast('生效时间需晚于当前时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ class _PasswordKeyDetailChangeDatePage extends State<PasswordKeyDetailChangeDate
|
||||
),
|
||||
onPressed: () {
|
||||
if (state.startDate >= state.endDate) {
|
||||
logic.showToast('失效时间要大于生效时间'.tr);
|
||||
logic.showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -76,7 +76,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
if (startDate >= endDate) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -102,7 +102,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
if (state.loopStartHours.value >= state.loopEndHours.value) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
if (state.loopModeStr.value == '周末'.tr) {
|
||||
@ -346,12 +346,12 @@ class PasswordKeyPerpetualLogic extends BaseGetXController {
|
||||
if (state.isPermanent.value == false) {
|
||||
if (startDate <
|
||||
DateTool().dateToTimestamp(DateTool().getNowDateWithType(2), 1)) {
|
||||
showToast('生效时间需大于当前时间'.tr);
|
||||
showToast('生效时间需晚于当前时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (endDate <= startDate) {
|
||||
showToast('失效时间需大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
|
||||
@ -51,7 +51,7 @@ class AddRemoteControlTypeLoigc extends BaseGetXController{
|
||||
// }
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
// AppLog.log("state.timeLimitBeginTime.value:${state.timeLimitBeginTime.value} startDate:$startDate");
|
||||
|
||||
@ -25,6 +25,12 @@ class LockMainXHJLogic extends BaseGetXController {
|
||||
Future<void> getUserInfoRequest() async {
|
||||
final MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo();
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
|
||||
final String languageCodeAndCountryCode = entity.data!.lang ?? 'zh-CN';
|
||||
final List<String> parts = languageCodeAndCountryCode.split('-');
|
||||
final Locale locale = Locale(parts[0], parts[1]);
|
||||
Get.updateLocale(locale);
|
||||
|
||||
Storage.setBool(saveIsVip, entity.data!.isVip == 1);
|
||||
if (entity.data!.deviceId != null) {
|
||||
if (entity.data!.deviceId!.isEmpty) {
|
||||
|
||||
@ -9,7 +9,6 @@ import '../../../app_settings/app_colors.dart';
|
||||
import '../../../baseWidget.dart';
|
||||
import '../../../tools/submitBtn.dart';
|
||||
import '../../../tools/titleAppBar.dart';
|
||||
import '../../../translations/trans_lib.dart';
|
||||
|
||||
class AddLockPage extends StatefulWidget {
|
||||
const AddLockPage({Key? key}) : super(key: key);
|
||||
@ -69,15 +68,20 @@ class _AddLockPageState extends State<AddLockPage> with BaseWidget {
|
||||
SizedBox(
|
||||
height: 120.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'摸亮触摸屏,锁进入可添加状态,点击下一步'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 20.sp, fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
Container(
|
||||
width: 1.sw,
|
||||
padding: EdgeInsets.only(left: 20.w, right: 20.w),
|
||||
child: Wrap(
|
||||
alignment: WrapAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'摸亮触摸屏,锁进入可添加状态,点击下一步'.tr,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 20.sp,fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 120.h,
|
||||
|
||||
@ -89,20 +89,20 @@ class _GatewayConfigurationWifiPageState extends State<GatewayConfigurationWifiP
|
||||
// rightTitle: '192.168.1.1',
|
||||
isHaveLine: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: getTFWidget(state.ipAddressTF, '请输入IP地址')
|
||||
rightWidget: getTFWidget(state.ipAddressTF, '请输入IP地址'.tr)
|
||||
),
|
||||
CommonItem(
|
||||
leftTitel: '子网掩码'.tr,
|
||||
// rightTitle: '255.255.255.0',
|
||||
isHaveLine: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: getTFWidget(state.subnetMaskTF, '请输入子网掩码')),
|
||||
rightWidget: getTFWidget(state.subnetMaskTF, '请输入子网掩码'.tr)),
|
||||
CommonItem(
|
||||
leftTitel: '默认网关'.tr,
|
||||
// rightTitle: '192.168.1.1',
|
||||
isHaveLine: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: getTFWidget(state.defaultGatewayTF, '请输入默认网关')
|
||||
rightWidget: getTFWidget(state.defaultGatewayTF, '请输入默认网关'.tr)
|
||||
),
|
||||
SizedBox(height: 10.h,),
|
||||
Obx(() => CommonItem(
|
||||
|
||||
@ -28,7 +28,6 @@ class StarLockMineLogic extends BaseGetXController {
|
||||
if (entity.errorCode!.codeIsSuccessful) {}
|
||||
}
|
||||
|
||||
/// 刷新电子钥匙列表
|
||||
StreamSubscription? _mineInfoChangeRefreshUIEvent;
|
||||
void _mineInfoChangeRefreshUIAction() {
|
||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||
|
||||
@ -1,11 +1,25 @@
|
||||
|
||||
import 'dart:ui';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import '../../main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
|
||||
import '../../network/api_repository.dart';
|
||||
import '../../tools/eventBusEventManage.dart';
|
||||
import 'mineMultiLanguage_state.dart';
|
||||
|
||||
class MineMultiLanguageLogic extends GetxController {
|
||||
final MineMultiLanguageState state = MineMultiLanguageState();
|
||||
|
||||
//更新个人信息-头像
|
||||
Future<void> updateUserLangInfo(Locale l, String lanTypeTitle) async {
|
||||
final String lang = l.toLanguageTag();
|
||||
final PasswordKeyListEntity entity = await ApiRepository.to.updateUserLangInfo(lang: lang);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanTypeTitle));
|
||||
changeLanguage(l);
|
||||
}
|
||||
}
|
||||
|
||||
void changeLanguage(Locale l) {
|
||||
if(l == Get.locale)return;
|
||||
Get.updateLocale(l);
|
||||
|
||||
@ -71,8 +71,8 @@ class _MineMultiLanguagePageState extends State<MineMultiLanguagePage> {
|
||||
)
|
||||
: Container()),
|
||||
action: () {
|
||||
logic.changeLanguage(e);
|
||||
eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanType.lanTitle));
|
||||
logic.updateUserLangInfo(e, lanType.lanTitle);
|
||||
// eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanType.lanTitle));
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@ -8,16 +8,16 @@ import '../../translations/app_dept.dart';
|
||||
|
||||
class MineMultiLanguageState {
|
||||
|
||||
MineMultiLanguageState() {
|
||||
resetLan();
|
||||
}
|
||||
|
||||
List<Locale> get languages {
|
||||
return appDept.deptSupportedLocales;
|
||||
}
|
||||
|
||||
var currentLanguageType = ExtensionLanguageType.fromLanguageCode(Get.locale!.languageCode).obs;
|
||||
|
||||
MineMultiLanguageState() {
|
||||
resetLan();
|
||||
}
|
||||
|
||||
void resetLan() {
|
||||
currentLanguageType.value = ExtensionLanguageType.fromLanguageCode(Get.locale!.languageCode);
|
||||
AppLog.log("currentLanguageType.value:${currentLanguageType.value}");
|
||||
|
||||
@ -39,6 +39,7 @@ class MinePersonInfoData {
|
||||
String? countryName;
|
||||
int? isVip;
|
||||
String? deviceId;
|
||||
String? lang;
|
||||
|
||||
MinePersonInfoData(
|
||||
{this.mobile,
|
||||
@ -51,7 +52,8 @@ class MinePersonInfoData {
|
||||
this.email,
|
||||
this.countryName,
|
||||
this.isVip,
|
||||
this.deviceId});
|
||||
this.deviceId,
|
||||
this.lang});
|
||||
|
||||
MinePersonInfoData.fromJson(Map<String, dynamic> json) {
|
||||
mobile = json['mobile'];
|
||||
@ -65,6 +67,7 @@ class MinePersonInfoData {
|
||||
countryName = json['countryName'];
|
||||
isVip = json['isVip'];
|
||||
deviceId = json['deviceId'];
|
||||
lang = json['lang'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
@ -80,6 +83,7 @@ class MinePersonInfoData {
|
||||
data['countryName'] = countryName;
|
||||
data['isVip'] = isVip;
|
||||
data['deviceId'] = deviceId;
|
||||
data['lang'] = lang;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ class AddAuthorizedAdministratorLogic extends BaseGetXController {
|
||||
}
|
||||
|
||||
if (int.parse(startDate) >= int.parse(endDate)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,12 +18,12 @@ class AdminDetailChangeDateLogic extends BaseGetXController {
|
||||
DateTool().dateToTimestamp(state.endTime.value, 1);
|
||||
if (beginTimeTimestamp > endTimeTimestamp ||
|
||||
beginTimeTimestamp == endTimeTimestamp) {
|
||||
showToast('失效时间需大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (endTimeTimestamp < DateTime.now().millisecondsSinceEpoch) {
|
||||
showToast('生效时间需大于当前时间'.tr);
|
||||
showToast('生效时间需晚于当前时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -81,7 +81,7 @@ class AdministratorDetailsLogic extends BaseGetXController {
|
||||
}
|
||||
}
|
||||
|
||||
//取消冻结
|
||||
//解除冻结
|
||||
Future<void> cancelFreeze(int includeUnderlings) async {
|
||||
final ElectronicKeyListEntity entity = await ApiRepository.to.cancelFreeze(
|
||||
keyId: state.itemData.value.keyId.toString(),
|
||||
@ -111,7 +111,7 @@ class AdministratorDetailsLogic extends BaseGetXController {
|
||||
|
||||
Future<void> openModalBottomSheet() async {
|
||||
final List<String> textList = <String>[
|
||||
if (state.itemData.value.keyStatus == 110405) '取消冻结'.tr else '冻结'.tr,
|
||||
if (state.itemData.value.keyStatus == 110405) '解除冻结'.tr else '冻结'.tr,
|
||||
'取消授权'.tr
|
||||
];
|
||||
|
||||
@ -127,7 +127,7 @@ class AdministratorDetailsLogic extends BaseGetXController {
|
||||
final int index = value;
|
||||
if (index == 0) {
|
||||
if (state.itemData.value.keyStatus == 110405) {
|
||||
// 取消冻结
|
||||
// 解除冻结
|
||||
ShowTipView().showDeleteAdministratorIsHaveAllDataDialog(
|
||||
'同时解冻其发送的钥匙'.tr, (isAllData) {
|
||||
cancelFreeze(isAllData ? 1 : 0);
|
||||
|
||||
@ -49,13 +49,13 @@ class _ExpireKeyChangeDatePageState extends State<ExpireKeyChangeDatePage> with
|
||||
state.endTimeTimestamp.value ||
|
||||
state.beginTimeTimestamp.value ==
|
||||
state.endTimeTimestamp.value) {
|
||||
logic.showToast('失效时间需大于生效时间'.tr);
|
||||
logic.showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (state.endTimeTimestamp.value <
|
||||
DateTime.now().millisecondsSinceEpoch) {
|
||||
logic.showToast('生效时间需大于当前时间'.tr);
|
||||
logic.showToast('生效时间需晚于当前时间'.tr);
|
||||
return;
|
||||
}
|
||||
switch (state.pushType.value) {
|
||||
|
||||
@ -58,7 +58,7 @@ class _ExpireKeyChangeValidityDatePageState extends State<ExpireKeyChangeValidit
|
||||
|
||||
if (state.starDateTimestamp.value >
|
||||
state.endDateTimestamp.value) {
|
||||
logic.showToast('失效日期要大于生效日期'.tr);
|
||||
logic.showToast('失效日期需晚于生效日期'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ class _ExpireKeyChangeValidityDatePageState extends State<ExpireKeyChangeValidit
|
||||
|
||||
if (state.starTimeTimestamp.value >=
|
||||
state.endTimeTimestamp.value) {
|
||||
logic.showToast('失效时间要大于生效时间'.tr);
|
||||
logic.showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
@ -7,15 +9,17 @@ import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireElect
|
||||
import 'package:star_lock/mine/mineSet/mineSet/mineSet_state.dart';
|
||||
import 'package:star_lock/mine/mineSet/mineSet/userSettingInfoEntity.dart';
|
||||
import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart';
|
||||
import 'package:star_lock/tools/push/xs_jPhush.dart';
|
||||
import 'package:star_lock/tools/showCupertinoAlertView.dart';
|
||||
import 'package:star_lock/tools/storage.dart';
|
||||
import 'package:star_lock/tools/push/xs_jPhush.dart';
|
||||
import 'package:star_lock/versionUndate/versionUndate_entity.dart';
|
||||
|
||||
import '../../../../network/api_repository.dart';
|
||||
import '../../../../tools/baseGetXController.dart';
|
||||
import '../../../blue/blue_manage.dart';
|
||||
import '../../../talk/udp/udp_help.dart';
|
||||
import '../../../tools/eventBusEventManage.dart';
|
||||
import '../../../tools/store_service.dart';
|
||||
|
||||
class MineSetLogic extends BaseGetXController {
|
||||
final MineSetState state = MineSetState();
|
||||
@ -106,6 +110,10 @@ class MineSetLogic extends BaseGetXController {
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
UdpHelp().closeUDP();
|
||||
logOut();
|
||||
|
||||
StoreService.to.saveLanguageCode('');
|
||||
Get.updateLocale(Get.deviceLocale!);
|
||||
|
||||
BlueManage().disconnect();
|
||||
XSJPushProvider().initLocalNotification(isCancelLocalPush: true);
|
||||
Get.offNamedUntil(Routers.starLockLoginPage, (route) => false);
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
|
||||
@ -81,9 +83,10 @@ class _ValueAddedServicesHighFunctionPageState
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
SizedBox(height: 20.h),
|
||||
Text(
|
||||
'当前状态:已开通'.tr,
|
||||
style: TextStyle(
|
||||
@ -113,8 +116,9 @@ class _ValueAddedServicesHighFunctionPageState
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
width: 110.w,
|
||||
height: 50.h,
|
||||
// width: 110.w,
|
||||
// height: 50.h,
|
||||
padding: EdgeInsets.only(left: 20.w, right: 20.w, top: 8.h, bottom: 8.h),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color(0xFFBDCDDF),
|
||||
borderRadius: BorderRadius.all(Radius.circular(30.h)),
|
||||
@ -135,8 +139,9 @@ class _ValueAddedServicesHighFunctionPageState
|
||||
arguments: UseRecordListArg.vip);
|
||||
},
|
||||
child: Container(
|
||||
width: 90.w,
|
||||
height: 50.h,
|
||||
// width: 90.w,
|
||||
// height: 50.h,
|
||||
padding: EdgeInsets.only(left: 15.w, right: 10.w, top: 8.h, bottom: 8.h),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color(0xFFBDCDDF),
|
||||
borderRadius: BorderRadius.only(
|
||||
@ -273,14 +278,15 @@ class _ValueAddedServicesHighFunctionPageState
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Column(
|
||||
children: <Widget>[
|
||||
Text(
|
||||
title,
|
||||
style: TextStyle(fontSize: 22.sp),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
],
|
||||
Expanded(
|
||||
child: Text(
|
||||
title,
|
||||
// '啊上级领导发哈老师讲课代发哈金卡拉萨代发户籍卡三打哈发卡机啊哈受打击开发',
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(fontSize: 22.sp),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@ -41,7 +41,7 @@ abstract class Api {
|
||||
final String checkPasswordURL = '/user/checkPassword'; // 检查账户密码
|
||||
final String setAuthorizeURL = '/key/authorize'; //设置授权管理员
|
||||
final String cancelAuthorizeURL = '/key/unauthorize'; //取消授权管理员
|
||||
final String cancelFreezeURL = '/key/unfreeze'; //取消冻结
|
||||
final String cancelFreezeURL = '/key/unfreeze'; //解除冻结
|
||||
final String freezeKeyURL = '/key/freeze'; //冻结
|
||||
|
||||
final String passwordKeyGetURL = '/keyboardPwd/get'; //获取密码
|
||||
|
||||
@ -684,7 +684,7 @@ class ApiProvider extends BaseProvider {
|
||||
'includeUnderlings': includeUnderlings,
|
||||
}));
|
||||
|
||||
// 取消冻结
|
||||
// 解除冻结
|
||||
Future<Response> cancelFreeze(String keyId, int includeUnderlings) => post(
|
||||
cancelFreezeURL.toUrl,
|
||||
jsonEncode({
|
||||
@ -1932,6 +1932,13 @@ class ApiProvider extends BaseProvider {
|
||||
'headUrl': headUrl,
|
||||
}));
|
||||
|
||||
//更新个人信息-国际化
|
||||
Future<Response> updateUserLangInfo(String lang) => post(
|
||||
updateUserInfoURL.toUrl,
|
||||
jsonEncode({
|
||||
'lang': lang,
|
||||
}));
|
||||
|
||||
//修改绑定手机号
|
||||
Future<Response> bindPhone(String countryCode, String account,
|
||||
String verificationCode, String unbindToken) =>
|
||||
|
||||
@ -709,7 +709,7 @@ class ApiRepository {
|
||||
return ElectronicKeyListEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
//取消冻结
|
||||
//解除冻结
|
||||
Future<ElectronicKeyListEntity> cancelFreeze({
|
||||
required String keyId,
|
||||
required int includeUnderlings,
|
||||
@ -1977,6 +1977,13 @@ class ApiRepository {
|
||||
return PasswordKeyListEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
//更新个人信息-国际化
|
||||
Future<PasswordKeyListEntity> updateUserLangInfo(
|
||||
{required String lang}) async {
|
||||
final res = await apiProvider.updateUserLangInfo(lang);
|
||||
return PasswordKeyListEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
//修改绑定手机号
|
||||
Future<PasswordKeyListEntity> bindPhone(String countryCode, String account,
|
||||
String verificationCode, String unbindToken) async {
|
||||
|
||||
@ -1,23 +1,26 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:ui';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get/get_connect/http/src/request/request.dart';
|
||||
import 'package:star_lock/login/login/entity/LoginData.dart';
|
||||
|
||||
import '../tools/platform_info_services.dart';
|
||||
import '../tools/storage.dart';
|
||||
import '../tools/store_service.dart';
|
||||
import '../translations/app_dept.dart';
|
||||
|
||||
//公共获取UA
|
||||
String getUserAgent() {
|
||||
//赋值变量方便调试
|
||||
String ua =
|
||||
final String ua =
|
||||
'StarLock/${PlatformInfoService.to?.info.version}/${PlatformInfoService.to?.info.buildNumber}/${GetPlatform.isAndroid ? 'Android' : 'iOS'}';
|
||||
return ua;
|
||||
}
|
||||
|
||||
FutureOr<Request> requestInterceptor(Request request) async {
|
||||
request.headers['User-Agent'] = getUserAgent();
|
||||
request.headers['Accept-Language'] = 'zh-CN';
|
||||
request.headers['Accept-Language'] = getLanguageCode(); // StoreService.to.getLanguageCode()
|
||||
// request.headers['Content-Type'] = 'application/json';
|
||||
// request.headers['token'] = StoreService.to.userToken!;
|
||||
String? xToken = '';
|
||||
@ -28,3 +31,14 @@ FutureOr<Request> requestInterceptor(Request request) async {
|
||||
request.headers['Authorization'] = "Bearer ${xToken ?? ''}";
|
||||
return request;
|
||||
}
|
||||
|
||||
|
||||
String getLanguageCode() {
|
||||
final Locale locale = StoreService.to.getLanguageCode()!.isNotEmpty
|
||||
? appDept.deptSupportedLocales
|
||||
.where((Locale element) =>
|
||||
element.languageCode == StoreService.to.getLanguageCode())
|
||||
.first
|
||||
: const Locale('zh', 'CN');// Get.deviceLocale;
|
||||
return locale.toLanguageTag();
|
||||
}
|
||||
@ -5,6 +5,6 @@ import 'package:star_lock/app_settings/app_settings.dart';
|
||||
|
||||
FutureOr<Request> requestLogInterceptor(Request request) async {
|
||||
// AppLog.log('GET HTTP REQUEST \n${request.url} \n${request.headers} ${request.toString()} ');
|
||||
// AppLog.log(request.headers.toString());
|
||||
// AppLog.log('请求头:${request.headers.toString()}');
|
||||
return request;
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ class CommandUDPReciverManager {
|
||||
// AppLog.log("心跳包反馈 在线状态");
|
||||
} else if (data[7] == 3) {
|
||||
// [Toast.show(msg: "您已在其他设备登录")];
|
||||
EasyLoading.showToast('您已在其他设备登录'.tr, duration: 2000.milliseconds);
|
||||
EasyLoading.showToast('您的账号在异地登录,如非本人,请尽快修改密码'.tr, duration: 2000.milliseconds);
|
||||
}
|
||||
} else if (data[6] == 150) {
|
||||
// if( [Pub getApp].isBack){
|
||||
|
||||
@ -14,12 +14,12 @@ class SeletKeyCyclicDateLogic extends BaseGetXController {
|
||||
final String endTimeTimestamp = DateTool().dateToTimestamp(state.endTime.value, 0).toString();
|
||||
|
||||
if (int.parse(starDateTimestamp) > int.parse(endDateTimestamp)) {
|
||||
showToast('失效日期要大于生效日期'.tr);
|
||||
showToast('失效日期需晚于生效日期'.tr);
|
||||
return;
|
||||
}
|
||||
|
||||
if (int.parse(starTimeTimestamp) >= int.parse(endTimeTimestamp)) {
|
||||
showToast('失效时间要大于生效时间'.tr);
|
||||
showToast('失效时间需晚于生效时间'.tr);
|
||||
return;
|
||||
}
|
||||
final Map<String, dynamic> resultMap = {};
|
||||
|
||||
@ -23,9 +23,9 @@ class StoreService<T> extends GetxService {
|
||||
final String _deviceUUID = 'DEVICE_ID';
|
||||
final String _languageCode = 'LANGUAGE_CODE';
|
||||
|
||||
String? getDeviceId() => hasData(_deviceUUID) ? read(_deviceUUID).toString(): "";
|
||||
String? getDeviceId() => hasData(_deviceUUID) ? read(_deviceUUID).toString(): '';
|
||||
Future saveDeviceId(String uuid) => save(_deviceUUID, uuid);
|
||||
|
||||
String? getLanguageCode() => hasData(_languageCode) ? read(_languageCode).toString(): "";
|
||||
String? getLanguageCode() => hasData(_languageCode) ? read(_languageCode).toString(): '';
|
||||
Future saveLanguageCode(String code) => save(_languageCode, code);
|
||||
}
|
||||
|
||||
@ -87,7 +87,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
# 1.0.75+2024081001:锁定版本,上架商城
|
||||
# 1.0.76+2024081201:锁定版本,上架商城--最新版本
|
||||
|
||||
version: 1.0.76+2024081201
|
||||
version: 1.0.76+2024081601
|
||||
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user