更新小e界面白屏问题
This commit is contained in:
771
lib/pages/main_bottom/xiaoe/XiaoeModel.dart
Normal file
771
lib/pages/main_bottom/xiaoe/XiaoeModel.dart
Normal file
@@ -0,0 +1,771 @@
|
||||
// // lib/controller/xiaoe/xiaoe_controller.dart
|
||||
// import 'dart:async';
|
||||
|
||||
// import 'package:EasyDartModule/EasyDartModule.dart' as edm;
|
||||
// import 'package:easyweb/base/minisdk.dart';
|
||||
// import 'package:easyweb/easyweb.dart';
|
||||
// import 'package:ef/ef.dart';
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:vbvs_app/common/util/FitTool.dart';
|
||||
// import 'package:vbvs_app/controller/device/body_device_controller.dart';
|
||||
// import 'package:vbvs_app/controller/user_info_controller.dart';
|
||||
// import 'package:vbvs_app/enum/LoginStatus.dart';
|
||||
// import 'package:vbvs_app/model/api_response.dart';
|
||||
// import 'package:vbvs_app/pages/main_bottom/component/main_page_b_bottom_change.dart';
|
||||
|
||||
// class XiaoeModel {
|
||||
// XiaoeModel();
|
||||
// }
|
||||
|
||||
// class XiaoeController extends GetControllerEx<XiaoeModel> {
|
||||
// XiaoeController() : super(XiaoeModel()) {
|
||||
// web = WebviewHelper(
|
||||
// isheadless: false,
|
||||
// jsbridge: buildsdk(
|
||||
// father: this,
|
||||
// ),
|
||||
// settings: buildsettings(),
|
||||
// params: PlatformHeadlessInAppWebViewCreationParams(
|
||||
// onLoadStop: (controller, url) {
|
||||
// setState(() {
|
||||
// ready.value = true;
|
||||
// });
|
||||
// },
|
||||
// onLoadResource: (controller, resource) {
|
||||
// // 资源加载回调
|
||||
// ef.log("msg");
|
||||
// loadRecource.value = true;
|
||||
// updateAll();
|
||||
// },
|
||||
// initialUrlRequest:
|
||||
// URLRequest(url: WebUri("http://127.0.0.1/index.html?"))),
|
||||
// );
|
||||
// }
|
||||
|
||||
// // 变量与WebviewTestController保持一致
|
||||
// var selectDevice = {};
|
||||
// var lastSelectDevice = {};
|
||||
// var bluetooth = 0;
|
||||
// List personList = [];
|
||||
// List instantData = [];
|
||||
// List deviceList = []; // 小e需要的设备列表
|
||||
// RxBool initFlag = false.obs;
|
||||
// Timer? _resourceLoadTimer;
|
||||
// Widget webviewWidget = Container();
|
||||
// var wifiResponseData;
|
||||
|
||||
// late WebviewHelper web;
|
||||
// var ready = false.obs;
|
||||
// var cnt = 0.obs;
|
||||
// var loadRecource = false.obs;
|
||||
// int sourceTime = 0;
|
||||
|
||||
// // 获取设备列表
|
||||
// Future<void> getDeviceList() async {
|
||||
// try {
|
||||
// BodyDeviceController bodyDeviceController = Get.find();
|
||||
// ApiResponse apiResponse =
|
||||
// await bodyDeviceController.getDeviceList(isAllDevice: true);
|
||||
|
||||
// if (apiResponse.code == 200) {
|
||||
// List<dynamic> rawList = apiResponse.data;
|
||||
|
||||
// // 处理设备列表数据
|
||||
// List<Map<String, dynamic>> newList = rawList.map((item) {
|
||||
// String mac = item['mac']?.toString() ?? '';
|
||||
// String name = '';
|
||||
|
||||
// if (item['person'] != null &&
|
||||
// item['person']['name'] != null &&
|
||||
// item['person']['name'].toString().trim().isNotEmpty) {
|
||||
// name = '${item['person']['name']}_$mac';
|
||||
// } else {
|
||||
// name = '${'体征检测设备'.tr}_$mac';
|
||||
// }
|
||||
|
||||
// return {
|
||||
// 'mac': mac,
|
||||
// 'name': name,
|
||||
// 'deviceType': item['device_type'] ?? '',
|
||||
// 'person': item['person'] ?? {},
|
||||
// 'rawData': item,
|
||||
// };
|
||||
// }).toList();
|
||||
|
||||
// deviceList = newList;
|
||||
// ef.log("小e获取到${deviceList.length}个设备");
|
||||
// }
|
||||
// } catch (e) {
|
||||
// ef.log("小e获取设备列表错误: $e");
|
||||
// }
|
||||
// }
|
||||
|
||||
// Future<void> startXiaoe() async {
|
||||
// try {
|
||||
// ef.log('开始启动小e应用...');
|
||||
|
||||
// // 先获取设备列表
|
||||
// await getDeviceList();
|
||||
|
||||
// ef.log('开始运行小e Web应用...');
|
||||
// // 运行小e应用
|
||||
// var x1 = await ef.kvRoot.appmanger.find("xiaoe");
|
||||
// var x2 = await ef.kvRoot.appmanger.find("mhtControl");
|
||||
// print("$x1");
|
||||
// print("$x2");
|
||||
// await web.runApp('xiaoe').then((x) {
|
||||
// ef.log('web.runApp 执行完成,结果: $x');
|
||||
// ready.value = true;
|
||||
// ef.log('ready.value 设置为 true');
|
||||
|
||||
// // 设置资源加载超时定时器
|
||||
// _resourceLoadTimer = Timer(Duration(seconds: 15), () {
|
||||
// ef.log('资源加载超时定时器触发,当前 loadRecource.value = ${loadRecource.value}');
|
||||
// if (!loadRecource.value) {
|
||||
// loadRecource.value = true;
|
||||
// updateAll();
|
||||
// ef.log('小e资源加载超时,强制显示页面');
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
// } catch (e, s) {
|
||||
// ef.log('启动小e错误: $e, $s');
|
||||
// ef.log('错误堆栈: $s');
|
||||
// }
|
||||
// }
|
||||
|
||||
// @override
|
||||
// void onInit() {
|
||||
// super.onInit();
|
||||
// ef.log("小e控制器初始化 =>${DateTime.now()}");
|
||||
|
||||
// // 延迟启动
|
||||
// Future.delayed(Duration(milliseconds: 300), () {
|
||||
// startXiaoe();
|
||||
// });
|
||||
// }
|
||||
|
||||
// @override
|
||||
// void onClose() {
|
||||
// _resourceLoadTimer?.cancel();
|
||||
// super.onClose();
|
||||
// }
|
||||
// }
|
||||
|
||||
// class XiaoeView extends GetComponent<XiaoeController> {
|
||||
// XiaoeView({super.key, super.oncreate});
|
||||
|
||||
// @override
|
||||
// XiaoeController newinstance() {
|
||||
// if (ef.kvRoot.XiaoeController == null) {
|
||||
// ef.kvRoot.XiaoeController = XiaoeController();
|
||||
// if (Get.isRegistered<XiaoeController>() == false) {
|
||||
// Get.put<XiaoeController>(ef.kvRoot.XiaoeController);
|
||||
// XiaoeController xiaoeController = Get.find();
|
||||
// xiaoeController.global = true;
|
||||
// return xiaoeController;
|
||||
// }
|
||||
// }
|
||||
// return ef.kvRoot.XiaoeController;
|
||||
// }
|
||||
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// return Obx(() {
|
||||
// UserInfoController userInfoController = Get.find();
|
||||
// BodyDeviceController bodyDeviceController = Get.find();
|
||||
// final isLoggedIn =
|
||||
// userInfoController.model.login == LoginStatus.LOGIN.code;
|
||||
|
||||
// final hasDevice = bodyDeviceController.deviceList.isNotEmpty;
|
||||
|
||||
// final showWeb = isLoggedIn && hasDevice;
|
||||
// final mainAxisAlignment =
|
||||
// showWeb ? MainAxisAlignment.start : MainAxisAlignment.center;
|
||||
|
||||
// return Scaffold(
|
||||
// backgroundColor: Colors.transparent,
|
||||
// body: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
// mainAxisSize: MainAxisSize.max,
|
||||
// mainAxisAlignment: mainAxisAlignment,
|
||||
// children: [
|
||||
// // 未登录提示
|
||||
// if (!isLoggedIn)
|
||||
// Center(
|
||||
// child: InkWell(
|
||||
// onTap: () => Get.toNamed("/loginPage"),
|
||||
// child: Container(
|
||||
// padding: EdgeInsets.symmetric(
|
||||
// vertical: 20.rpx, horizontal: 40.rpx),
|
||||
// child: RichText(
|
||||
// text: TextSpan(
|
||||
// children: [
|
||||
// TextSpan(
|
||||
// text: "请先".tr,
|
||||
// style: TextStyle(
|
||||
// color: Colors.white,
|
||||
// fontSize: 30.rpx,
|
||||
// ),
|
||||
// ),
|
||||
// WidgetSpan(
|
||||
// child: Stack(
|
||||
// children: [
|
||||
// Text(
|
||||
// "登录".tr,
|
||||
// style: TextStyle(
|
||||
// color: Colors.blue,
|
||||
// fontSize: 30.rpx,
|
||||
// ),
|
||||
// ),
|
||||
// Positioned(
|
||||
// bottom: 0,
|
||||
// left: 0,
|
||||
// right: 0,
|
||||
// child: Container(
|
||||
// height: 1,
|
||||
// color: Colors.blue,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// TextSpan(
|
||||
// text: "后,再使用小e".tr,
|
||||
// style: TextStyle(
|
||||
// color: Colors.white,
|
||||
// fontSize: 30.rpx,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
|
||||
// // 已登录但无设备提示
|
||||
// if (isLoggedIn && !hasDevice)
|
||||
// Center(
|
||||
// child: InkWell(
|
||||
// onTap: () {},
|
||||
// child: Container(
|
||||
// padding: EdgeInsets.symmetric(
|
||||
// vertical: 20.rpx, horizontal: 40.rpx),
|
||||
// child: RichText(
|
||||
// text: TextSpan(
|
||||
// children: [
|
||||
// TextSpan(
|
||||
// text: "请先".tr,
|
||||
// style: TextStyle(
|
||||
// color: Colors.white,
|
||||
// fontSize: 30.rpx,
|
||||
// ),
|
||||
// ),
|
||||
// WidgetSpan(
|
||||
// child: Stack(
|
||||
// children: [
|
||||
// Text(
|
||||
// "绑定设备".tr,
|
||||
// style: TextStyle(
|
||||
// color: Colors.blue,
|
||||
// fontSize: 30.rpx,
|
||||
// ),
|
||||
// ),
|
||||
// Positioned(
|
||||
// bottom: 0,
|
||||
// left: 0,
|
||||
// right: 0,
|
||||
// child: Container(
|
||||
// height: 1,
|
||||
// color: Colors.blue,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// TextSpan(
|
||||
// text: "后,再使用小e".tr,
|
||||
// style: TextStyle(
|
||||
// color: Colors.white,
|
||||
// fontSize: 30.rpx,
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
|
||||
// // 显示 WebView
|
||||
// if (showWeb)
|
||||
// Expanded(
|
||||
// child: Align(
|
||||
// alignment: Alignment.topLeft,
|
||||
// child: Obx(() {
|
||||
// return Stack(
|
||||
// children: [
|
||||
// controller.ready.value
|
||||
// ? controller.web.build()
|
||||
// : Container(),
|
||||
// if (!controller.loadRecource.value)
|
||||
// Positioned.fill(
|
||||
// child: Container(
|
||||
// decoration: BoxDecoration(
|
||||
// image: DecorationImage(
|
||||
// image: AssetImage(
|
||||
// "assets/img/xiaoe.png",
|
||||
// ),
|
||||
// fit: BoxFit.fill,
|
||||
// ),
|
||||
// ),
|
||||
// alignment: Alignment.center,
|
||||
// child: Column(
|
||||
// mainAxisSize: MainAxisSize.min,
|
||||
// children: [
|
||||
// CircularProgressIndicator(
|
||||
// valueColor: AlwaysStoppedAnimation<Color>(
|
||||
// Colors.white),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// }),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// );
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
|
||||
// lib/controller/xiaoe/xiaoe_controller.dart
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:easyweb/base/minisdk.dart';
|
||||
import 'package:easyweb/easyweb.dart';
|
||||
import 'package:ef/ef.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:vbvs_app/common/util/FitTool.dart';
|
||||
import 'package:vbvs_app/controller/device/body_device_controller.dart';
|
||||
import 'package:vbvs_app/controller/user_info_controller.dart';
|
||||
import 'package:vbvs_app/enum/LoginStatus.dart';
|
||||
import 'package:vbvs_app/model/api_response.dart';
|
||||
|
||||
class XiaoeModel {
|
||||
XiaoeModel();
|
||||
}
|
||||
|
||||
class XiaoeController extends GetControllerEx<XiaoeModel> {
|
||||
XiaoeController() : super(XiaoeModel()) {
|
||||
// 初始URL为空,在获取设备列表后设置
|
||||
initialUrl = "";
|
||||
// web = WebviewHelper(
|
||||
// isheadless: false,
|
||||
// jsbridge: buildsdk(
|
||||
// father: this,
|
||||
// ),
|
||||
// settings: buildsettings(),
|
||||
// params: PlatformHeadlessInAppWebViewCreationParams(
|
||||
// onLoadStop: (controller, url) {
|
||||
// setState(() {
|
||||
// ready.value = true;
|
||||
// });
|
||||
// },
|
||||
// onLoadResource: (controller, resource) {
|
||||
// // 资源加载回调
|
||||
// ef.log("msg");
|
||||
// loadRecource.value = true;
|
||||
// updateAll();
|
||||
// },
|
||||
// initialUrlRequest: URLRequest(url: WebUri(initialUrl)),
|
||||
// ),
|
||||
// );
|
||||
}
|
||||
|
||||
String initialUrl = ""; // 存储初始URL
|
||||
|
||||
// 变量与WebviewTestController保持一致
|
||||
var selectDevice = {};
|
||||
var lastSelectDevice = {};
|
||||
var bluetooth = 0;
|
||||
List personList = [];
|
||||
List instantData = [];
|
||||
List deviceList = []; // 小e需要的设备列表
|
||||
RxBool initFlag = false.obs;
|
||||
Timer? _resourceLoadTimer;
|
||||
Widget webviewWidget = Container();
|
||||
var wifiResponseData;
|
||||
|
||||
late WebviewHelper web;
|
||||
var ready = false.obs;
|
||||
var cnt = 0.obs;
|
||||
var loadRecource = false.obs;
|
||||
int sourceTime = 0;
|
||||
|
||||
bool _isStarting = false; // 添加启动标志
|
||||
|
||||
// 构建最终的URL
|
||||
String _buildFinalUrl(String baseUrl) {
|
||||
String queryParams = '?t=${DateTime.now().millisecondsSinceEpoch}';
|
||||
|
||||
if (deviceList.isNotEmpty) {
|
||||
// 提取小e需要的格式
|
||||
List<Map<String, dynamic>> xiaoeDeviceList = deviceList.map((device) {
|
||||
return {
|
||||
'mac': device['mac'] ?? '',
|
||||
'name': device['name'] ?? '',
|
||||
};
|
||||
}).toList();
|
||||
|
||||
String personParam = Uri.encodeComponent(jsonEncode(xiaoeDeviceList));
|
||||
queryParams += '&person=$personParam';
|
||||
}
|
||||
|
||||
// 添加语言参数(根据你的实际逻辑调整)
|
||||
String? language = "";
|
||||
// 这里保持你原来的语言逻辑
|
||||
// if (AppConstants().ent_type == APPPackageType.MHT.code) {
|
||||
// // 假设你有 mhLanguageController
|
||||
// // if (mhLanguageController.selectLanguage != null) {
|
||||
// // language = mhLanguageController.selectLanguage.value!.language_code;
|
||||
// // }
|
||||
// } else {
|
||||
// // 假设你有 languageController
|
||||
// // if (languageController.selectLanguage != null) {
|
||||
// // language = languageController.selectLanguage.value!.language_code;
|
||||
// // }
|
||||
// }
|
||||
|
||||
if (language != null && language.isNotEmpty) {
|
||||
queryParams += '&lang=$language';
|
||||
}
|
||||
|
||||
return baseUrl + queryParams;
|
||||
}
|
||||
|
||||
// 获取设备列表并构建URL
|
||||
Future<void> getDeviceListAndBuildUrl() async {
|
||||
try {
|
||||
BodyDeviceController bodyDeviceController = Get.find();
|
||||
ApiResponse apiResponse =
|
||||
await bodyDeviceController.getDeviceList(isAllDevice: true);
|
||||
|
||||
if (apiResponse.code == 1) {
|
||||
List<dynamic> rawList = apiResponse.data;
|
||||
|
||||
// 处理设备列表数据
|
||||
List<Map<String, dynamic>> newList = rawList.map((item) {
|
||||
String mac = item['mac']?.toString() ?? '';
|
||||
String name = '';
|
||||
|
||||
if (item['person'] != null &&
|
||||
item['person']['name'] != null &&
|
||||
item['person']['name'].toString().trim().isNotEmpty) {
|
||||
name = '${item['person']['name']}_$mac';
|
||||
} else {
|
||||
name = '${'体征检测设备'.tr}_$mac';
|
||||
}
|
||||
|
||||
return {
|
||||
'mac': mac,
|
||||
'name': name,
|
||||
'deviceType': item['device_type'] ?? '',
|
||||
'person': item['person'] ?? {},
|
||||
'rawData': item,
|
||||
};
|
||||
}).toList();
|
||||
|
||||
deviceList = newList;
|
||||
ef.log("小e获取到${deviceList.length}个设备");
|
||||
|
||||
// 构建最终的URL
|
||||
String baseUrl = "http://127.0.0.1/index.html";
|
||||
initialUrl = _buildFinalUrl(baseUrl);
|
||||
ef.log("小e初始URL: $initialUrl");
|
||||
} else {
|
||||
// API调用失败时使用基础URL
|
||||
String baseUrl = "http://127.0.0.1/index.html";
|
||||
initialUrl = baseUrl + '?t=${DateTime.now().millisecondsSinceEpoch}';
|
||||
ef.log("获取设备列表失败,使用基础URL: $initialUrl");
|
||||
}
|
||||
} catch (e) {
|
||||
ef.log("小e获取设备列表错误: $e");
|
||||
// 出错时使用基础URL
|
||||
String baseUrl = "http://127.0.0.1/index.html";
|
||||
initialUrl = baseUrl + '?t=${DateTime.now().millisecondsSinceEpoch}';
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> startXiaoe() async {
|
||||
try {
|
||||
if (_isStarting) {
|
||||
ef.log('小e已经在启动中,跳过');
|
||||
return;
|
||||
}
|
||||
_isStarting = true; // 标记为启动中
|
||||
ef.log('开始启动小e应用...');
|
||||
|
||||
// 先获取设备列表并构建URL
|
||||
await getDeviceListAndBuildUrl();
|
||||
|
||||
// 重新创建WebviewHelper,传入新的URL
|
||||
web = WebviewHelper(
|
||||
isheadless: false,
|
||||
jsbridge: buildsdk(father: this),
|
||||
settings: buildsettings(),
|
||||
params: PlatformHeadlessInAppWebViewCreationParams(
|
||||
onLoadStop: (controller, url) {
|
||||
setState(() {
|
||||
ready.value = true;
|
||||
});
|
||||
},
|
||||
onLoadResource: (controller, resource) {
|
||||
ef.log("msg");
|
||||
loadRecource.value = true;
|
||||
updateAll();
|
||||
},
|
||||
initialUrlRequest: URLRequest(url: WebUri(initialUrl)),
|
||||
),
|
||||
);
|
||||
|
||||
ef.log('开始运行小e Web应用...');
|
||||
|
||||
|
||||
|
||||
await web.runApp('xiaoe').then((x) {
|
||||
ef.log('web.runApp 执行完成,结果: $x');
|
||||
ready.value = true;
|
||||
ef.log('ready.value 设置为 true');
|
||||
|
||||
// 设置资源加载超时定时器
|
||||
// _resourceLoadTimer = Timer(Duration(seconds: 15), () {
|
||||
// ef.log('资源加载超时定时器触发,当前 loadRecource.value = ${loadRecource.value}');
|
||||
// if (!loadRecource.value) {
|
||||
// loadRecource.value = true;
|
||||
// updateAll();
|
||||
// ef.log('小e资源加载超时,强制显示页面');
|
||||
// }
|
||||
// });
|
||||
});
|
||||
} catch (e, s) {
|
||||
ef.log('启动小e错误: $e, $s');
|
||||
ef.log('错误堆栈: $s');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
ef.log("小e控制器初始化 =>${DateTime.now()}");
|
||||
|
||||
// 延迟启动
|
||||
Future.delayed(Duration(milliseconds: 300), () {
|
||||
startXiaoe();
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_resourceLoadTimer?.cancel();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
|
||||
class XiaoeView extends GetComponent<XiaoeController> {
|
||||
XiaoeView({super.key, super.oncreate});
|
||||
|
||||
@override
|
||||
XiaoeController newinstance() {
|
||||
if (ef.kvRoot.XiaoeController == null) {
|
||||
ef.kvRoot.XiaoeController = XiaoeController();
|
||||
if (Get.isRegistered<XiaoeController>() == false) {
|
||||
Get.put<XiaoeController>(ef.kvRoot.XiaoeController);
|
||||
XiaoeController xiaoeController = Get.find();
|
||||
xiaoeController.global = true;
|
||||
return xiaoeController;
|
||||
}
|
||||
}
|
||||
return ef.kvRoot.XiaoeController;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Obx(() {
|
||||
UserInfoController userInfoController = Get.find();
|
||||
BodyDeviceController bodyDeviceController = Get.find();
|
||||
final isLoggedIn =
|
||||
userInfoController.model.login == LoginStatus.LOGIN.code;
|
||||
|
||||
final hasDevice = bodyDeviceController.deviceList.isNotEmpty;
|
||||
|
||||
final showWeb = isLoggedIn && hasDevice;
|
||||
final mainAxisAlignment =
|
||||
showWeb ? MainAxisAlignment.start : MainAxisAlignment.center;
|
||||
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.transparent,
|
||||
body: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
mainAxisAlignment: mainAxisAlignment,
|
||||
children: [
|
||||
// 未登录提示
|
||||
if (!isLoggedIn)
|
||||
Center(
|
||||
child: InkWell(
|
||||
onTap: () => Get.toNamed("/loginPage"),
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 20.rpx, horizontal: 40.rpx),
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: "请先".tr,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 30.rpx,
|
||||
),
|
||||
),
|
||||
WidgetSpan(
|
||||
child: Stack(
|
||||
children: [
|
||||
Text(
|
||||
"登录".tr,
|
||||
style: TextStyle(
|
||||
color: Colors.blue,
|
||||
fontSize: 30.rpx,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
child: Container(
|
||||
height: 1,
|
||||
color: Colors.blue,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: "后,再使用小e".tr,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 30.rpx,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
// 已登录但无设备提示
|
||||
if (isLoggedIn && !hasDevice)
|
||||
Center(
|
||||
child: InkWell(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(
|
||||
vertical: 20.rpx, horizontal: 40.rpx),
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: "请先".tr,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 30.rpx,
|
||||
),
|
||||
),
|
||||
WidgetSpan(
|
||||
child: Stack(
|
||||
children: [
|
||||
Text(
|
||||
"绑定设备".tr,
|
||||
style: TextStyle(
|
||||
color: Colors.blue,
|
||||
fontSize: 30.rpx,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
child: Container(
|
||||
height: 1,
|
||||
color: Colors.blue,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: "后,再使用小e".tr,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 30.rpx,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
// 显示 WebView
|
||||
if (showWeb)
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: Obx(() {
|
||||
return Stack(
|
||||
children: [
|
||||
controller.ready.value
|
||||
? controller.web.build()
|
||||
: Container(),
|
||||
if (!controller.loadRecource.value)
|
||||
Positioned.fill(
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage(
|
||||
"assets/img/xiaoe.png",
|
||||
),
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
CircularProgressIndicator(
|
||||
valueColor: AlwaysStoppedAnimation<Color>(
|
||||
Colors.white),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user