更新小e
This commit is contained in:
@@ -545,6 +545,23 @@ class THBindTelWidget extends GetView<AuthBindTelController> {
|
|||||||
.button_container_radius, // 统一圆角
|
.button_container_radius, // 统一圆角
|
||||||
// 保留你原有的业务逻辑不变
|
// 保留你原有的业务逻辑不变
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
|
String msg = await controller.bindTel();
|
||||||
|
if (msg == null || msg.isEmpty) {
|
||||||
|
MHTLoginController loginController =
|
||||||
|
Get.find();
|
||||||
|
//TODO 微信回调监听操作全部跳转页面前成功以后移除监听,防止重复监听,其他方式登录成功也需要移出监听
|
||||||
|
loginController.fluwxCancelable?.cancel();
|
||||||
|
// 登录成功移出网络检查监听
|
||||||
|
Checknetwork.subscription?.cancel();
|
||||||
|
final box = GetStorage();
|
||||||
|
box.remove('countdown');
|
||||||
|
CountdownController countdownController =
|
||||||
|
Get.find();
|
||||||
|
countdownController.countdown = 0.obs;
|
||||||
|
Get.offAndToNamed("/mianPageBottomChange");
|
||||||
|
} else {
|
||||||
|
TopSlideNotification.show(context,text: msg!,textColor: themeController.currentColor.sc9);
|
||||||
|
}
|
||||||
ApiResponse apiResponse =
|
ApiResponse apiResponse =
|
||||||
await controller.updateUserPhone();
|
await controller.updateUserPhone();
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,23 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:ef/ef.dart';
|
import 'package:ef/ef.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:vbvs_app/common/color/appConstants.dart';
|
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
||||||
|
import 'package:vbvs_app/common/color/app_uri_status.dart';
|
||||||
import 'package:vbvs_app/common/util/FitTool.dart';
|
import 'package:vbvs_app/common/util/FitTool.dart';
|
||||||
import 'package:vbvs_app/common/util/MyUtils.dart';
|
|
||||||
import 'package:vbvs_app/component/tool/ClickableContainer.dart';
|
|
||||||
import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
|
import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
|
||||||
|
import 'package:vbvs_app/controller/device/blueteeth_bind_controller.dart';
|
||||||
|
import 'package:vbvs_app/controller/device/body_device_controller.dart';
|
||||||
|
import 'package:vbvs_app/controller/device/device_type_controller.dart';
|
||||||
import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
|
import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
|
||||||
|
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
|
||||||
import 'package:vbvs_app/controller/user_info_controller.dart';
|
import 'package:vbvs_app/controller/user_info_controller.dart';
|
||||||
import 'package:vbvs_app/enum/LoginStatus.dart';
|
import 'package:vbvs_app/enum/LoginStatus.dart';
|
||||||
|
import 'package:vbvs_app/model/api_response.dart';
|
||||||
|
|
||||||
class EPage extends StatefulWidget {
|
class EPage extends StatefulWidget {
|
||||||
const EPage({super.key});
|
final String sleepUri;
|
||||||
|
const EPage({super.key, required this.sleepUri});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<EPage> createState() => _EPageState();
|
State<EPage> createState() => _EPageState();
|
||||||
@@ -19,83 +26,207 @@ class EPage extends StatefulWidget {
|
|||||||
class _EPageState extends State<EPage> {
|
class _EPageState extends State<EPage> {
|
||||||
GlobalController globalController = Get.find();
|
GlobalController globalController = Get.find();
|
||||||
UserInfoController userInfoController = Get.find();
|
UserInfoController userInfoController = Get.find();
|
||||||
|
BlueteethBindController blueteethBindController = Get.find();
|
||||||
|
ThemeController themeController = Get.find();
|
||||||
|
DeviceTypeController deviceTypeController = Get.find();
|
||||||
|
|
||||||
|
ValueNotifier<bool> isPageLoading = ValueNotifier<bool>(true);
|
||||||
|
RxList deviceList = [].obs;
|
||||||
|
RxString finalUri = RxString('');
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
getDeviceList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
isPageLoading.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
bool isLoggedIn = userInfoController.model.login == LoginStatus.LOGIN.code;
|
||||||
|
|
||||||
return LayoutBuilder(
|
return LayoutBuilder(
|
||||||
builder: (context, boxConstraints) => GestureDetector(
|
builder: (context, bodySize) => GestureDetector(
|
||||||
// onTap: () => FocusScope.of(context).unfocus(),,
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: AssetImage('assets/img/bgNoImg.png'),
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
|
backgroundColor: Colors.transparent,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
backgroundColor: themeController.currentColor.sc17,
|
backgroundColor: themeController.currentColor.sc17,
|
||||||
// backgroundColor: Colors.transparent,
|
|
||||||
automaticallyImplyLeading: false,
|
automaticallyImplyLeading: false,
|
||||||
iconTheme: IconThemeData(color: themeController.currentColor.sc3),
|
iconTheme: IconThemeData(color: themeController.currentColor.sc3),
|
||||||
titleSpacing: 0,
|
titleSpacing: 0,
|
||||||
// leading: returnIconButtom,
|
|
||||||
title: Container(
|
title: Container(
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: 180.rpx,
|
height: 180.rpx,
|
||||||
child: Stack(
|
child: Stack(
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
children: [
|
children: [
|
||||||
/// 居中标题
|
|
||||||
Text(
|
Text(
|
||||||
'小e'.tr,
|
'小e'.tr,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontFamily: 'Readex Pro',
|
fontFamily: 'Readex Pro',
|
||||||
color: themeController.currentColor.sc3,
|
color: themeController.currentColor.sc3,
|
||||||
letterSpacing: 0,
|
|
||||||
fontSize: 30.rpx,
|
fontSize: 30.rpx,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
/// 左边返回按钮
|
|
||||||
// Positioned(
|
|
||||||
// left: 0,
|
|
||||||
// child: returnIconButtom,
|
|
||||||
// ),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
actions: [],
|
|
||||||
centerTitle: false,
|
|
||||||
),
|
),
|
||||||
backgroundColor: Colors.transparent,
|
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
top: true,
|
top: true,
|
||||||
child: Column(children: [
|
child: isLoggedIn
|
||||||
Expanded(
|
? _buildLoggedInContent()
|
||||||
child: ClickableContainer(
|
: _buildLoggedOutContent(),
|
||||||
backgroundColor: Colors.transparent,
|
|
||||||
highlightColor: Colors.transparent,
|
|
||||||
padding: EdgeInsets.all(0.rpx),
|
|
||||||
onTap: () {
|
|
||||||
UserInfoController userInfoController = Get.find();
|
|
||||||
bool isLoggedIn =
|
|
||||||
userInfoController.model.login == LoginStatus.LOGIN.code;
|
|
||||||
if (!isLoggedIn) {
|
|
||||||
TopSlideNotification.show(context,
|
|
||||||
text: "必须登录提示".tr,
|
|
||||||
textColor: themeController.currentColor.sc9);
|
|
||||||
Get.toNamed("/otherLoginPage");
|
|
||||||
} else {
|
|
||||||
TopSlideNotification.show(context, text: "待开发功能".tr);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Container(
|
|
||||||
// child: widget.webView,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
image: DecorationImage(
|
|
||||||
image: AssetImage('assets/img/xiaoe.png'), // 本地图片
|
|
||||||
fit: BoxFit.fill, // 填满整个 Container
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)),
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Widget _buildLoggedInContent() {
|
||||||
|
// return Obx(() {
|
||||||
|
// if (finalUri.isEmpty) {
|
||||||
|
// return Center(child: CircularProgressIndicator());
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return Stack(
|
||||||
|
// children: [
|
||||||
|
// InAppWebView(
|
||||||
|
// initialUrlRequest: URLRequest(url: WebUri(finalUri.value)),
|
||||||
|
// onLoadStart: (controller, url) {
|
||||||
|
// isPageLoading.value = true;
|
||||||
|
// },
|
||||||
|
// onLoadStop: (controller, url) {
|
||||||
|
// isPageLoading.value = false;
|
||||||
|
// },
|
||||||
|
// ),
|
||||||
|
// ValueListenableBuilder<bool>(
|
||||||
|
// valueListenable: isPageLoading,
|
||||||
|
// builder: (context, isLoading, child) {
|
||||||
|
// return isLoading
|
||||||
|
// ? Center(child: CircularProgressIndicator())
|
||||||
|
// : SizedBox.shrink();
|
||||||
|
// },
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// );
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
Widget _buildLoggedInContent() {
|
||||||
|
return Obx(() {
|
||||||
|
if (finalUri.isEmpty) {
|
||||||
|
return Center(child: CircularProgressIndicator());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果设备列表为空
|
||||||
|
if (deviceList.isEmpty) {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
TopSlideNotification.show(
|
||||||
|
context,
|
||||||
|
text: "请先绑定设备".tr,
|
||||||
|
textColor: themeController.currentColor.sc9,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: Center(
|
||||||
|
child: Image.asset(
|
||||||
|
"assets/img/xiaoe.png", // 可以显示默认背景
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设备列表不为空,加载 WebView
|
||||||
|
return Stack(
|
||||||
|
children: [
|
||||||
|
InAppWebView(
|
||||||
|
initialUrlRequest: URLRequest(url: WebUri(finalUri.value)),
|
||||||
|
onLoadStart: (controller, url) {
|
||||||
|
isPageLoading.value = true;
|
||||||
|
},
|
||||||
|
onLoadStop: (controller, url) {
|
||||||
|
isPageLoading.value = false;
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ValueListenableBuilder<bool>(
|
||||||
|
valueListenable: isPageLoading,
|
||||||
|
builder: (context, isLoading, child) {
|
||||||
|
return isLoading
|
||||||
|
? Center(child: CircularProgressIndicator())
|
||||||
|
: SizedBox.shrink();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildLoggedOutContent() {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
TopSlideNotification.show(
|
||||||
|
context,
|
||||||
|
text: "必须登录提示".tr,
|
||||||
|
textColor: themeController.currentColor.sc9,
|
||||||
|
);
|
||||||
|
Get.toNamed("/otherLoginPage");
|
||||||
|
},
|
||||||
|
child: Center(
|
||||||
|
child: Image.asset(
|
||||||
|
"assets/img/xiaoe.png",
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> getDeviceList() async {
|
||||||
|
BodyDeviceController bodyDeviceController = Get.find();
|
||||||
|
ApiResponse apiResponse = await bodyDeviceController.getDeviceList();
|
||||||
|
|
||||||
|
if (apiResponse.code == HttpStatusCodes.ok) {
|
||||||
|
List<dynamic> rawList = apiResponse.data;
|
||||||
|
|
||||||
|
// 提取 mac 和 person.name
|
||||||
|
List<Map<String, dynamic>> newList = rawList.map((item) {
|
||||||
|
String mac = item['mac'] ?? '';
|
||||||
|
String name = (item['person'] != null &&
|
||||||
|
item['person']['name'] != null &&
|
||||||
|
item['person']['name'].toString().trim().isNotEmpty)
|
||||||
|
? item['person']['name'] + "_${mac}"
|
||||||
|
: '未命名'.tr + "_${mac}";
|
||||||
|
return {
|
||||||
|
'mac': mac,
|
||||||
|
'name': name,
|
||||||
|
};
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
deviceList.value = newList;
|
||||||
|
|
||||||
|
// 拼接参数 person
|
||||||
|
if (deviceList.isNotEmpty) {
|
||||||
|
// JSON 编码整个 deviceList 对象数组
|
||||||
|
String personParam = Uri.encodeComponent(jsonEncode(deviceList));
|
||||||
|
finalUri.value = "${widget.sleepUri}?person=$personParam";
|
||||||
|
} else {
|
||||||
|
finalUri.value = widget.sleepUri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ef.log("msg");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ class MainPageBottomChange extends GetView<MainPageController> {
|
|||||||
List arr = [
|
List arr = [
|
||||||
HomePage(),
|
HomePage(),
|
||||||
// SleepReportPage(),
|
// SleepReportPage(),
|
||||||
EPage(),
|
// EPage(),
|
||||||
|
EPage(sleepUri:"https://xiaoe.he-info.cn/"),
|
||||||
MessagePage(),
|
MessagePage(),
|
||||||
MinePage(),
|
MinePage(),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -309,7 +309,8 @@ class BindTelWidget extends GetView<AuthBindTelController> {
|
|||||||
}
|
}
|
||||||
String msg =
|
String msg =
|
||||||
await controller
|
await controller
|
||||||
.getCode(context,img);
|
.getCode(
|
||||||
|
context, img);
|
||||||
if (msg.isNotEmpty) {
|
if (msg.isNotEmpty) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -427,28 +428,30 @@ class BindTelWidget extends GetView<AuthBindTelController> {
|
|||||||
gradientDirection:
|
gradientDirection:
|
||||||
GradientDirection.vertical,
|
GradientDirection.vertical,
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
// String msg = await controller.bindTel();
|
String msg = await controller.bindTel();
|
||||||
// if (msg == null || msg.isEmpty) {
|
if (msg == null || msg.isEmpty) {
|
||||||
// MHTLoginController loginController =
|
MHTLoginController loginController =
|
||||||
// Get.find();
|
Get.find();
|
||||||
// //TODO 微信回调监听操作全部跳转页面前成功以后移除监听,防止重复监听,其他方式登录成功也需要移出监听
|
//TODO 微信回调监听操作全部跳转页面前成功以后移除监听,防止重复监听,其他方式登录成功也需要移出监听
|
||||||
// loginController.fluwxCancelable
|
loginController.fluwxCancelable
|
||||||
// ?.cancel();
|
?.cancel();
|
||||||
// // 登录成功移出网络检查监听
|
// 登录成功移出网络检查监听
|
||||||
// Checknetwork.subscription?.cancel();
|
Checknetwork.subscription?.cancel();
|
||||||
// final box = GetStorage();
|
final box = GetStorage();
|
||||||
// box.remove('countdown');
|
box.remove('countdown');
|
||||||
// CountdownController
|
CountdownController
|
||||||
// countdownController = Get.find();
|
countdownController = Get.find();
|
||||||
// countdownController.countdown = 0.obs;
|
countdownController.countdown = 0.obs;
|
||||||
// Get.offAndToNamed(
|
Get.offAndToNamed(
|
||||||
// "/mianPageBottomChange");
|
"/mianPageBottomChange");
|
||||||
// } else {
|
} else {
|
||||||
// showToast(msg);
|
TopSlideNotification.show(context,
|
||||||
// }
|
text: msg!,
|
||||||
|
textColor: themeController
|
||||||
|
.currentColor.sc9);
|
||||||
|
}
|
||||||
ApiResponse apiResponse =
|
ApiResponse apiResponse =
|
||||||
await controller.updateUserPhone();
|
await controller.updateUserPhone();
|
||||||
|
|
||||||
if (apiResponse.code ==
|
if (apiResponse.code ==
|
||||||
HttpStatusCodes.ok) {
|
HttpStatusCodes.ok) {
|
||||||
UserInfoController userInfoController =
|
UserInfoController userInfoController =
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ var routes = {
|
|||||||
"/homePage": (contxt) => HomePage(),
|
"/homePage": (contxt) => HomePage(),
|
||||||
"/sleepReportPage": (contxt, {arguments}) =>
|
"/sleepReportPage": (contxt, {arguments}) =>
|
||||||
SleepReportPage(sleepUri: arguments),
|
SleepReportPage(sleepUri: arguments),
|
||||||
"/ePage": (contxt) => EPage(),
|
// "/ePage": (contxt) => EPage(),
|
||||||
|
"/ePage": (contxt, {arguments}) => EPage(sleepUri: arguments),
|
||||||
"/messagePage": (contxt) => MessagePage(),
|
"/messagePage": (contxt) => MessagePage(),
|
||||||
"/minePage": (contxt) => MinePage(),
|
"/minePage": (contxt) => MinePage(),
|
||||||
"/mianPageBottomChange": (contxt) => MainPageBottomChange(),
|
"/mianPageBottomChange": (contxt) => MainPageBottomChange(),
|
||||||
|
|||||||
Reference in New Issue
Block a user