Merge branch 'master' of gitee.com:starlock-cn/app-starlock
This commit is contained in:
commit
7a39bc735d
@ -95,7 +95,7 @@ flavors:
|
||||
bundleId: "com.skychip.lock"
|
||||
xhj:
|
||||
app:
|
||||
name: "鑫锁"
|
||||
name: "星星锁"
|
||||
icon: "assets/icon/xhj.png"
|
||||
android:
|
||||
applicationId: "com.xhjcn.lock"
|
||||
|
||||
@ -662,6 +662,10 @@
|
||||
"。如果是全自动锁,请使屏幕变亮": ". If it is a fully automatic lock, please make the screen brighter",
|
||||
"用户无权限": "User has no permission",
|
||||
"创建公司后,考勤功能才能使用": "After creating the company, the attendance function can be used",
|
||||
"是否删除钥匙?": "Whether to delete the key?",
|
||||
"邮箱绑定成功": "Email binding success",
|
||||
"手机绑定成功": "Mobile phone binding success",
|
||||
"网络访问失败,请检查网络是否正常": "网络访问失败,请检查网络是否正常",
|
||||
|
||||
"相机": "camera",
|
||||
"相册": "photos",
|
||||
|
||||
@ -661,6 +661,10 @@
|
||||
"。如果是全自动锁,请使屏幕变亮": "。如果是全自动锁,请使屏幕变亮",
|
||||
"用户无权限": "用户无权限",
|
||||
"创建公司后,考勤功能才能使用": "创建公司后,考勤功能才能使用",
|
||||
"是否删除钥匙?": "是否删除钥匙?",
|
||||
"邮箱绑定成功": "邮箱绑定成功",
|
||||
"手机绑定成功": "手机绑定成功",
|
||||
"网络访问失败,请检查网络是否正常": "网络访问失败,请检查网络是否正常",
|
||||
|
||||
"相机": "相机",
|
||||
"相册": "相册",
|
||||
|
||||
@ -663,6 +663,10 @@
|
||||
"。如果是全自动锁,请使屏幕变亮": "。如果是全自动锁,请使屏幕变亮",
|
||||
"用户无权限": "用户无权限",
|
||||
"创建公司后,考勤功能才能使用": "创建公司后,考勤功能才能使用",
|
||||
"是否删除钥匙?": "是否删除钥匙?",
|
||||
"邮箱绑定成功": "邮箱绑定成功",
|
||||
"手机绑定成功": "手机绑定成功",
|
||||
"网络访问失败,请检查网络是否正常": "网络访问失败,请检查网络是否正常",
|
||||
|
||||
"相机": "相机",
|
||||
"相册": "相册",
|
||||
|
||||
@ -57,8 +57,12 @@ PODS:
|
||||
- fluttertoast (0.0.2):
|
||||
- Flutter
|
||||
- Toast
|
||||
- g711_flutter (0.0.1):
|
||||
- fluwx (0.0.1):
|
||||
- Flutter
|
||||
- fluwx/pay (= 0.0.1)
|
||||
- fluwx/pay (0.0.1):
|
||||
- Flutter
|
||||
- WechatOpenSDK-XCFramework (~> 2.0.4)
|
||||
- google_maps_flutter_ios (0.0.1):
|
||||
- Flutter
|
||||
- GoogleMaps (< 9.0)
|
||||
@ -88,7 +92,7 @@ PODS:
|
||||
- path_provider_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- permission_handler_apple (9.1.1):
|
||||
- permission_handler_apple (9.3.0):
|
||||
- Flutter
|
||||
- ReachabilitySwift (5.0.0)
|
||||
- shared_preferences_foundation (0.0.1):
|
||||
@ -107,6 +111,7 @@ PODS:
|
||||
- FlutterMacOS
|
||||
- webview_flutter_wkwebview (0.0.1):
|
||||
- Flutter
|
||||
- WechatOpenSDK-XCFramework (2.0.4)
|
||||
|
||||
DEPENDENCIES:
|
||||
- aj_captcha_flutter (from `.symlinks/plugins/aj_captcha_flutter/ios`)
|
||||
@ -128,7 +133,7 @@ DEPENDENCIES:
|
||||
- flutter_pcm_sound (from `.symlinks/plugins/flutter_pcm_sound/ios`)
|
||||
- flutter_voice_processor (from `.symlinks/plugins/flutter_voice_processor/ios`)
|
||||
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
||||
- g711_flutter (from `.symlinks/plugins/g711_flutter/ios`)
|
||||
- fluwx (from `.symlinks/plugins/fluwx/ios`)
|
||||
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
|
||||
- image_gallery_saver (from `.symlinks/plugins/image_gallery_saver/ios`)
|
||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||
@ -164,6 +169,7 @@ SPEC REPOS:
|
||||
- JPush
|
||||
- ReachabilitySwift
|
||||
- Toast
|
||||
- WechatOpenSDK-XCFramework
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
aj_captcha_flutter:
|
||||
@ -202,8 +208,8 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/flutter_voice_processor/ios"
|
||||
fluttertoast:
|
||||
:path: ".symlinks/plugins/fluttertoast/ios"
|
||||
g711_flutter:
|
||||
:path: ".symlinks/plugins/g711_flutter/ios"
|
||||
fluwx:
|
||||
:path: ".symlinks/plugins/fluwx/ios"
|
||||
google_maps_flutter_ios:
|
||||
:path: ".symlinks/plugins/google_maps_flutter_ios/ios"
|
||||
image_gallery_saver:
|
||||
@ -249,7 +255,7 @@ SPEC CHECKSUMS:
|
||||
AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033
|
||||
app_settings: 017320c6a680cdc94c799949d95b84cb69389ebc
|
||||
audio_service: f509d65da41b9521a61f1c404dd58651f265a567
|
||||
audio_session: 4f3e461722055d21515cf3261b64c973c062f345
|
||||
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
|
||||
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
|
||||
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
|
||||
camera_avfoundation: 8b8d780bcfb6a4a02b0fbe2b4bd17b5b71946e68
|
||||
@ -263,7 +269,7 @@ SPEC CHECKSUMS:
|
||||
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
|
||||
flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82
|
||||
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
|
||||
g711_flutter: 8f2769052d2cf3549f83d11e1c42d81d94441123
|
||||
fluwx: daa284756ce53442b3d0417ceeda66e981906811
|
||||
google_maps_flutter_ios: d1318b4ff711612cab16862d7a87e31a7403d458
|
||||
GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4
|
||||
image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb
|
||||
@ -276,7 +282,7 @@ SPEC CHECKSUMS:
|
||||
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
|
||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
|
||||
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
||||
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
||||
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
||||
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
|
||||
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
|
||||
@ -285,6 +291,7 @@ SPEC CHECKSUMS:
|
||||
url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
|
||||
video_player_avfoundation: 02011213dab73ae3687df27ce441fbbcc82b5579
|
||||
webview_flutter_wkwebview: 4f3e50f7273d31e5500066ed267e3ae4309c5ae4
|
||||
WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f
|
||||
|
||||
PODFILE CHECKSUM: 317f9473a5705c6fe4d79d95e81676f248048fdc
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/common/safetyVerification/safetyVerification_binding.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
import 'package:star_lock/login/register/starLock_register_binding.dart';
|
||||
import 'package:star_lock/main/accessoriesList/accessoriesList_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_page.dart';
|
||||
@ -29,6 +30,7 @@ import 'package:star_lock/main/lockDetail/palm/addPalm/addPalm_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/palm/addPalmType/addPalmTypeManage/addPalmTypeManage_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/palm/palmList/palmList_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart';
|
||||
import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart';
|
||||
import 'package:star_lock/mine/about/webviewShow_page.dart';
|
||||
import 'package:star_lock/mine/mine/safeVerify/safeVerify_page.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart';
|
||||
@ -453,7 +455,9 @@ abstract class AppRouters {
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.starLockMain,
|
||||
page: () => const StarLockMainPage(),
|
||||
page: () => F.sw(
|
||||
defaultCall: () => StarLockMainPage(),
|
||||
xhjCall: () => const StarLockMainXHJPage()),
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.starLockMinePage,
|
||||
@ -465,7 +469,7 @@ abstract class AppRouters {
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.lockMallPage,
|
||||
page: () => const LockMallPage(),
|
||||
page: () => LockMallPage(),
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.addLockPage,
|
||||
@ -729,7 +733,7 @@ abstract class AppRouters {
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.minePersonInfoPage,
|
||||
page: () => const MinePersonInfoPage(),
|
||||
page: () => MinePersonInfoPage(),
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.minePersonInfoEditNamePage,
|
||||
@ -761,7 +765,7 @@ abstract class AppRouters {
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.messageListPage,
|
||||
page: () => const MessageListPage(),
|
||||
page: () => MessageListPage(),
|
||||
),
|
||||
GetPage(
|
||||
name: Routers.supportStaffPage,
|
||||
|
||||
@ -1,10 +1,15 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:fluwx/fluwx.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
|
||||
class AppColors {
|
||||
// static Color mainColor = const Color(0xFF385DEA);
|
||||
static Color mainColor = const Color(0xFF4777EE);
|
||||
static Color get mainColor => F.sw(
|
||||
defaultCall: () => const Color(0xFF4777EE),
|
||||
xhjCall: () => const Color(0xFF68c1b9));
|
||||
|
||||
static Color mainBackgroundColor = const Color(0xFFF5F5F5);
|
||||
|
||||
static Color primaryTopColor = const Color(0xFF021B38);
|
||||
@ -25,6 +30,7 @@ class AppColors {
|
||||
|
||||
//check box color
|
||||
static Color checkBoxSelectedColor = touristColor;
|
||||
|
||||
static Color get checkBoxUnselectedColor => const Color(0xFFFFFFFF);
|
||||
static Color checkBoxOverlayColor = checkBoxUnselectedColor.withOpacity(0.3);
|
||||
|
||||
@ -69,6 +75,7 @@ class AppColors {
|
||||
static Color wifiDisableColor = const Color(0xFFA8A8A8);
|
||||
|
||||
static Color get paginationColor => const Color(0xFF01295C).withOpacity(45);
|
||||
|
||||
static Color get paginationActiveColor =>
|
||||
const Color(0xFFFFFFFF).withOpacity(65);
|
||||
|
||||
@ -128,8 +135,9 @@ class AppColors {
|
||||
static const msgNoticeTextColor = Color.fromRGBO(139, 148, 176, 1); //消息提醒字体颜色
|
||||
static const alphaBgViewColor = Color.fromRGBO(0, 0, 0, 0.2); //透明度背景
|
||||
|
||||
static Color openPassageModeColor = const Color(0xFFEB2A3B);// 首页开启常开模式颜色(红色)
|
||||
static Color listTimeYellowColor = const Color(0xFFF3BA37);// 首页时间过期颜色(黄色)
|
||||
static Color openPassageModeColor = const Color(0xFFEB2A3B); // 首页开启常开模式颜色(红色)
|
||||
static Color listTimeYellowColor = const Color(0xFFF3BA37); // 首页时间过期颜色(黄色)
|
||||
|
||||
static Color get lockDetailBottomBtnUneable => const Color(0xFF808080);// 首页时间灰色颜色(灰色)
|
||||
static Color get lockDetailBottomBtnUneable =>
|
||||
const Color(0xFF808080); // 首页时间灰色颜色(灰色)
|
||||
}
|
||||
|
||||
@ -180,6 +180,7 @@ class BlueManage {
|
||||
FlutterBluePlus.startScan(timeout: Duration(seconds: timeout));
|
||||
Completer<dynamic> completer = Completer<dynamic>();
|
||||
var subscription = FlutterBluePlus.scanResults.listen((results) {
|
||||
Get.log("startScanSingle扫描到的设备:$results");
|
||||
bool isExit = results.any((element) => element.device.platformName == deviceName);
|
||||
if (isExit) {
|
||||
for (var scanResult in results) {
|
||||
@ -442,7 +443,7 @@ class BlueManage {
|
||||
|
||||
_subScribeToCharacteristic(BluetoothCharacteristic characteristic) async {
|
||||
final subscription = characteristic.onValueReceived.listen((data) {
|
||||
Get.log("启动对特性的通知。当特性的值发生变化时,设备会发送一个通知");
|
||||
// Get.log("启动对特性的通知。当特性的值发生变化时,设备会发送一个通知");
|
||||
Get.log("订阅获取的数据:$data");
|
||||
if (data == lastTimeData || data.isEmpty) {
|
||||
return;
|
||||
@ -455,14 +456,14 @@ class BlueManage {
|
||||
// 当包有头时
|
||||
// 判断是否需要分包
|
||||
dataLen = data[8] * 256 + data[9]; // 高16位用来指示后面数据块内容的长度
|
||||
// Get.log("dataLen1111:$dataLen getDataLength:${data.length}");
|
||||
Get.log("dataLen1111:$dataLen getDataLength:${data.length} data:$data");
|
||||
if (dataLen! + 12 > data.length) {
|
||||
// 当前包的长度小于实际的包时 分包添加 不解析
|
||||
allData.addAll(data);
|
||||
} else {
|
||||
// 当前包的长度小于实际的包时 不分包 解析
|
||||
allData.addAll(data);
|
||||
// Get.log("dataLen2222:$dataLen getDataLength:${data.length}");
|
||||
Get.log("dataLen2222:$dataLen getDataLength:${data.length}");
|
||||
CommandReciverManager.appDataReceive(allData);
|
||||
// 发送完解析初始化数组
|
||||
allData = <int>[];
|
||||
@ -471,9 +472,9 @@ class BlueManage {
|
||||
// 当包没有头时 是分包的包 直接添加
|
||||
allData.addAll(data);
|
||||
// var len = allData[8] * 256 + allData[9];
|
||||
// print("dataLen3333:$dataLen");
|
||||
print("dataLen3333:$dataLen allData.length:${allData.length} allData:$allData");
|
||||
if ((dataLen! + 14) <= allData.length) {
|
||||
// print("44444数据被解析了");
|
||||
print("44444数据被解析了");
|
||||
// 当长度小于等于当前包的数据时 直接解析数据
|
||||
CommandReciverManager.appDataReceive(allData);
|
||||
// 发送完解析初始化数组
|
||||
|
||||
@ -67,7 +67,7 @@ class CommandReciverManager {
|
||||
|
||||
var dataLen = data[8] * 256 + data[9]; // 高16位用来指示后面数据块内容的长度
|
||||
var oriLen = data[10] * 256 + data[11]; // 低16位用来指示数据加密前的原长度
|
||||
// print("dataLen:$dataLen oriLen:$oriLen");
|
||||
print("dataLen:$dataLen oriLen:$oriLen");
|
||||
// List<int> dataList = [];
|
||||
List<int> oriDataList = [];
|
||||
switch (tmpType) {
|
||||
|
||||
@ -18,6 +18,8 @@ class StarLockAMapKey {
|
||||
const StarLockAMapKey({required this.iosKey, required this.androidKey});
|
||||
}
|
||||
|
||||
typedef dynamic fCallFunction();
|
||||
|
||||
class F {
|
||||
static Flavor? appFlavor;
|
||||
|
||||
@ -26,6 +28,24 @@ class F {
|
||||
|
||||
static String get name => appFlavor?.name ?? '';
|
||||
|
||||
//便捷判断并返回值
|
||||
static dynamic sw(
|
||||
{required fCallFunction defaultCall, fCallFunction? xhjCall}) {
|
||||
if (xhjCall == null) {
|
||||
return defaultCall();
|
||||
}
|
||||
switch (appFlavor) {
|
||||
case Flavor.xhj:
|
||||
return xhjCall();
|
||||
case Flavor.local:
|
||||
case Flavor.dev:
|
||||
case Flavor.pre:
|
||||
case Flavor.sky:
|
||||
default:
|
||||
return defaultCall();
|
||||
}
|
||||
}
|
||||
|
||||
static bool get debug {
|
||||
switch (appFlavor) {
|
||||
case Flavor.local:
|
||||
@ -54,7 +74,7 @@ class F {
|
||||
case Flavor.sky:
|
||||
return '锁通通';
|
||||
case Flavor.xhj:
|
||||
return '鑫锁';
|
||||
return '星星锁';
|
||||
default:
|
||||
throw Exception('flavor[$name] title not found');
|
||||
}
|
||||
@ -71,7 +91,7 @@ class F {
|
||||
case Flavor.sky:
|
||||
return '锁通通';
|
||||
case Flavor.xhj:
|
||||
return '鑫锁';
|
||||
return '星星锁';
|
||||
default:
|
||||
throw Exception('flavor[$name] title not found');
|
||||
}
|
||||
@ -89,7 +109,8 @@ class F {
|
||||
case Flavor.sky:
|
||||
return 'https://lock.skychip.top';
|
||||
case Flavor.xhj:
|
||||
return 'https://lock.xhjcn.ltd';
|
||||
// return 'https://lock.xhjcn.ltd';
|
||||
return 'https://pre.lock.star-lock.cn';
|
||||
default:
|
||||
throw Exception('flavor[$name] apiPrefix not found');
|
||||
}
|
||||
|
||||
@ -17,8 +17,11 @@ class StarLockLoginLogic extends BaseGetXController {
|
||||
final stateMyLogic = Get.put(StarLockMineLogic()).state;
|
||||
|
||||
void login() async {
|
||||
var entity = await ApiRepository.to
|
||||
.login("1", state.pwd.value, "+86", state.emailOrPhone.value);
|
||||
var entity = await ApiRepository.to.login(
|
||||
loginType:"1",
|
||||
password:state.pwd.value,
|
||||
countryCode:state.countryCode.value,
|
||||
username:state.emailOrPhone.value);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
Storage.saveLoginData(entity.data);
|
||||
eventBus.fire(MineInfoChangeRefreshUI());
|
||||
|
||||
@ -8,6 +8,7 @@ import 'package:star_lock/flavors.dart';
|
||||
import '../../appRouters.dart';
|
||||
import '../../app_settings/app_colors.dart';
|
||||
import '../../common/XSConstantMacro/XSConstantMacro.dart';
|
||||
import '../../tools/commonItem.dart';
|
||||
import '../../tools/tf_loginInput.dart';
|
||||
import '../../tools/submitBtn.dart';
|
||||
import '../../tools/titleAppBar.dart';
|
||||
@ -61,6 +62,28 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
|
||||
child: Image.asset('images/icon_main_1024.png',
|
||||
width: 110.w, height: 110.w))),
|
||||
SizedBox(height: 50.w),
|
||||
CommonItem(
|
||||
leftTitel: "${"你所在的".tr}${TranslationLoader.lanKeys!.countryAndRegion!.tr}",
|
||||
rightTitle: "",
|
||||
isHaveLine: true,
|
||||
isPadding: false,
|
||||
isHaveRightWidget: true,
|
||||
isHaveDirection: true,
|
||||
rightWidget: Text(
|
||||
'${state.countryName.value} +${state.countryCode.value}',
|
||||
textAlign: TextAlign.end,
|
||||
style:
|
||||
TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
action: () async {
|
||||
var result = await Get.toNamed(Routers.selectCountryRegionPage);
|
||||
if (result != null) {
|
||||
result as Map<String, dynamic>;
|
||||
state.countryCode.value = result['code'];
|
||||
state.countryName.value = result['countryName'];
|
||||
}
|
||||
},
|
||||
),
|
||||
LoginInput(
|
||||
controller: state.emailOrPhoneController,
|
||||
onchangeAction: (v) {
|
||||
|
||||
@ -5,6 +5,9 @@ class StarLockLoginState {
|
||||
var passwordShow = true.obs;
|
||||
var agree = false.obs;
|
||||
|
||||
var countryCode = '86'.obs;
|
||||
var countryName = '中国'.obs;
|
||||
|
||||
var emailOrPhone = ''.obs;
|
||||
var pwd = ''.obs;
|
||||
var canNext = false.obs;
|
||||
|
||||
@ -31,7 +31,7 @@ class StarLockRegisterLogic extends BaseGetXController {
|
||||
void register() async {
|
||||
var entity = await ApiRepository.to.register(
|
||||
receiverType: state.isIphoneType.value == true ? 1 : 2,
|
||||
countryCode: state.countryCode.value,
|
||||
countryCode: int.parse(state.countryCode.value),
|
||||
account: state.phoneOrEmailStr.value,
|
||||
password: state.pwd.value,
|
||||
verificationCode: state.verificationCode.value);
|
||||
|
||||
@ -143,16 +143,15 @@ class _StarLockRegisterPageState extends State<StarLockRegisterPage> {
|
||||
SizedBox(height: 60.h),
|
||||
GestureDetector(
|
||||
onTap: () async {
|
||||
var result = await Navigator.pushNamed(
|
||||
context, Routers.selectCountryRegionPage);
|
||||
var result = await Get.toNamed(Routers.selectCountryRegionPage);
|
||||
if (result != null) {
|
||||
result as Map<String, dynamic>;
|
||||
state.countryCode.value = result['code'];
|
||||
state.countryName.value = result['countryName'];
|
||||
}
|
||||
// print("路由返回值: ${result}, countryCode:${logic.state.countryCode} ,countryId:${logic.state.countryId}");
|
||||
Get.log("路由返回值: $result, countryCode:${logic.state.countryCode}");
|
||||
},
|
||||
child: SizedBox(
|
||||
child: Obx(() => SizedBox(
|
||||
height: 70.h,
|
||||
child: Row(
|
||||
children: [
|
||||
@ -165,14 +164,14 @@ class _StarLockRegisterPageState extends State<StarLockRegisterPage> {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Obx(() => Text(
|
||||
state.isIphoneType.value
|
||||
? '${state.countryName} +${state.countryCode}'
|
||||
: "${state.countryName}",
|
||||
textAlign: TextAlign.end,
|
||||
style: TextStyle(
|
||||
fontSize: 26.sp, color: AppColors.blackColor),
|
||||
))
|
||||
Text(
|
||||
state.isIphoneType.value
|
||||
? '${state.countryName.value} +${state.countryCode.value}'
|
||||
: state.countryName.value,
|
||||
textAlign: TextAlign.end,
|
||||
style: TextStyle(
|
||||
fontSize: 26.sp, color: AppColors.blackColor),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(width: 5.w),
|
||||
@ -183,7 +182,7 @@ class _StarLockRegisterPageState extends State<StarLockRegisterPage> {
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
)),
|
||||
),
|
||||
Container(
|
||||
height: 0.5.h,
|
||||
|
||||
@ -10,7 +10,7 @@ class StarLockRegisterState {
|
||||
final TextEditingController sureController = TextEditingController();
|
||||
final TextEditingController codeController = TextEditingController();
|
||||
|
||||
var countryCode = 86.obs;
|
||||
var countryCode = "86".obs;
|
||||
var countryName = '中国'.tr.obs;
|
||||
|
||||
var phoneOrEmailStr = ''.obs;
|
||||
|
||||
@ -451,9 +451,7 @@ class LockDetailLogic extends BaseGetXController {
|
||||
// );
|
||||
|
||||
Get.log("openMode:${state.openDoorModel}");
|
||||
BlueManage()
|
||||
.bludSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!,
|
||||
(BluetoothConnectionState deviceConnectionState) async {
|
||||
BlueManage().bludSendData(state.keyInfos.value.bluetooth!.bluetoothDeviceName!, (BluetoothConnectionState deviceConnectionState) async {
|
||||
if (deviceConnectionState == BluetoothConnectionState.connected) {
|
||||
IoSenderManage.senderOpenLock(
|
||||
keyID: BlueManage().connectDeviceName,
|
||||
@ -636,12 +634,16 @@ class LockDetailLogic extends BaseGetXController {
|
||||
|
||||
// 获取手机联网token,根据锁设置里面获取的开锁时是否联网来判断是否调用这个接口
|
||||
void getLockNetToken() async {
|
||||
LockNetTokenEntity entity = await ApiRepository.to
|
||||
.getLockNetToken(lockId: state.keyInfos.value.lockId.toString());
|
||||
LockNetTokenEntity entity = await ApiRepository.to.getLockNetToken(lockId: state.keyInfos.value.lockId.toString());
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
state.lockNetToken = entity.data!.token!;
|
||||
Get.log("state.lockNetToken:${state.lockNetToken}");
|
||||
openDoorAction();
|
||||
}else{
|
||||
showToast("获取联网token失败", something: (){
|
||||
state.openLockBtnState.value = 0;
|
||||
cancelBlueConnetctToastTimer();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -649,7 +651,8 @@ class LockDetailLogic extends BaseGetXController {
|
||||
void _updateLockUserNo() async {
|
||||
LockNetTokenEntity entity = await ApiRepository.to.updateLockUserNo(
|
||||
keyId: state.keyInfos.value.keyId.toString(),
|
||||
lockUserNo: state.lockUserNo.toString());
|
||||
lockUserNo: state.lockUserNo.toString()
|
||||
);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
eventBus.fire(RefreshLockDetailInfoDataEvent());
|
||||
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||
@ -718,19 +721,16 @@ class LockDetailLogic extends BaseGetXController {
|
||||
void initLockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceAction() {
|
||||
// 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus
|
||||
state.lockSetOpenOrCloseCheckInRefreshLockDetailWithAttendanceEvent =
|
||||
eventBus
|
||||
.on<LockSetChangeSetRefreshLockDetailWithType>()
|
||||
.listen((event) {
|
||||
eventBus.on<LockSetChangeSetRefreshLockDetailWithType>().listen((event) {
|
||||
if (event.type == 0) {
|
||||
// 0考勤
|
||||
state.isAttendance.value = int.parse(event.setResult);
|
||||
state.keyInfos.value.lockSetting!.attendance =
|
||||
int.parse(event.setResult);
|
||||
state.keyInfos.value.lockSetting!.attendance = int.parse(event.setResult);
|
||||
} else if (event.type == 1) {
|
||||
// 1 开锁时是否需联网
|
||||
state.isOpenLockNeedOnline.value = int.parse(event.setResult);
|
||||
state.keyInfos.value.lockSetting!.appUnlockOnline =
|
||||
int.parse(event.setResult);
|
||||
state.keyInfos.value.lockSetting!.appUnlockOnline = int.parse(event.setResult);
|
||||
state.lockNetToken = "";// 改变开锁时是否联网状态的时候清空token
|
||||
Get.log(
|
||||
"state.isOpenLockNeedOnline.value:${state.isOpenLockNeedOnline.value}");
|
||||
} else if (event.type == 2) {
|
||||
@ -858,8 +858,7 @@ class LockDetailLogic extends BaseGetXController {
|
||||
Future<void> positionPermissionAlert() async {
|
||||
//安卓平台下首次进入应用需向用户告知获取权限用途弹窗
|
||||
if (Platform.isAndroid) {
|
||||
AppFirstEnterHandle()
|
||||
.getAppFirstEnter(state.widgetContext, isAgreePosition);
|
||||
AppFirstEnterHandle().getAppFirstEnter(state.widgetContext, isAgreePosition);
|
||||
var getFlag = await Storage.getString(isAgreePosition);
|
||||
if (getFlag == isAgreePosition) {
|
||||
openBlueSet();
|
||||
|
||||
@ -33,8 +33,7 @@ class LockDetailPage extends StatefulWidget {
|
||||
State<LockDetailPage> createState() => _LockDetailPageState();
|
||||
}
|
||||
|
||||
class _LockDetailPageState extends State<LockDetailPage>
|
||||
with TickerProviderStateMixin, RouteAware {
|
||||
class _LockDetailPageState extends State<LockDetailPage> with TickerProviderStateMixin, RouteAware {
|
||||
// with RouteAware
|
||||
final logic = Get.put(LockDetailLogic());
|
||||
final state = Get.find<LockDetailLogic>().state;
|
||||
@ -122,8 +121,7 @@ class _LockDetailPageState extends State<LockDetailPage>
|
||||
Storage.setStringList(saveBluePrivateKey, savePrivateKeyList);
|
||||
|
||||
// signKey
|
||||
List<int> signKeyData =
|
||||
state.keyInfos.value.bluetooth!.signKey!.cast<int>();
|
||||
List<int> signKeyData = state.keyInfos.value.bluetooth!.signKey!.cast<int>();
|
||||
var saveSignKeyList = changeIntListToStringList(signKeyData);
|
||||
Storage.setStringList(saveBlueSignKey, saveSignKeyList);
|
||||
|
||||
|
||||
@ -46,6 +46,8 @@ class _EditLockNamePageState extends State<EditLockNamePage> {
|
||||
controller: state.changeLockNameController,
|
||||
leftWidget: const SizedBox(),
|
||||
hintText: "请输入名称".tr,
|
||||
isHaveLeftWidget: true,
|
||||
isSuffixIcon: true,
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter(50),
|
||||
]),
|
||||
|
||||
@ -535,7 +535,9 @@ class LockSetLogic extends BaseGetXController {
|
||||
});
|
||||
} else{
|
||||
// 普通用户直接删除
|
||||
deletKeyData();
|
||||
ShowTipView().showIosTipWithContentDialog("是否删除钥匙?".tr, (){
|
||||
deletKeyData();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -133,10 +133,11 @@ class LockListLogic extends BaseGetXController{
|
||||
state.deleteAdministratorIsHaveAllData.value = a;
|
||||
deletKeyData();
|
||||
});
|
||||
// showDeleteAdministratorIsHaveAllDataDialog();
|
||||
} else{
|
||||
// 普通用户直接删除
|
||||
deletKeyData();
|
||||
ShowTipView().showIosTipWithContentDialog("是否删除钥匙?".tr, (){
|
||||
deletKeyData();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -22,20 +22,20 @@ import '../lockList/lockList_page.dart';
|
||||
import 'lockMain_logic.dart';
|
||||
|
||||
class StarLockMainPage extends StatefulWidget {
|
||||
const StarLockMainPage({Key? key}) : super(key: key);
|
||||
StarLockMainPage({Key? key, this.showAppBar = true, this.showDrawer = true})
|
||||
: super(key: key);
|
||||
bool showAppBar;
|
||||
bool showDrawer;
|
||||
|
||||
@override
|
||||
State<StarLockMainPage> createState() => _StarLockMainPageState();
|
||||
}
|
||||
|
||||
// GlobalKey<_StarLockMainPageState> starLockMainKey = GlobalKey();
|
||||
class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
final logic = Get.put(LockMainLogic());
|
||||
final state = Get.find<LockMainLogic>().state;
|
||||
|
||||
Future<void> getHttpData() async {
|
||||
// await logic.getStarLockInfo();
|
||||
// setState(() {});
|
||||
logic.getStarLockInfo().then((LockListInfoEntity value) {
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
@ -46,7 +46,7 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance!.addPostFrameCallback((_) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
});
|
||||
@ -57,60 +57,38 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
// WidgetsBinding.instance!.addPostFrameCallback((_) {
|
||||
// getHttpData();
|
||||
// });
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: const Color(0xFFF5F5F5),
|
||||
appBar: TitleAppBar(
|
||||
barTitle: F.navTitle,
|
||||
haveBack: false,
|
||||
haveOtherLeftWidget: true,
|
||||
leftWidget: Builder(
|
||||
builder: (context) => IconButton(
|
||||
icon: Image.asset(
|
||||
"images/main/mainLeft_menu_icon.png",
|
||||
color: Colors.white,
|
||||
width: 44.w,
|
||||
height: 44.w,
|
||||
),
|
||||
onPressed: () {
|
||||
// _globalKey.currentState!.openDrawer();
|
||||
Scaffold.of(context).openDrawer();
|
||||
},
|
||||
)),
|
||||
backgroundColor: AppColors.mainColor,
|
||||
// actionsList: [
|
||||
// TextButton(
|
||||
// child: const Text("", style: TextStyle(color: Colors.white)),
|
||||
// onPressed: () {
|
||||
// Navigator.pushNamed(context, Routers.starLockLoginPage);
|
||||
// },
|
||||
// ),
|
||||
// ],
|
||||
),
|
||||
drawer: Drawer(
|
||||
width: 1.sw / 3 * 2,
|
||||
child: const StarLockMinePage(),
|
||||
),
|
||||
// body: FutureBuilder<LockListInfoGroupEntity>(
|
||||
// future: logic.getStarLockInfo(), // 异步操作
|
||||
// builder: (BuildContext context, AsyncSnapshot<LockListInfoGroupEntity> snapshot) {
|
||||
// if (snapshot.connectionState == ConnectionState.waiting) {
|
||||
// // return CircularProgressIndicator(); // 显示加载指示器
|
||||
// return Container();
|
||||
// } else if (snapshot.hasError) {
|
||||
// // return Text('Error: ${snapshot.error}'); // 显示错误
|
||||
// return unHaveData();
|
||||
// } else {
|
||||
// return getDataReturnUI(snapshot.data!.groupList!.length ?? 0); // 显示获取的数据
|
||||
// }
|
||||
// },
|
||||
// ),
|
||||
appBar: widget.showAppBar
|
||||
? TitleAppBar(
|
||||
barTitle: F.navTitle,
|
||||
haveBack: false,
|
||||
haveOtherLeftWidget: true,
|
||||
leftWidget: Builder(
|
||||
builder: (context) => IconButton(
|
||||
icon: Image.asset(
|
||||
"images/main/mainLeft_menu_icon.png",
|
||||
color: Colors.white,
|
||||
width: 44.w,
|
||||
height: 44.w,
|
||||
),
|
||||
onPressed: () {
|
||||
Scaffold.of(context).openDrawer();
|
||||
},
|
||||
)),
|
||||
backgroundColor: AppColors.mainColor,
|
||||
)
|
||||
: null,
|
||||
drawer: widget.showDrawer
|
||||
? Drawer(
|
||||
width: 1.sw / 3 * 2,
|
||||
child: const StarLockMinePage(),
|
||||
)
|
||||
: null,
|
||||
body: EasyRefreshTool(
|
||||
onRefresh: () {
|
||||
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||
@ -120,13 +98,6 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
});
|
||||
},
|
||||
child: getDataReturnUI(state.dataLength.value)),
|
||||
// body:smartRefresher(
|
||||
// logic.refreshController,
|
||||
// onRefresh:logic.onRefresh,
|
||||
// onLoading:logic.onLoading,
|
||||
// child:Obx(() => getDataReturnUI(state.dataLength.value))),
|
||||
// body: getLockList(),
|
||||
// body: unHaveData(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -140,11 +111,12 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
case 1:
|
||||
// 只有一条数据
|
||||
Storage.setBool(ifIsDemoModeOrNot, false);
|
||||
print("state.lockListInfoEntity.value.data!.groupList![0].lockList![0]:${state.lockListInfoGroupEntity.value.groupList![0].lockList![0].endDate}");
|
||||
print(
|
||||
"state.lockListInfoEntity.value.data!.groupList![0].lockList![0]:${state.lockListInfoGroupEntity.value.groupList![0].lockList![0].endDate}");
|
||||
returnWidget = LockDetailPage(
|
||||
isOnlyOneData: true,
|
||||
lockListInfoItemEntity: state
|
||||
.lockListInfoGroupEntity.value.groupList![0].lockList![0]);
|
||||
lockListInfoItemEntity:
|
||||
state.lockListInfoGroupEntity.value.groupList![0].lockList![0]);
|
||||
break;
|
||||
case 2:
|
||||
// 有多条数据
|
||||
@ -156,8 +128,6 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
returnWidget = NoData();
|
||||
break;
|
||||
}
|
||||
// Future.delayed(const Duration(seconds: 1));
|
||||
// Future.delayed(const Duration(milliseconds: 200));
|
||||
return returnWidget;
|
||||
}
|
||||
|
||||
@ -175,12 +145,6 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 330.w,
|
||||
// height: 330.w,
|
||||
// margin: EdgeInsets.only(top: 180.h),
|
||||
// decoration: BoxDecoration(
|
||||
// border: Border.all(width: 4.w, color: AppColors.mainColor),
|
||||
// borderRadius: BorderRadius.circular(110.w),
|
||||
// ),
|
||||
child: InkWell(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(30.0),
|
||||
@ -193,11 +157,8 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
onTap: () {
|
||||
//实现回调函数
|
||||
Navigator.pushNamed(
|
||||
context, Routers.selectLockTypePage,
|
||||
// arguments: {
|
||||
// "url": ConstConfig.privacAgreementUrl,
|
||||
// "title": '隐私政策'
|
||||
// }
|
||||
context,
|
||||
Routers.selectLockTypePage,
|
||||
);
|
||||
},
|
||||
)),
|
||||
@ -235,10 +196,10 @@ class _StarLockMainPageState extends State<StarLockMainPage> with BaseWidget {
|
||||
void onHide() {}
|
||||
|
||||
late StreamSubscription _teamEvent;
|
||||
|
||||
void _initLoadDataAction() {
|
||||
print("监听刷新首页数据消息");
|
||||
_teamEvent = eventBus.on<RefreshLockListInfoDataEvent>().listen((event) {
|
||||
// getLockInfo();
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
print("收到刷新首页数据消息");
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
import 'dart:async';
|
||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_state.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
|
||||
class LockMainXHJLogic extends BaseGetXController {
|
||||
final LockMainXHJState state = LockMainXHJState();
|
||||
|
||||
void setIndex(int index) {
|
||||
state.index = index;
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
164
star_lock/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart
Normal file
164
star_lock/lib/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart
Normal file
@ -0,0 +1,164 @@
|
||||
import 'dart:async';
|
||||
import 'dart:ui';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/scheduler.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/baseWidget.dart';
|
||||
import 'package:star_lock/main/lockMian/lockMain/lockMain_page.dart';
|
||||
import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart';
|
||||
import 'package:star_lock/mine/mall/lockMall_page.dart';
|
||||
import 'package:star_lock/mine/message/messageList/messageList_page.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_page.dart';
|
||||
import 'package:star_lock/tools/noData.dart';
|
||||
import 'package:star_lock/tools/submitBtn.dart';
|
||||
|
||||
class StarLockMainXHJPage extends StatefulWidget {
|
||||
const StarLockMainXHJPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<StarLockMainXHJPage> createState() => _StarLockMainXHJPageState();
|
||||
}
|
||||
|
||||
class _StarLockMainXHJPageState extends State<StarLockMainXHJPage>
|
||||
with BaseWidget {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GetBuilder<LockMainXHJLogic>(
|
||||
init: LockMainXHJLogic(),
|
||||
builder: (LockMainXHJLogic logic) {
|
||||
return Scaffold(
|
||||
backgroundColor: const Color(0xFFF5F5F5),
|
||||
body: SafeArea(
|
||||
bottom: false,
|
||||
child: Stack(
|
||||
children: [
|
||||
pageView(
|
||||
widget: StarLockMainPage(
|
||||
showAppBar: false,
|
||||
showDrawer: false,
|
||||
),
|
||||
logic: logic,
|
||||
index: 0,
|
||||
),
|
||||
pageView(
|
||||
widget: MessageListPage(
|
||||
showAppBar: false,
|
||||
),
|
||||
logic: logic,
|
||||
index: 1),
|
||||
pageView(
|
||||
widget: LockMallPage(
|
||||
showAppBar: false,
|
||||
),
|
||||
logic: logic,
|
||||
index: 2),
|
||||
pageView(
|
||||
widget: MinePersonInfoPage(
|
||||
showAppBar: false,
|
||||
),
|
||||
logic: logic,
|
||||
index: 3),
|
||||
],
|
||||
),
|
||||
),
|
||||
bottomNavigationBar: Container(
|
||||
height: 100.h + Get.bottomBarHeight,
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.transparent,
|
||||
border: Border(
|
||||
top: BorderSide(
|
||||
color: Colors.black, // 设置边框颜色
|
||||
width: 0.3, // 设置边框宽度
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
// navigationBarItem(Icons.start, '场景', false, () {
|
||||
// logic.setIndex(0);
|
||||
// }),
|
||||
navigationBarItem(Icons.devices, '设备', logic, 0, () {
|
||||
logic.setIndex(0);
|
||||
}),
|
||||
navigationBarItem(Icons.message, '消息', logic, 1, () {
|
||||
logic.setIndex(1);
|
||||
}),
|
||||
navigationBarItem(Icons.shopping_cart, '商城', logic, 2, () {
|
||||
logic.setIndex(2);
|
||||
}),
|
||||
navigationBarItem(Icons.account_circle, '我的', logic, 3, () {
|
||||
logic.setIndex(3);
|
||||
}),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
//布局
|
||||
Widget pageView(
|
||||
{required Widget widget,
|
||||
required LockMainXHJLogic logic,
|
||||
required int index}) {
|
||||
return Positioned.fill(
|
||||
child: Offstage(
|
||||
offstage: logic.state.index != index,
|
||||
child: widget,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
//底部按钮
|
||||
Widget navigationBarItem(IconData icon, String text, LockMainXHJLogic logic,
|
||||
int index, var onTop) {
|
||||
bool check = logic.state.index == index;
|
||||
return Expanded(
|
||||
child: GestureDetector(
|
||||
onTap: onTop,
|
||||
child: Container(
|
||||
color: Colors.transparent,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(bottom: 8.h),
|
||||
child: Icon(
|
||||
icon,
|
||||
size: 32.r,
|
||||
color:
|
||||
check ? AppColors.mainColor : AppColors.darkGrayTextColor,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color:
|
||||
check ? AppColors.mainColor : AppColors.darkGrayTextColor,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class LockMainXHJState {
|
||||
int index = 0;
|
||||
|
||||
}
|
||||
@ -1,6 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
// import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
|
||||
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_getPrivateKey.dart';
|
||||
@ -28,7 +27,6 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
IoSenderManage.getPublicKey(lockId: deviceName);
|
||||
}else if (state == BluetoothConnectionState.disconnected) {
|
||||
dismissEasyLoading();
|
||||
// showBlueConnetctToast();
|
||||
}
|
||||
}, isAddEquipment: true);
|
||||
}
|
||||
@ -36,8 +34,7 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
// 获取解析后的数据
|
||||
late StreamSubscription<Reply> _replySubscription;
|
||||
void _initReplySubscription() {
|
||||
_replySubscription =
|
||||
EventBusManager().eventBus!.on<Reply>().listen((reply) {
|
||||
_replySubscription = EventBusManager().eventBus!.on<Reply>().listen((reply) {
|
||||
if (reply is GetPublicKeyReply) {
|
||||
_replyGetPublicKey(reply);
|
||||
}
|
||||
@ -58,7 +55,7 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
switch (reply.status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
print("获取公钥成功");
|
||||
Get.log("获取公钥成功");
|
||||
// 储存公钥
|
||||
var publicKey = reply.data.sublist(3);
|
||||
var saveStrList = changeIntListToStringList(publicKey);
|
||||
@ -75,15 +72,15 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("获取公钥无权限");
|
||||
Get.log("获取公钥无权限");
|
||||
break;
|
||||
case 0x0f:
|
||||
//用户已存在
|
||||
print("获取公钥用户已存在");
|
||||
Get.log("获取公钥用户已存在");
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("获取公钥失败");
|
||||
Get.log("获取公钥失败");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -92,19 +89,19 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
switch (reply.status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
print('获取私钥成功');
|
||||
Get.log('获取私钥成功');
|
||||
reply.data.removeAt(0);
|
||||
print("reply.data:${reply.data}");
|
||||
Get.log("reply.data:${reply.data}");
|
||||
|
||||
// 私钥
|
||||
List<int> privateKey = reply.data.sublist(0, 16);
|
||||
print("privateKey:$privateKey");
|
||||
Get.log("privateKey:$privateKey");
|
||||
var savePrivateKeyList = changeIntListToStringList(privateKey);
|
||||
Storage.setStringList(saveBluePrivateKey, savePrivateKeyList);
|
||||
|
||||
// signKey
|
||||
List<int> signKey = reply.data.sublist(16, 32);
|
||||
print("signKey:$signKey");
|
||||
Get.log("signKey:$signKey");
|
||||
var saveSignKeyList = changeIntListToStringList(signKey);
|
||||
Storage.setStringList(saveBlueSignKey, saveSignKeyList);
|
||||
|
||||
@ -114,23 +111,21 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
(0xff & timestamp[1]) << 16 |
|
||||
(0xff & timestamp[2]) << 8 |
|
||||
(0xFF & timestamp[3]));
|
||||
// String timestampValueStr = DateTool().dateToYMDHNSString(timestampValue.toString());
|
||||
// print("timestamp:$timestamp timestampValue:$timestampValue timestampValueStr:$timestampValueStr");
|
||||
|
||||
_getStarLockStatus();
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print('获取私钥无权限');
|
||||
Get.log('获取私钥无权限');
|
||||
|
||||
break;
|
||||
case 0x0f:
|
||||
//用户已存在
|
||||
print('获取私钥:用户已存在');
|
||||
Get.log('获取私钥:用户已存在');
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print('获取私钥失败');
|
||||
Get.log('获取私钥失败');
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -145,63 +140,62 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
|
||||
// 厂商名称
|
||||
var vendor = reply.data.sublist(3, 23);
|
||||
print("vendor:$vendor reply.data:${reply.data}");
|
||||
Get.log("vendor:$vendor reply.data:${reply.data}");
|
||||
var vendorStr = utf8String(vendor);
|
||||
state.lockInfo["vendor"] = vendorStr;
|
||||
// print("vendor:$vendor vendorStr:$vendorStr vendorStr.length${vendorStr.length}");
|
||||
|
||||
// 锁设备类型
|
||||
var product = reply.data[23];
|
||||
state.lockInfo["product"] = product;
|
||||
// print("product:$product");
|
||||
// Get.log("product:$product");
|
||||
|
||||
// 产品名称
|
||||
var model = reply.data.sublist(24, 44);
|
||||
var modelStr = utf8String(model);
|
||||
state.lockInfo["model"] = modelStr;
|
||||
// print("model:$model modelStr:$modelStr modelStr:${modelStr.length}");
|
||||
// Get.log("model:$model modelStr:$modelStr modelStr:${modelStr.length}");
|
||||
|
||||
// 软件版本
|
||||
var fwVersion = reply.data.sublist(44, 64);
|
||||
var fwVersionStr = utf8String(fwVersion);
|
||||
state.lockInfo["fwVersion"] = fwVersionStr;
|
||||
// print("fwVersion:$fwVersion fwVersionStr:$fwVersionStr fwVersionStr:${fwVersionStr.length}");
|
||||
// Get.log("fwVersion:$fwVersion fwVersionStr:$fwVersionStr fwVersionStr:${fwVersionStr.length}");
|
||||
|
||||
// 硬件版本
|
||||
var hwVersion = reply.data.sublist(64, 84);
|
||||
var hwVersionStr = utf8String(hwVersion);
|
||||
state.lockInfo["hwVersion"] = hwVersionStr;
|
||||
// print("hwVersion:$hwVersion hwVersionStr:${hwVersionStr.length}");
|
||||
// Get.log("hwVersion:$hwVersion hwVersionStr:${hwVersionStr.length}");
|
||||
|
||||
// 厂商序列号
|
||||
var serialNum0 = reply.data.sublist(84, 100);
|
||||
var serialNum0Str = utf8String(serialNum0);
|
||||
state.lockInfo["serialNum0"] = serialNum0Str;
|
||||
// state.lockInfo["serialNum0"] = "${DateTime.now().millisecondsSinceEpoch ~/ 10}";
|
||||
print("serialNum0Str:$serialNum0Str serialNum0Str:${serialNum0Str.length}");
|
||||
Get.log("serialNum0Str:$serialNum0Str serialNum0Str:${serialNum0Str.length}");
|
||||
|
||||
// 成品商序列号
|
||||
var serialNum1 = reply.data.sublist(100, 116);
|
||||
var serialNum1Str = utf8String(serialNum1);
|
||||
state.lockInfo["serialNum1"] = serialNum1Str;
|
||||
// print("serialNum1Str:$serialNum1Str serialNum1Str:${serialNum1Str.length}");
|
||||
// Get.log("serialNum1Str:$serialNum1Str serialNum1Str:${serialNum1Str.length}");
|
||||
|
||||
// 蓝牙名称
|
||||
var btDeviceName = reply.data.sublist(116, 132);
|
||||
var btDeviceNameStr = utf8String(btDeviceName);
|
||||
state.lockInfo["btDeviceName"] = btDeviceNameStr;
|
||||
// print("btDeviceName:$btDeviceName btDeviceNameStr:$btDeviceNameStr btDeviceNameStr:${btDeviceNameStr.length}");
|
||||
// Get.log("btDeviceName:$btDeviceName btDeviceNameStr:$btDeviceNameStr btDeviceNameStr:${btDeviceNameStr.length}");
|
||||
|
||||
// 电池剩余电量
|
||||
var battRemCap = reply.data[132];
|
||||
state.lockInfo["electricQuantity"] = battRemCap;
|
||||
// print("battRemCap:$battRemCap");
|
||||
// Get.log("battRemCap:$battRemCap");
|
||||
|
||||
// 重置次数
|
||||
var restoreCounter = reply.data.sublist(133, 135);
|
||||
state.lockInfo["restoreCount"] =
|
||||
restoreCounter[0] * 256 + restoreCounter[1];
|
||||
// print("restoreCounter:$restoreCounter");
|
||||
// Get.log("restoreCounter:$restoreCounter");
|
||||
|
||||
// 重置时间
|
||||
var restoreDate = reply.data.sublist(135, 139);
|
||||
@ -211,13 +205,13 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
(0xFF & restoreDate[3]));
|
||||
// String restoreDateStr = DateTool().dateToYMDHNSString(restoreDateValue.toString());
|
||||
state.lockInfo["restoreDate"] = restoreDateValue * 1000;
|
||||
// print("restoreDate:$restoreDate restoreDateValue:$restoreDateValue");
|
||||
// Get.log("restoreDate:$restoreDate restoreDateValue:$restoreDateValue");
|
||||
|
||||
// 主控芯片型号
|
||||
var icPartNo = reply.data.sublist(139, 149);
|
||||
var icPartNoStr = utf8String(icPartNo);
|
||||
state.lockInfo["icPartNo"] = icPartNoStr;
|
||||
// print("icPartNo:$icPartNo icPartNoStr:$icPartNoStr");
|
||||
// Get.log("icPartNo:$icPartNo icPartNoStr:$icPartNoStr");
|
||||
|
||||
// 有效时间
|
||||
var indate = reply.data.sublist(149, 153);
|
||||
@ -227,13 +221,13 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
(0xFF & indate[3]));
|
||||
// String indateStr = DateTool().dateToYMDHNSString("$indateValue");
|
||||
state.lockInfo["indate"] = indateValue * 1000;
|
||||
// print("indate:$indate indateValue:$indateValue");
|
||||
// Get.log("indate:$indate indateValue:$indateValue");
|
||||
|
||||
// mac地址
|
||||
var macAddress = reply.data.sublist(153, 173);
|
||||
var macAddressStr = utf8String(macAddress);
|
||||
state.lockInfo["mac"] = macAddressStr;
|
||||
print("macAddress:$macAddress macAddressStr:$macAddressStr");
|
||||
Get.log("macAddress:$macAddress macAddressStr:$macAddressStr");
|
||||
|
||||
var index = 173;
|
||||
// 锁特征值字符串长度
|
||||
@ -249,7 +243,7 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
String featureValueStr = asciiString(featureValue);
|
||||
state.featureValue = featureValueStr;
|
||||
// List allFeatureValueTwoList = charListChangeIntList(featureValue);
|
||||
// print("featureValueLength:$featureValueLength featureValue:$featureValue \n featureValueStr:$featureValueStr");
|
||||
// Get.log("featureValueLength:$featureValueLength featureValue:$featureValue \n featureValueStr:$featureValueStr");
|
||||
index = index + featureValueLength + 1;
|
||||
|
||||
// 使能特征值字符串长度
|
||||
@ -264,7 +258,7 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
String featureEnValStr = asciiString(featureEnVal);
|
||||
state.featureSettingValue = featureEnValStr;
|
||||
// List allFeatureEnValTwoList = charListChangeIntList(featureEnVal);
|
||||
// print("featureEnValLength:$featureEnValLength featureEnVal:$featureEnVal \n featureEnValStr:$featureEnValStr");
|
||||
// Get.log("featureEnValLength:$featureEnValLength featureEnVal:$featureEnVal \n featureEnValStr:$featureEnValStr");
|
||||
index = index + featureEnValLength + 1;
|
||||
|
||||
// 支持的带参数特征值的总条目数
|
||||
@ -272,7 +266,7 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
|
||||
var featureParaTotalList = reply.data.sublist(index);
|
||||
state.featureSettingParams = featureParaTotalList;
|
||||
// print("featureParaTotalList:$featureParaTotalList");
|
||||
// Get.log("featureParaTotalList:$featureParaTotalList");
|
||||
|
||||
Get.toNamed(Routers.lockAddressGaoDePage, arguments: {
|
||||
"pwdTimestamp": state.timestampValue * 1000,
|
||||
@ -285,23 +279,19 @@ class NearbyLockLogic extends BaseGetXController {
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
print("${reply.commandType}需要鉴权");
|
||||
|
||||
Get.log("${reply.commandType}需要鉴权");
|
||||
break;
|
||||
case 0x07:
|
||||
//无权限
|
||||
print("${reply.commandType}用户无权限");
|
||||
|
||||
Get.log("${reply.commandType}用户无权限");
|
||||
break;
|
||||
case 0x09:
|
||||
// 权限校验错误
|
||||
print("${reply.commandType}权限校验错误");
|
||||
|
||||
Get.log("${reply.commandType}权限校验错误");
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
print("${reply.commandType}失败");
|
||||
|
||||
Get.log("${reply.commandType}失败");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,8 @@ import 'package:star_lock/tools/titleAppBar.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
class LockMallPage extends StatefulWidget {
|
||||
const LockMallPage({Key? key}) : super(key: key);
|
||||
LockMallPage({Key? key, this.showAppBar = true}) : super(key: key);
|
||||
bool showAppBar;
|
||||
|
||||
@override
|
||||
State<LockMallPage> createState() => _LockMallPageState();
|
||||
@ -33,11 +34,13 @@ class _LockMallPageState extends State<LockMallPage> {
|
||||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
backgroundColor: const Color(0xFFFFFFFF),
|
||||
appBar: TitleAppBar(
|
||||
barTitle: getWebTitle(),
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor,
|
||||
),
|
||||
appBar: widget.showAppBar
|
||||
? TitleAppBar(
|
||||
barTitle: getWebTitle(),
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor,
|
||||
)
|
||||
: null,
|
||||
body: Obx(() => Column(
|
||||
children: <Widget>[
|
||||
Container(
|
||||
@ -45,7 +48,8 @@ class _LockMallPageState extends State<LockMallPage> {
|
||||
child: LinearProgressIndicator(
|
||||
value: state.webProgress.value,
|
||||
backgroundColor: Colors.grey,
|
||||
valueColor: AlwaysStoppedAnimation<Color>(AppColors.mainColor),
|
||||
valueColor:
|
||||
AlwaysStoppedAnimation<Color>(AppColors.mainColor),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
|
||||
@ -14,18 +14,20 @@ import 'messageList_logic.dart';
|
||||
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||
|
||||
class MessageListPage extends StatefulWidget {
|
||||
const MessageListPage({Key? key}) : super(key: key);
|
||||
MessageListPage({Key? key, this.showAppBar = true}) : super(key: key);
|
||||
bool showAppBar;
|
||||
|
||||
@override
|
||||
State<MessageListPage> createState() => _MessageListPageState();
|
||||
}
|
||||
|
||||
class _MessageListPageState extends State<MessageListPage> with TickerProviderStateMixin {
|
||||
class _MessageListPageState extends State<MessageListPage>
|
||||
with TickerProviderStateMixin {
|
||||
final logic = Get.put(MessageListLogic());
|
||||
final state = Get.find<MessageListLogic>().state;
|
||||
|
||||
void getHttpData(){
|
||||
logic.messageListDataRequest().then((MessageListEntity value){
|
||||
void getHttpData() {
|
||||
logic.messageListDataRequest().then((MessageListEntity value) {
|
||||
setState(() {});
|
||||
});
|
||||
}
|
||||
@ -41,58 +43,61 @@ class _MessageListPageState extends State<MessageListPage> with TickerProviderSt
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle: TranslationLoader.lanKeys!.message!.tr,
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor),
|
||||
body: EasyRefreshTool(
|
||||
onRefresh: (){
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
},
|
||||
onLoad: (){
|
||||
getHttpData();
|
||||
},
|
||||
child: Obx(() {
|
||||
return state.itemDataList.value.isEmpty
|
||||
? NoData()
|
||||
: SlidableAutoCloseBehavior(
|
||||
child: ListView.builder(
|
||||
itemCount: state.itemDataList.value.length,
|
||||
itemBuilder: (c, index) {
|
||||
MessageItemEntity messageItemEntity = state.itemDataList.value[index];
|
||||
return Slidable(
|
||||
key:ValueKey(messageItemEntity.id),
|
||||
endActionPane: ActionPane(
|
||||
extentRatio: 0.2,
|
||||
motion: const ScrollMotion(),
|
||||
children: [
|
||||
SlidableAction(
|
||||
onPressed: (BuildContext context){
|
||||
logic.deletMessageDataRequest(messageItemEntity.id!, (){
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
});
|
||||
},
|
||||
backgroundColor: Colors.red,
|
||||
foregroundColor: Colors.white,
|
||||
label: '删除',
|
||||
padding: EdgeInsets.only(left: 5.w, right: 5.w),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: _messageListItem(messageItemEntity, () {
|
||||
Get.toNamed(Routers.messageDetailPage, arguments: {"messageItemEntity": messageItemEntity});
|
||||
}),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
),
|
||||
appBar: widget.showAppBar
|
||||
? TitleAppBar(
|
||||
barTitle: TranslationLoader.lanKeys!.message!.tr,
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor)
|
||||
: null,
|
||||
body: EasyRefreshTool(onRefresh: () {
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
}, onLoad: () {
|
||||
getHttpData();
|
||||
}, child: Obx(() {
|
||||
return state.itemDataList.value.isEmpty
|
||||
? NoData()
|
||||
: SlidableAutoCloseBehavior(
|
||||
child: ListView.builder(
|
||||
itemCount: state.itemDataList.value.length,
|
||||
itemBuilder: (c, index) {
|
||||
MessageItemEntity messageItemEntity =
|
||||
state.itemDataList.value[index];
|
||||
return Slidable(
|
||||
key: ValueKey(messageItemEntity.id),
|
||||
endActionPane: ActionPane(
|
||||
extentRatio: 0.2,
|
||||
motion: const ScrollMotion(),
|
||||
children: [
|
||||
SlidableAction(
|
||||
onPressed: (BuildContext context) {
|
||||
logic.deletMessageDataRequest(
|
||||
messageItemEntity.id!, () {
|
||||
logic.pageNo = 1;
|
||||
getHttpData();
|
||||
});
|
||||
},
|
||||
backgroundColor: Colors.red,
|
||||
foregroundColor: Colors.white,
|
||||
label: '删除',
|
||||
padding: EdgeInsets.only(left: 5.w, right: 5.w),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: _messageListItem(messageItemEntity, () {
|
||||
Get.toNamed(Routers.messageDetailPage, arguments: {
|
||||
"messageItemEntity": messageItemEntity
|
||||
});
|
||||
}),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _messageListItem(MessageItemEntity messageItemEntity, Function() action) {
|
||||
Widget _messageListItem(
|
||||
MessageItemEntity messageItemEntity, Function() action) {
|
||||
return GestureDetector(
|
||||
onTap: action,
|
||||
child: Container(
|
||||
@ -117,7 +122,10 @@ class _MessageListPageState extends State<MessageListPage> with TickerProviderSt
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 22.sp, color: messageItemEntity.readAt! == 0 ? AppColors.blackColor : AppColors.placeholderTextColor),
|
||||
fontSize: 22.sp,
|
||||
color: messageItemEntity.readAt! == 0
|
||||
? AppColors.blackColor
|
||||
: AppColors.placeholderTextColor),
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -128,7 +136,14 @@ class _MessageListPageState extends State<MessageListPage> with TickerProviderSt
|
||||
children: [
|
||||
// Image.asset('images/mine/icon_mine_gatewaySignal_strong.png', width: 40.w, height: 40.w,),
|
||||
// SizedBox(width: 10.w,),
|
||||
Text(DateTool().dateToYMDHNString(messageItemEntity.createdAt!.toString()), style: TextStyle(fontSize: 18.sp, color: messageItemEntity.readAt! == 0 ? AppColors.blackColor : AppColors.placeholderTextColor)),
|
||||
Text(
|
||||
DateTool().dateToYMDHNString(
|
||||
messageItemEntity.createdAt!.toString()),
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: messageItemEntity.readAt! == 0
|
||||
? AppColors.blackColor
|
||||
: AppColors.placeholderTextColor)),
|
||||
],
|
||||
),
|
||||
SizedBox(width: 20.h),
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
@ -51,7 +51,7 @@ class MineBindPhoneOrEmailLogic extends BaseGetXController {
|
||||
state.verificationCode.value,
|
||||
state.unbindToken.value);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
showToast("邮箱绑定成功", something: () async {
|
||||
showToast("邮箱绑定成功".tr, something: () async {
|
||||
final loginData = await Storage.getLoginData();
|
||||
loginData!.email = state.inputAccount.value;
|
||||
Storage.saveLoginData(loginData);
|
||||
@ -69,7 +69,7 @@ class MineBindPhoneOrEmailLogic extends BaseGetXController {
|
||||
state.verificationCode.value,
|
||||
state.unbindToken.value);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
showToast("手机绑定成功", something: () async {
|
||||
showToast("手机绑定成功".tr, something: () async {
|
||||
final loginData = await Storage.getLoginData();
|
||||
loginData!.mobile = state.inputAccount.value;
|
||||
Storage.saveLoginData(loginData);
|
||||
|
||||
@ -4,7 +4,9 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_logic.dart';
|
||||
|
||||
import '../../../appRouters.dart';
|
||||
import '../../../app_settings/app_colors.dart';
|
||||
import '../../../tools/commonItem.dart';
|
||||
import '../../../tools/submitBtn.dart';
|
||||
import '../../../tools/tf_loginInput.dart';
|
||||
import '../../../tools/titleAppBar.dart';
|
||||
@ -33,6 +35,7 @@ class _MineBindPhoneOrEmailPageState extends State<MineBindPhoneOrEmailPage> {
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor),
|
||||
body: Container(
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.only(top: 10.h, left: 30.w, right: 30.w),
|
||||
child: Column(
|
||||
children: [
|
||||
@ -45,6 +48,28 @@ class _MineBindPhoneOrEmailPageState extends State<MineBindPhoneOrEmailPage> {
|
||||
: TranslationLoader.lanKeys!.changeEmailTip!.tr,
|
||||
style: TextStyle(fontSize: 20.sp),
|
||||
)),
|
||||
CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr,
|
||||
rightTitle: "",
|
||||
isHaveLine: true,
|
||||
isPadding: false,
|
||||
isHaveRightWidget: true,
|
||||
isHaveDirection: true,
|
||||
rightWidget: Text(
|
||||
'${state.countryName.value} +${state.countryCode.value}',
|
||||
textAlign: TextAlign.end,
|
||||
style:
|
||||
TextStyle(fontSize: 22.sp, color: AppColors.darkGrayTextColor),
|
||||
),
|
||||
action: () async {
|
||||
var result = await Get.toNamed(Routers.selectCountryRegionPage);
|
||||
if (result != null) {
|
||||
result as Map<String, dynamic>;
|
||||
state.countryCode.value = result['code'];
|
||||
state.countryName.value = result['countryName'];
|
||||
}
|
||||
},
|
||||
),
|
||||
LoginInput(
|
||||
controller: state.accountController,
|
||||
isPwd: false,
|
||||
|
||||
@ -10,11 +10,12 @@ class MineBindPhoneOrEmailState {
|
||||
return DateTime.now().millisecondsSinceEpoch;
|
||||
}
|
||||
|
||||
var countryCode = '+86'.obs;
|
||||
var countryCode = '86'.obs;
|
||||
var countryName = '中国'.obs;
|
||||
|
||||
var countryId = '9'.obs;
|
||||
var codeType = '4'.obs; //1注册,2找回密码,3绑定手机号,4解绑手机(换绑),5删除账号,6 绑定邮箱,7解绑邮箱(换绑)
|
||||
var channel = '1'.obs; //短信通道 1 短信,2 邮箱
|
||||
var uniqueid = 'B748F838-94EE-4BDB-A0E6-7B2D16849792'.obs;
|
||||
var verificationCode = ''.obs;
|
||||
var xWidth = ''.obs; // 滑动验证码滑动位置
|
||||
var canSub = false.obs;
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
@ -14,7 +13,8 @@ import '../../../tools/titleAppBar.dart';
|
||||
import '../../../translations/trans_lib.dart';
|
||||
|
||||
class MinePersonInfoPage extends StatefulWidget {
|
||||
const MinePersonInfoPage({Key? key}) : super(key: key);
|
||||
MinePersonInfoPage({Key? key, this.showAppBar = true}) : super(key: key);
|
||||
bool showAppBar;
|
||||
|
||||
@override
|
||||
State<MinePersonInfoPage> createState() => _MinePersonInfoPageState();
|
||||
@ -28,34 +28,43 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.mainBackgroundColor,
|
||||
appBar: TitleAppBar(
|
||||
barTitle: TranslationLoader.lanKeys!.personalInformation!.tr,
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor),
|
||||
appBar: widget.showAppBar
|
||||
? TitleAppBar(
|
||||
barTitle: TranslationLoader.lanKeys!.personalInformation!.tr,
|
||||
haveBack: true,
|
||||
backgroundColor: AppColors.mainColor)
|
||||
: null,
|
||||
body: Column(
|
||||
children: [
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.avatar!.tr,
|
||||
rightTitle: "",
|
||||
allHeight: 100.h,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(36.w),
|
||||
child: CustomNetworkImage(url:state.headUrl.value, defaultUrl: 'images/controls_user.png', width:72.w, height:72.w),
|
||||
),
|
||||
action: () async {
|
||||
_openModalBottomSheet();
|
||||
},
|
||||
)),
|
||||
leftTitel: TranslationLoader.lanKeys!.avatar!.tr,
|
||||
rightTitle: "",
|
||||
allHeight: 100.h,
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
isHaveRightWidget: true,
|
||||
rightWidget: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(36.w),
|
||||
child: CustomNetworkImage(
|
||||
url: state.headUrl.value,
|
||||
defaultUrl: 'images/controls_user.png',
|
||||
width: 72.w,
|
||||
height: 72.w),
|
||||
),
|
||||
action: () async {
|
||||
_openModalBottomSheet();
|
||||
},
|
||||
)),
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.nickName!.tr,
|
||||
rightTitle: state.mineInfoData.value.nickname != null ? state.mineInfoData.value.nickname! : "",
|
||||
rightTitle: state.mineInfoData.value.nickname != null
|
||||
? state.mineInfoData.value.nickname!
|
||||
: "",
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
Navigator.pushNamed(context, Routers.minePersonInfoEditNamePage,
|
||||
Navigator.pushNamed(
|
||||
context, Routers.minePersonInfoEditNamePage,
|
||||
arguments: {'mineInfoData': state.mineInfoData.value})
|
||||
.then((value) => logic.getUserInfoRequest());
|
||||
})),
|
||||
@ -69,13 +78,18 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
|
||||
action: () {
|
||||
//有手机号 则去修改手机号 否则去绑定新的手机号 isFrom:1 短信,2 邮箱
|
||||
if (state.mineInfoData.value.mobile!.isNotEmpty) {
|
||||
Navigator.pushNamed(context, Routers.mineUnbindPhoneOrEmailPage,
|
||||
arguments: {'mobile': state.mineInfoData.value.mobile!, 'isFrom': '1'})
|
||||
.then((value) => logic.getUserInfoRequest());
|
||||
Navigator.pushNamed(
|
||||
context, Routers.mineUnbindPhoneOrEmailPage,
|
||||
arguments: {
|
||||
'mobile': state.mineInfoData.value.mobile!,
|
||||
'isFrom': '1'
|
||||
}).then((value) => logic.getUserInfoRequest());
|
||||
} else {
|
||||
Navigator.pushNamed(context, Routers.mineBindPhoneOrEmailPage,
|
||||
arguments: {'mobile': state.mineInfoData.value.mobile!, 'isFrom': '1'})
|
||||
.then((value) => logic.getUserInfoRequest());
|
||||
Navigator.pushNamed(
|
||||
context, Routers.mineBindPhoneOrEmailPage, arguments: {
|
||||
'mobile': state.mineInfoData.value.mobile!,
|
||||
'isFrom': '1'
|
||||
}).then((value) => logic.getUserInfoRequest());
|
||||
}
|
||||
})),
|
||||
Obx(() => CommonItem(
|
||||
@ -88,13 +102,18 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
|
||||
action: () {
|
||||
//有邮箱 则去修改邮箱 否则去绑定新的邮箱 isFrom:1 短信,2 邮箱
|
||||
if (state.mineInfoData.value.email!.isNotEmpty) {
|
||||
Navigator.pushNamed(context, Routers.mineUnbindPhoneOrEmailPage,
|
||||
arguments: {'isFrom': '2', 'email': state.mineInfoData.value.email!})
|
||||
.then((value) => logic.getUserInfoRequest());
|
||||
Navigator.pushNamed(
|
||||
context, Routers.mineUnbindPhoneOrEmailPage,
|
||||
arguments: {
|
||||
'isFrom': '2',
|
||||
'email': state.mineInfoData.value.email!
|
||||
}).then((value) => logic.getUserInfoRequest());
|
||||
} else {
|
||||
Navigator.pushNamed(context, Routers.mineBindPhoneOrEmailPage,
|
||||
arguments: {'isFrom': '2', 'email': state.mineInfoData.value.email!})
|
||||
.then((value) => logic.getUserInfoRequest());
|
||||
Navigator.pushNamed(
|
||||
context, Routers.mineBindPhoneOrEmailPage, arguments: {
|
||||
'isFrom': '2',
|
||||
'email': state.mineInfoData.value.email!
|
||||
}).then((value) => logic.getUserInfoRequest());
|
||||
}
|
||||
})),
|
||||
CommonItem(
|
||||
@ -103,24 +122,30 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
Navigator.pushNamed(context, Routers.minePersonInfoResetPasswordPage);
|
||||
Navigator.pushNamed(
|
||||
context, Routers.minePersonInfoResetPasswordPage);
|
||||
}),
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.safetyProblem!.tr,
|
||||
rightTitle: state.mineInfoData.value.haveSafeAnswer == 0 ? "去设置" : "",
|
||||
rightTitle:
|
||||
state.mineInfoData.value.haveSafeAnswer == 0 ? "去设置" : "",
|
||||
isHaveLine: true,
|
||||
isHaveDirection: true,
|
||||
action: () {
|
||||
if (state.mineInfoData.value.haveSafeAnswer == 0) {
|
||||
Navigator.pushNamed(context, Routers.minePersonInfoSetSafetyProblemPage)
|
||||
Navigator.pushNamed(
|
||||
context, Routers.minePersonInfoSetSafetyProblemPage)
|
||||
.then((value) => logic.getUserInfoRequest());
|
||||
} else {
|
||||
Navigator.pushNamed(context, Routers.minePersonInfoViewSafetyProblemPage);
|
||||
Navigator.pushNamed(
|
||||
context, Routers.minePersonInfoViewSafetyProblemPage);
|
||||
}
|
||||
})),
|
||||
Obx(() => CommonItem(
|
||||
leftTitel: TranslationLoader.lanKeys!.countryAndRegion!.tr,
|
||||
rightTitle: state.mineInfoData.value.countryName != null ? state.mineInfoData.value.countryName! : "",
|
||||
rightTitle: state.mineInfoData.value.countryName != null
|
||||
? state.mineInfoData.value.countryName!
|
||||
: "",
|
||||
isHaveLine: false,
|
||||
isHaveDirection: false)),
|
||||
],
|
||||
@ -152,7 +177,8 @@ class _MinePersonInfoPageState extends State<MinePersonInfoPage> {
|
||||
Future _openModalBottomSheet() async {
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadiusDirectional.circular(10)),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadiusDirectional.circular(10)),
|
||||
builder: (BuildContext context) {
|
||||
return AlertBottomWidget(
|
||||
topTitle: '',
|
||||
|
||||
@ -40,7 +40,7 @@ class _GroupEditLockPageState extends State<GroupEditLockPage> {
|
||||
),
|
||||
),
|
||||
Expanded(child: _buildMainUI()),
|
||||
SubmitBtn(btnName: TranslationLoader.lanKeys!.send!.tr, onClick: () async {
|
||||
SubmitBtn(btnName: TranslationLoader.lanKeys!.sure!.tr, onClick: () async {
|
||||
var idList = [];
|
||||
for(int i = 0; i<state.lockList.length; i++){
|
||||
LockListItem lockListItem = state.lockList[i];
|
||||
|
||||
@ -10,7 +10,6 @@ import '../../../../../../tools/titleAppBar.dart';
|
||||
import '../../../../../../translations/trans_lib.dart';
|
||||
import '../../../../appRouters.dart';
|
||||
import '../../../../tools/custom_bottom_sheet.dart';
|
||||
import '../../../../tools/jh_pop_menus.dart';
|
||||
|
||||
class LockItemListPage extends StatefulWidget {
|
||||
const LockItemListPage({Key? key}) : super(key: key);
|
||||
|
||||
@ -308,33 +308,33 @@ class _MineSetPageState extends State<MineSetPage> with WidgetsBindingObserver {
|
||||
}
|
||||
|
||||
//确认弹窗
|
||||
void _showDialog(widgetContext) {
|
||||
showCupertinoDialog(
|
||||
context: widgetContext,
|
||||
builder: (context) {
|
||||
return CupertinoAlertDialog(
|
||||
title: Text(TranslationLoader.lanKeys!.deleteAccountTips!.tr),
|
||||
actions: [
|
||||
CupertinoDialogAction(
|
||||
child: Text(TranslationLoader.lanKeys!.cancel!.tr),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
CupertinoDialogAction(
|
||||
child: Text(TranslationLoader.lanKeys!.sure!.tr),
|
||||
onPressed: () {
|
||||
Get.back();
|
||||
//安全验证
|
||||
Get.toNamed(Routers.safeVerifyPage);
|
||||
setState(() {});
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
// void _showDialog(widgetContext) {
|
||||
// showCupertinoDialog(
|
||||
// context: widgetContext,
|
||||
// builder: (context) {
|
||||
// return CupertinoAlertDialog(
|
||||
// title: Text(TranslationLoader.lanKeys!.deleteAccountTips!.tr),
|
||||
// actions: [
|
||||
// CupertinoDialogAction(
|
||||
// child: Text(TranslationLoader.lanKeys!.cancel!.tr),
|
||||
// onPressed: () {
|
||||
// Navigator.of(context).pop();
|
||||
// },
|
||||
// ),
|
||||
// CupertinoDialogAction(
|
||||
// child: Text(TranslationLoader.lanKeys!.sure!.tr),
|
||||
// onPressed: () {
|
||||
// Get.back();
|
||||
// //安全验证
|
||||
// Get.toNamed(Routers.safeVerifyPage);
|
||||
// setState(() {});
|
||||
// },
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
|
||||
// void showLoginOutAlertTipDialog() {
|
||||
// showCupertinoDialog(
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:star_lock/mine/mine/starLockMine_page.dart';
|
||||
@ -16,7 +15,7 @@ class NavPages extends StatefulWidget {
|
||||
class _NavPagesState extends State<NavPages> {
|
||||
int _currentIndex = 0;
|
||||
final List<Widget> _listPage = [
|
||||
const StarLockMainPage(),
|
||||
StarLockMainPage(),
|
||||
// StarLockMinePage(key: starLockMineKey),
|
||||
];
|
||||
|
||||
|
||||
@ -52,11 +52,11 @@ class BaseProvider extends GetConnect with Api {
|
||||
// print('res.body======>${res.body}');
|
||||
if (res.body == null) {
|
||||
if (EasyLoading.isShow) await EasyLoading.dismiss(animation: true);
|
||||
EasyLoading.showToast("数据请求失败", duration: 2000.milliseconds);
|
||||
EasyLoading.showToast("网络访问失败,请检查网络是否正常".tr, duration: 2000.milliseconds);
|
||||
// EasyLoading.showToast("Network Error!", duration: 2000.milliseconds);
|
||||
if (res.statusCode == null) {
|
||||
EasyLoading.showToast("Network Error!", duration: 2000.milliseconds);
|
||||
}
|
||||
// if (res.statusCode == null) {
|
||||
// EasyLoading.showToast("Network Error!", duration: 2000.milliseconds);
|
||||
// }
|
||||
var rs = {
|
||||
"errorMsg": "Network Error!",
|
||||
"errorCode": -1,
|
||||
|
||||
@ -100,8 +100,13 @@ class ApiRepository {
|
||||
}
|
||||
|
||||
//登录
|
||||
Future<LoginEntity> login(String loginType, String password,
|
||||
String countryCode, String username) async {
|
||||
Future<LoginEntity> login(
|
||||
{
|
||||
required String loginType,
|
||||
required String password,
|
||||
required String countryCode,
|
||||
required String username
|
||||
}) async {
|
||||
final res =
|
||||
await apiProvider.login(loginType, password, countryCode, username);
|
||||
return LoginEntity.fromJson(res.body);
|
||||
@ -269,8 +274,7 @@ class ApiRepository {
|
||||
}
|
||||
|
||||
// 更新锁用户NO
|
||||
Future<LockNetTokenEntity> updateLockUserNo(
|
||||
{required String keyId, required String lockUserNo}) async {
|
||||
Future<LockNetTokenEntity> updateLockUserNo({required String keyId, required String lockUserNo}) async {
|
||||
final res = await apiProvider.updateLockUserNo(keyId, lockUserNo);
|
||||
return LockNetTokenEntity.fromJson(res.body);
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
import 'package:star_lock/login/login/starLock_login_page.dart';
|
||||
import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart';
|
||||
import 'package:star_lock/tools/appFirstEnterHandle.dart';
|
||||
import 'package:star_lock/debug/debug_tool.dart';
|
||||
import 'package:star_lock/tools/storage.dart';
|
||||
@ -42,7 +43,9 @@ class _StarLockApplicationState extends State<StarLockApplication> {
|
||||
} else if (snapshot.hasData) {
|
||||
if (snapshot.data!) {
|
||||
// 如果用户已登录,返回主页面
|
||||
return const StarLockMainPage();
|
||||
return F.sw(
|
||||
defaultCall: () => StarLockMainPage(),
|
||||
xhjCall: () => const StarLockMainXHJPage());
|
||||
} else {
|
||||
// 如果用户未登录,返回登录页面
|
||||
return const StarLockLoginPage();
|
||||
|
||||
@ -13,6 +13,7 @@ class CommonItem extends StatelessWidget {
|
||||
Function()? tipsImgAction;
|
||||
double? allHeight;
|
||||
bool? isTipsImg;
|
||||
bool? isPadding;
|
||||
|
||||
CommonItem(
|
||||
{Key? key,
|
||||
@ -22,6 +23,7 @@ class CommonItem extends StatelessWidget {
|
||||
this.isHaveDirection = false,
|
||||
this.isHaveLine = false,
|
||||
this.isHaveRightWidget = false,
|
||||
this.isPadding = true,
|
||||
this.rightWidget,
|
||||
this.isTipsImg,
|
||||
this.action,
|
||||
@ -38,8 +40,7 @@ class CommonItem extends StatelessWidget {
|
||||
Container(
|
||||
height: allHeight ?? 65.h,
|
||||
color: Colors.white,
|
||||
padding: EdgeInsets.only(
|
||||
left: 20.w, right: 10.w), // , top: 20.w, bottom: 20.w
|
||||
padding: isPadding == true ? EdgeInsets.only(left: 20.w, right: 10.w) : EdgeInsets.zero, // , top: 20.w, bottom: 20.w
|
||||
child: Row(
|
||||
children: [
|
||||
// SizedBox(width: 20.w),
|
||||
@ -99,8 +100,8 @@ class CommonItem extends StatelessWidget {
|
||||
isHaveLine!
|
||||
? Divider(
|
||||
color: AppColors.greyLineColor,
|
||||
indent: 20.w,
|
||||
endIndent: 20.w,
|
||||
indent: isPadding == true ? 20.w : 0,
|
||||
endIndent: isPadding == true ? 20.w : 0,
|
||||
height: 1,
|
||||
)
|
||||
: Container()
|
||||
|
||||
@ -20,6 +20,7 @@ class LoginInput extends StatelessWidget {
|
||||
Widget? leftWidget;
|
||||
String? label;
|
||||
bool? isPwd;
|
||||
bool? isSuffixIcon;
|
||||
Widget? rightSlot;
|
||||
BlockStrCallback? onchangeAction;
|
||||
BlockClickCallback? onTapAction;
|
||||
@ -30,6 +31,7 @@ class LoginInput extends StatelessWidget {
|
||||
this.rightSlot,
|
||||
this.label,
|
||||
this.isPwd,
|
||||
this.isSuffixIcon,
|
||||
this.inputFormatters,
|
||||
this.keyboardType,
|
||||
this.background,
|
||||
@ -67,6 +69,10 @@ class LoginInput extends StatelessWidget {
|
||||
hintText: hintText,
|
||||
//不需要输入框下划线
|
||||
border: InputBorder.none,
|
||||
suffixIcon: isSuffixIcon! ? IconButton(
|
||||
icon: const Icon(Icons.clear),
|
||||
onPressed: controller!.clear,
|
||||
) : null,
|
||||
//左边图标设置
|
||||
icon: isHaveLeftWidget == true
|
||||
? leftWidget
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user