【发布时间】:2020-09-03 22:03:14
【问题描述】:
有没有办法在Canvas 的给定位置绘制Widget?
更具体地说,我想在实际 FlutterMap 小部件前面的单独 Canvas 上绘制与 FlutterMap 相关的 Marker 的子小部件。这是创建CustomPainter 的尝试,但我不知道如何在画布上实际绘制小部件。使用RenderObject 需要PaintingContext,我不知道如何创建/检索:
class MarkerPainter extends CustomPainter {
MapController mc;
BuildContext context;
List<Marker> markers;
MarkerPainter(this.context, this.mc, this.markers);
@override
void paint(Canvas canvas, Size size) {
if( markers != null && markers.isNotEmpty ){
for(int i=0; i<markers.length; i++){
Marker marker = markers[i];
Offset o = myCalculateOffsetFromLatLng(marker.point, mc, context);
// Won't work, this needs a PaintingContext...
marker.builder(context).createElement().renderObject.paint(context, o);
}
}
}
@override
bool shouldRepaint(MarkerPainter oldDelegate) => oldDelegate.markers != markers;
}
【问题讨论】:
-
用另一种方式解决了。作为其他希望在 FlutterMap 上进行自定义绘画的人的旁注:只需创建一个 FlutterMap 插件、图层选项和图层类。即 MyLayerPlugin 类扩展 MapPlugin,MyLayerOptions 类扩展 LayerOptions,MyLayer 类扩展 StatelessWidget。看看内置的 Layer 类(例如 MarkerLayer)是如何实现的,并在 MyLayer 类中实现类似的东西。然后在 FlutterMap 小部件上注册您的 MyLayerPlugin 并将您的图层添加为任何其他图层。
-
如果您在 Answer 中分享您的解决方案会很棒
标签: flutter flutter-layout flutter-widget flutter-canvas fluttermap