Flutter地图标记缓存插件cached_map_marker的使用
Flutter地图标记缓存插件cached_map_marker的使用
提供了用于简化在Flutter应用程序中缓存Google Maps自定义标记的库。它利用flutter_cache_manager包来缓存图像和小部件,从而实现高效的检索和使用地图上的自定义标记。该软件包通过以下功能解决了管理标记资源时常见的挑战:
- 缓存网络图像:从网络下载并缓存图像,并根据需要调整大小以用作地图标记。
- 将小部件渲染为图像并缓存:将Flutter小部件渲染为图像,缓存这些图像,并将其用作自定义标记。这对于需要在地图上显示的动态内容特别有用。
- 高效资源管理:提供清除缓存的方法,确保应用程序有效地管理资源并避免不必要的存储使用。
特性
- 下载和缓存:自动下载并缓存图像以用作地图标记,减少网络请求并提高性能。
- 自定义标记大小:允许指定标记图像的大小,以便根据应用程序的需求进行定制。
- 缓存管理:提供清除缓存的方法,帮助管理设备的存储,并确保使用最新的图像。
- 与Google Maps Flutter轻松集成:通过BitmapDescriptor对象与Google Maps Flutter集成。
入门指南
要在Flutter项目中使用Cached Map Marker包,请遵循以下步骤:
安装
- 在您的
pubspec.yaml
文件中添加以下内容:
dependencies:
cached_map_marker: <lastest>
- 导入包
import 'package:cached_map_marker/cached_map_marker.dart';
创建一个来自小部件和网络图像的自定义标记,并将其缓存
final _cachedMapMarker = CachedMapMarker();
final markers = await Future.wait([
// 创建一个来自网络图像的自定义标记并缓存它
_cachedMapMarker.fromNetwork(
url: 'https://cdn-icons-png.flaticon.com/512/5193/5193688.png',
size: const Size(60, 60)),
// 创建一个来自小部件的自定义标记并缓存它
_cachedMapMarker.fromWidget(
widget: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(50),
),
child: const Icon(
Icons.location_on,
color: Colors.red,
size: 50,
),
),
cacheKey: 'widget_marker',
logicalSize: const Size(250, 250),
imageSize: const Size(100, 100),
)
]);
贡献
欢迎贡献!请随时提交拉取请求。
许可证
此包在MIT许可证下授权。详情请参阅LICENSE文件。
### 示例代码
```dart
import 'package:cached_map_marker/cached_map_marker.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 此小部件是您的应用的根组件
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Cached Map Marker Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => const GoogleMapView(),
),
);
},
child: const Text('Go to Google Map View'),
),
),
);
}
}
class GoogleMapView extends StatefulWidget {
const GoogleMapView({super.key});
[@override](/user/override)
State<GoogleMapView> createState() => _GoogleMapViewState();
}
class _GoogleMapViewState extends State<GoogleMapView> {
Set<Marker> markers = {};
late CachedMapMarker _cachedMapMarker;
[@override](/user/override)
void initState() {
_cachedMapMarker = CachedMapMarker();
_initMarkers();
super.initState();
}
void _initMarkers() async {
late Marker networkMarker;
late Marker bytesMarker;
final futures = await Future.wait([
_cachedMapMarker.fromNetwork(
url: 'https://cdn-icons-png.flaticon.com/512/5193/5193688.png',
size: const Size(60, 60)),
_cachedMapMarker.fromWidget(
widget: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(50),
),
child: const Icon(
Icons.location_on,
color: Colors.red,
size: 50,
),
),
cacheKey: 'widget_marker',
logicalSize: const Size(250, 250),
imageSize: const Size(100, 100),
)
]);
networkMarker = Marker(
markerId: const MarkerId('network_marker_id'),
position: const LatLng(37.77483, -122.41942),
icon: futures[0]);
bytesMarker = Marker(
markerId: const MarkerId('bytes_marker_id'),
position: const LatLng(37.734921595128405, -122.43419039994477),
icon: futures[1]);
setState(() {
markers.addAll([networkMarker, bytesMarker]);
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Cached Map Marker Demo'),
),
body: GoogleMap(
initialCameraPosition: const CameraPosition(
target: LatLng(37.77483, -122.41942),
zoom: 12,
),
markers: markers,
),
);
}
}
更多关于Flutter地图标记缓存插件cached_map_marker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图标记缓存插件cached_map_marker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
cached_map_marker
是一个用于在 Flutter 中缓存地图标记的插件,它可以帮助你更高效地管理和显示地图上的标记。以下是如何使用 cached_map_marker
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 cached_map_marker
依赖:
dependencies:
flutter:
sdk: flutter
cached_map_marker: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 cached_map_marker
包:
import 'package:cached_map_marker/cached_map_marker.dart';
3. 使用 CachedMapMarker
cached_map_marker
插件通常与 flutter_map
或其他地图插件一起使用。以下是一个简单的示例,展示如何在 flutter_map
中使用 CachedMapMarker
:
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:cached_map_marker/cached_map_marker.dart';
class MapScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Cached Map Marker Example'),
),
body: FlutterMap(
options: MapOptions(
center: LatLng(51.509364, -0.128928), // 伦敦的经纬度
zoom: 13.0,
),
layers: [
TileLayerOptions(
urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
subdomains: ['a', 'b', 'c'],
),
MarkerLayerOptions(
markers: [
CachedMapMarker(
point: LatLng(51.509364, -0.128928), // 标记的位置
builder: (context) => Icon(
Icons.location_on,
color: Colors.red,
size: 40.0,
),
),
],
),
],
),
);
}
}
4. 缓存标记
CachedMapMarker
会自动缓存标记,以便在多次显示时提高性能。你可以在 builder
中定义标记的样式和内容。
5. 自定义标记
你可以通过 builder
参数自定义标记的外观。例如,你可以使用 Icon
、Image
或其他 Flutter 组件来创建标记。
CachedMapMarker(
point: LatLng(51.509364, -0.128928),
builder: (context) => Image.asset('assets/marker.png'),
),
6. 处理点击事件
你还可以处理标记的点击事件,例如显示一个信息窗口或执行其他操作。
CachedMapMarker(
point: LatLng(51.509364, -0.128928),
builder: (context) => Icon(
Icons.location_on,
color: Colors.red,
size: 40.0,
),
onTap: () {
print('Marker tapped!');
},
),
7. 清除缓存
在某些情况下,你可能需要手动清除缓存。你可以使用 CachedMapMarker.clearCache()
方法来清除所有缓存的标记。
CachedMapMarker.clearCache();