完善国际化信息

This commit is contained in:
魏少阳 2024-08-27 11:08:44 +08:00
parent 377963c41d
commit 0e99d60cb8
63 changed files with 914 additions and 705 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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月",
"热门城市": "热门城市",
"导出锁数据": "导出锁数据",
"一键开锁": "一键开锁",
"已开通": "已开通"
}

View File

@ -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月",
"热门城市": "热门城市",
"导出锁数据": "导出锁数据",
"一键开锁": "一键开锁",
"已开通": "已开通"
}

View File

@ -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

View File

@ -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:

View File

@ -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
// });
// },
// )),
// ],
// )),
// )
],
),
);
}
}

View File

@ -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
});
},
)),
],
)),
)
],
),
);
}

View File

@ -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,

View File

@ -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 {

View File

@ -151,7 +151,7 @@ class AuthorizedAdminLogic extends BaseGetXController {
}
if (int.parse(startDate) >= int.parse(endDate)) {
showToast('失效时间要大于生效时间'.tr);
showToast('失效时间需晚于生效时间'.tr);
return;
}
}

View File

@ -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");

View File

@ -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)))),
),

View File

@ -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) {

View File

@ -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;
}

View File

@ -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(

View File

@ -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 '';
}
}
}

View File

@ -531,7 +531,7 @@ class _CheckingInListPageState extends State<CheckingInListPage> {
context,
//
normalIndex: 0,
title: '排列'.tr,
title: '排列方式'.tr,
cancelTitle: '取消'.tr,
sureTitle: '确定'.tr,
//

View File

@ -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>[

View File

@ -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(

View File

@ -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,

View File

@ -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);
});
}

View File

@ -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(

View File

@ -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(

View File

@ -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;
}
}

View File

@ -73,7 +73,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController {
endTime = '0';
if (int.parse(startDate) >= int.parse(endDate)) {
showToast('失效时间要大于生效时间'.tr);
showToast('失效时间需晚于生效时间'.tr);
return;
}

View File

@ -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),
],

View File

@ -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') {

View File

@ -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') {

View File

@ -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') {

View File

@ -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();

View File

@ -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,

View File

@ -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),
)),
],

View File

@ -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,

View File

@ -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,
),

View File

@ -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");

View File

@ -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;
}

View File

@ -43,7 +43,7 @@ class _PasswordKeyDetailChangeDatePage extends State<PasswordKeyDetailChangeDate
),
onPressed: () {
if (state.startDate >= state.endDate) {
logic.showToast('失效时间要大于生效时间'.tr);
logic.showToast('失效时间需晚于生效时间'.tr);
return;
}

View File

@ -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 {

View File

@ -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");

View File

@ -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) {

View File

@ -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,

View File

@ -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(

View File

@ -28,7 +28,6 @@ class StarLockMineLogic extends BaseGetXController {
if (entity.errorCode!.codeIsSuccessful) {}
}
///
StreamSubscription? _mineInfoChangeRefreshUIEvent;
void _mineInfoChangeRefreshUIAction() {
// eventBus

View File

@ -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);

View File

@ -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));
}),
);
}

View File

@ -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}");

View File

@ -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;
}
}

View File

@ -51,7 +51,7 @@ class AddAuthorizedAdministratorLogic extends BaseGetXController {
}
if (int.parse(startDate) >= int.parse(endDate)) {
showToast('失效时间要大于生效时间'.tr);
showToast('失效时间需晚于生效时间'.tr);
return;
}
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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) {

View File

@ -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;
}

View File

@ -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);

View File

@ -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,
),
),
],
),

View File

@ -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'; //

View File

@ -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) =>

View File

@ -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 {

View File

@ -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();
}

View File

@ -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;
}

View File

@ -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){

View File

@ -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 = {};

View File

@ -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);
}

View File

@ -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'