controller.dart
2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
* @Author: 卢靖康
* @Date: 2024-04-24 08:22:16
* @LastEditTime: 2024-05-06 15:18:26
* @LastEditors: 卢靖康
*/
import 'dart:io';
import 'package:get/get.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:path_provider/path_provider.dart';
class MapController extends GetxController {
MapController();
late GlobalKey webViewKey = GlobalKey();
late InAppWebViewController? webViewController;
late InAppLocalhostServer webviewServer = InAppLocalhostServer();
RxBool ready = false.obs;
late String serverUrl;
_initData() {
update(["map"]);
}
_setMapWebviewController(InAppWebViewController controller) {
webViewController = controller;
}
void _setupPostMessageListeners(InAppWebViewController controller) {}
void onWebViewCreated(InAppWebViewController controller) {
_setMapWebviewController(controller);
_setupPostMessageListeners(controller);
}
void onLoadStart(controller, url) {}
void onLoadStop(controller, url) {}
void onConsoleMessage(controller, consoleMessage) {}
void onProgressChanged(controller, progress) {}
@override
Future<void> onInit() async {
await _initMap();
super.onInit();
}
@override
void onReady() {
super.onReady();
_initData();
}
/// 初始化地图
Future<void> _initMap() async {
if (await _checkFilesIntegrity()) {
if (_checkUpdate()) {
} else {
await _startLocalMapServer();
}
} else {
print('false');
_startMapServer();
}
}
/// 检查文件完整性
Future<bool> _checkFilesIntegrity() async {
Directory dir = await localfileDir();
String path = '${dir.path}/download/map';
if (await Directory(path).exists()) {
return true;
} else {
return false;
}
}
/// 检查是否需要更新地图
bool _checkUpdate() {
return false;
}
/// 启动本地地图服务
Future<void> _startLocalMapServer() async {
Directory dir = await localfileDir();
String path = '${dir.path}/download/map';
webviewServer = InAppLocalhostServer(documentRoot: path);
serverUrl = 'http://127.0.0.1:8080/';
await webviewServer.start();
ready.value = true;
update(["map"]);
}
/// 启动显示地图服务
Future<void> _startMapServer() async {
serverUrl = 'http://seaworldmap.shleads.com/index.html';
print('serverUrl: $serverUrl');
ready.value = true;
update(["map"]);
}
Future<Directory> localfileDir() async {
Directory? tempDir;
if (GetPlatform.isAndroid) {
tempDir = await getApplicationDocumentsDirectory();
} else {
tempDir = await getLibraryDirectory();
}
return tempDir;
}
}