Flutter地图密度显示插件dencity_map_plugin的使用
Flutter地图密度显示插件dencity_map_plugin的使用
dencity_map_plugin
是一个用于在 Dencitylite Android 应用程序中展示地图的原生插件。
开始使用
这是一个用于 Dencitylite Android 应用程序的插件。此插件用于在 Dencitylite Android 应用程序中展示地图。
前置条件
在你的项目级别 android/app/src/main/res/strings.xml
文件中添加以下依赖项:
<string name="google_maps_key">GOOGLE_MAPS_API_KEY</string>
主要代码
package com.dencity.dencity_map_plugin_example
import com.dencity.dencity_map_plugin.NativeViewFactory
import com.dencity.dencity_map_plugin.SearchScreenViewFactory
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
flutterEngine
.platformViewsController
.registry
.registerViewFactory(
"com.dencity.dencity_map_plugin/map_view",
NativeViewFactory(this)
)
flutterEngine
.platformViewsController
.registry
.registerViewFactory(
"com.dencity.dencity_map_plugin/search_screen_view",
SearchScreenViewFactory(this)
)
val CHANNEL = "com.dencity.dencity_map_plugin/search_screen_distance"
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result ->
if (call.method == "getDistance") {
val distance = call.argument<String>("key")
if (distance != null) {
// 使用距离值
println("接收到的距离: $distance")
result.success(null)
} else {
result.error("UNAVAILABLE", "距离不可用", null)
}
} else {
result.notImplemented()
}
}
}
}
安装
添加依赖
在你的 pubspec.yaml
文件中添加插件依赖项:
dependencies:
dencity_map_plugin: <latest_version>
最新的版本为:
最新的包括预发布版本的版本为:
使用
主屏幕视图,包含500米范围内的所有标记
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: PlatformViewLink(
viewType: 'com.dencity.dencity_map_plugin/map_view',
surfaceFactory: (context, controller) {
return AndroidViewSurface(
controller: controller as AndroidViewController,
gestureRecognizers: const <Factory<OneSequenceGestureRecognizer>>{},
hitTestBehavior: PlatformViewHitTestBehavior.opaque,
);
},
onCreatePlatformView: (params) {
return PlatformViewsService.initSurfaceAndroidView(
id: params.id,
viewType: 'com.dencity.dencity_map_plugin/map_view',
layoutDirection: TextDirection.ltr,
creationParams: const <String, dynamic>{},
creationParamsCodec: const StandardMessageCodec(),
onFocus: () {
params.onFocusChanged(true);
},
)
..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
..create();
},
),
),
);
}
搜索屏幕视图,包含多个多边形线段以及500米范围内的标记,并通过平台通道计算距离
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String distanceCallResponse = "不可用";
static const distanceCallChannel = const MethodChannel(
'com.dencity.dencity_map_plugin/search_screen_distance');
[@override](/user/override)
void initState() {
super.initState();
requestLocationPermission();
getPlatformVersion();
}
Future<void> requestLocationPermission() async {
PermissionStatus status = await Permission.location.request();
if (status.isGranted) {
// 位置权限已授予,可以访问用户的位置。
} else if (status.isDenied) {
// 位置权限被拒绝,无法访问用户的位置。
} else if (status.isPermanentlyDenied) {
// 位置权限永久拒绝,用户需要在设置中启用它。
}
}
Future<void> getPlatformVersion() async {
try {
distanceCallChannel.setMethodCallHandler((call) async {
switch (call.method) {
case 'getDistance':
setState(() {
distanceCallResponse = call.arguments['key'];
});
print('接收到距离调用 ${call.arguments['key']}');
return Future.value('距离调用已接收');
default:
throw MissingPluginException();
}
});
} on PlatformException {
setState(() {
distanceCallResponse = '获取距离失败。';
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text(distanceCallResponse),
),
body: PlatformViewLink(
viewType: 'com.dencity.dencity_map_plugin/map_view',
surfaceFactory: (context, controller) {
return AndroidViewSurface(
controller: controller as AndroidViewController,
gestureRecognizers: const <Factory<OneSequenceGestureRecognizer>>{},
hitTestBehavior: PlatformViewHitTestBehavior.opaque,
);
},
onCreatePlatformView: (params) {
return PlatformViewsService.initSurfaceAndroidView(
id: params.id,
viewType: 'com.dencity.dencity_map_plugin/search_screen_view',
layoutDirection: TextDirection.ltr,
creationParams: const <String, dynamic>{
"origin": "48.8566, 2.3522",
"destination": "48.8606, 2.3376",
"apiKey": "GOOGLE_MAPS_API_KEY",
"parkingLotsURL":
"API_FOR_PARKING_LOTS",
},
creationParamsCodec: const StandardMessageCodec(),
onFocus: () {
params.onFocusChanged(true);
},
)
..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
..create();
},
),
),
);
}
}
更多关于Flutter地图密度显示插件dencity_map_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图密度显示插件dencity_map_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dencity_map_plugin
是一个 Flutter 插件,用于在地图上显示密度信息。它可以帮助你在地图上以热力图、点密度图等形式展示数据分布情况。以下是如何使用 dencity_map_plugin
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 dencity_map_plugin
的依赖:
dependencies:
flutter:
sdk: flutter
dencity_map_plugin: ^版本号
请将 ^版本号
替换为最新的插件版本号。你可以在 pub.dev 上查找最新版本。
2. 导入插件
在你的 Dart 文件中导入插件:
import 'package:dencity_map_plugin/dencity_map_plugin.dart';
3. 创建地图
你可以使用 DencityMap
来创建一个带有密度信息的地图。以下是一个简单的示例:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Density Map Example'),
),
body: DencityMap(
initialCameraPosition: CameraPosition(
target: LatLng(37.7749, -122.4194), // 初始地图中心位置(旧金山)
zoom: 12.0, // 初始缩放级别
),
densityPoints: [
DensityPoint(
latLng: LatLng(37.7749, -122.4194),
density: 0.8, // 密度值,范围在 0 到 1 之间
),
DensityPoint(
latLng: LatLng(37.7849, -122.4294),
density: 0.5,
),
// 添加更多点
],
onMapCreated: (DencityMapController controller) {
// 地图创建完成后的回调
},
),
),
);
}
}