controller.dart 2.7 KB
/*
 * @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;
  }
}