771 lines
26 KiB
Dart
771 lines
26 KiB
Dart
// // 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(
|
||
strokeWidth: 2,
|
||
valueColor: AlwaysStoppedAnimation<Color>(
|
||
Colors.white),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
),
|
||
],
|
||
);
|
||
}),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
});
|
||
}
|
||
}
|