47 lines
1.5 KiB
Dart
47 lines
1.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
|
import 'package:getx_scaffold/getx_scaffold.dart';
|
|
|
|
import 'controller.dart';
|
|
|
|
class MapPage extends GetView<MapController> {
|
|
const MapPage({super.key});
|
|
|
|
Widget _buildView() {
|
|
return Stack(
|
|
children: [
|
|
InAppWebView(
|
|
initialFile: 'assets/html/map.html',
|
|
initialSettings: InAppWebViewSettings(
|
|
isInspectable: true,
|
|
// 既然完全依赖 Flutter 定位,建议把 WebView 的定位彻底关掉,防止 JS 意外触发
|
|
geolocationEnabled: false,
|
|
javaScriptEnabled: true,
|
|
// Android 混合开发推荐配置
|
|
useHybridComposition: true, // 提升地图渲染性能(重要)
|
|
allowFileAccessFromFileURLs: true, // 允许本地 html 访问本地资源
|
|
allowUniversalAccessFromFileURLs: true,
|
|
),
|
|
// 当 WebView 创建完成后,将 controller 实例传递给我们的 MapController
|
|
onWebViewCreated: controller.onWebViewCreated,
|
|
onConsoleMessage: (controller, consoleMessage) {
|
|
// 方便在 Flutter 控制台查看来自 JS 的日志
|
|
print("JS Log: ${consoleMessage.message}");
|
|
},
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GetBuilder<MapController>(
|
|
init: MapController(),
|
|
id: 'map',
|
|
builder: (_) {
|
|
return _buildView();
|
|
},
|
|
);
|
|
}
|
|
}
|