marker_widget 2.0.0
marker_widget: ^2.0.0 copied to clipboard
Render Flutter widgets into google_maps_flutter bitmaps, glyphs, markers, and ground overlays with caching and modern Flutter View APIs.
Changelog #
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.0.0 - 2026-03-08 #
Breaking #
- Removed
MarkerIconScalingMode. - Replaced the old flat scaling parameters with:
WidgetBitmapRenderOptionsfor off-screen renderingMapBitmapOptionsfor map bitmap output
- Updated
MarkerIconRenderer.render()to acceptWidgetBitmapRenderOptions. - Renamed
Widget.toMarkerBitmap()toWidget.toBitmapDescriptor(). - Removed the top-level
widgetTo*helpers in favor of widget extensions with optional namedcontext. - Removed
MarkerBuildOptionsandAdvancedMarkerBuildOptions. Marker builder APIs now accept real upstreamMarkerandAdvancedMarkerobjects. - Updated widget extensions to use optional named
context,renderOptions, andbitmapOptions. - Replaced
MapBitmapOptions.renderedDpr()withMapBitmapOptions.pixelPerfect(). - Raised the minimum supported SDK versions to Flutter 3.41.4 and Dart 3.10.
Added #
MapBitmapOptionsandWidgetBitmapRenderOptionsvalue objects.MapBitmapOptions.pixelPerfect()for pixel-perfect display using the rendered widget DPR.MarkerIcon.toGroundOverlayBitmap().MarkerIcon.toBitmapGlyph().MarkerIcon.toPinConfig().MarkerIcon.toMarker()andMarkerIcon.toAdvancedMarker().MarkerIcon.toAdvancedPinMarker()for one-call widget-to-pin-marker flow.- Widget extension helpers:
toGroundOverlayBitmap()toBitmapGlyph()toPinConfig()toMarker()toAdvancedMarker()toAdvancedPinMarker()
buildClusterCacheKey().buildMarkerCacheKey(extra: ...)for additional visual-state cache inputs.defaultMarkerIconRendererexposed for cache inspection, clearing, and prewarming.Equatableon all value objects for structural equality.- Curated re-exports for advanced marker types that are missing from
google_maps_flutter.
Changed #
MapBitmapScaling.noneis now supported through raw bitmap conversion.toGroundOverlayBitmap()is a discoverability alias for the rawMapBitmapScaling.nonepath.- Renderer context capture now includes
LocalizationsandDefaultAssetBundle, not just themes andMediaQuery. - Cache invalidation now blocks stale in-flight renders from repopulating cache
after
clearCache()orremoveFromCache(). - README and example app now demonstrate base
Marker/AdvancedMarkerinputs, advanced marker pins, and ground overlays.
1.1.0 - 2025-12-04 #
Added #
MarkerIcon.toMapBitmap(): ReturnsBytesMapBitmapdirectly for users who need the concrete type for storage or interoperability.MarkerIcon.sizeInBytes: Getter for memory tracking.- Memory-based cache eviction: New
maxCacheBytesparameter (default 50 MB) onMarkerIconRendererto prevent unbounded memory growth. - Concurrent render deduplication: Multiple simultaneous calls with the same
cacheKeynow share a single render operation instead of duplicating work. - Cache introspection:
MarkerIconRenderer.cacheSize— current entry count.MarkerIconRenderer.cacheSizeInBytes— current memory usage.MarkerIconRenderer.isCached(key)— check if a key exists.MarkerIconRenderer.peekCache(key)— get without LRU bump.
- New extension methods on
Widget:toMapBitmap()— returnsBytesMapBitmapdirectly.toMarkerIcon()— returnsMarkerIconfor storage and later conversion.
- New standalone functions:
widgetToMapBitmap()— convenience withoutBuildContext, returnsBytesMapBitmap.widgetToMarkerIcon()— convenience withoutBuildContext, returnsMarkerIcon.
@immutableannotation onMarkerIconfor correctness.- Enhanced documentation: Added "Render Once, Reuse Everywhere" pattern examples in README and class docs.
Changed #
MapBitmapScaling.nonevalidation: Now throwsStateErrorfor both scaling modes (not justimagePixelRatio). This was already invalid at the platform level; the error message is now clearer and fails earlier.- Improved code style: explicit type annotations throughout for better readability.
- Updated README with performance tips, memory management guidance, and static vs dynamic marker strategies.
1.0.0 - 2025-11-24 #
Added #
- Initial release of marker_widget.
- Off-screen renderer that converts any
Widgetinto PNG bytes using:RenderView+ViewConfigurationwith logical & physical constraints.RepaintBoundaryand explicitPipelineOwner/BuildOwnerlifecycle.
MarkerIconvalue object that encapsulates:- PNG bytes.
- Logical size.
- Device pixel ratio.
- Conversion to
BitmapDescriptor.byteswithMapBitmapScaling.
MarkerIconRenderer:- Configurable default logical size.
- Optional LRU-based in-memory cache with size limit.
- Optional image-aware second pass via
waitForImages.
MarkerIconScalingMode:logicalSizemode (stable logical size, default).imagePixelRatiomode (pixel-perfect usingimagePixelRatio).
WidgetMarkerExtension.toMarkerBitmap:- Convert any widget into a
BitmapDescriptorusing the default (or injected) renderer. - Supports
waitForImages, custom pixel ratio, bitmap scaling, and scaling mode.
- Convert any widget into a
- Top-level
widgetToMarkerBitmaphelper for use without aBuildContext. buildMarkerCacheKeyhelper for theme/locale/size-aware marker caching.- Example app demonstrating:
- Basic usage with a custom card-like marker.
- Toggling between logical-size and image-pixel-ratio scaling modes.