Google maps 如何将额外的文本添加到Flatter google地图自定义标记中?
问题是如何在自定义谷歌地图标记上注入表示车辆注册号的文本重叠 我尝试使用此方法将文本覆盖在图标上 生成器:(上下文)=>() 但根本不被承认Google maps 如何将额外的文本添加到Flatter google地图自定义标记中?,google-maps,flutter,google-maps-markers,Google Maps,Flutter,Google Maps Markers,问题是如何在自定义谷歌地图标记上注入表示车辆注册号的文本重叠 我尝试使用此方法将文本覆盖在图标上 生成器:(上下文)=>() 但根本不被承认 class MapsDemo extends StatefulWidget { @override State createState() => MapsDemoState(); } class MapsDemoState extends State<MapsDemo> { GoogleMapControl
class MapsDemo extends StatefulWidget {
@override
State createState() => MapsDemoState();
}
class MapsDemoState extends State<MapsDemo> {
GoogleMapController mapController;
//Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.contacts]);import 'package:permission_handler/permission_handler.dart';
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: GoogleMap(
onMapCreated: (GoogleMapController controller) {
mapController = controller;
},
),
),
],
),
floatingActionButton: FloatingActionButton(onPressed: () {
double mq1 = MediaQuery.of(context).devicePixelRatio;
String icon = "images/car.png";
if (mq1>1.5 && mq1<2.5) {icon = "images/car2.png";}
else if(mq1 >= 2.5){icon = "images/car3.png";}
print("Mq 1"+mq1.toStringAsFixed(5));
String iconPath="lib/assets/move@3x.png";
mapController.addMarker(
MarkerOptions(
position: LatLng(37.4219999, -122.0862462),
infoWindowText: InfoWindowText("TEST","TEST"),
icon: BitmapDescriptor.fromAsset(iconPath),
consumeTapEvents: true,
/*builder: (context) =>(
)*/
//icon:BitmapDescriptor.fromAsset(assetName)
),
);
mapController.addMarker(
MarkerOptions(
position: LatLng(38.4219999, -122.0862462),
infoWindowText: InfoWindowText("tt","adfaf"),
icon: BitmapDescriptor.fromAsset("lib/assets/logo.png"),
anchor: Offset(100,160),
//icon:BitmapDescriptor.fromAsset(assetName)
),
);
mapController.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(37.4219999, -122.0862462),
zoom: 15.0,
),
),
);
})
);
}
}
类MapsDemo扩展StatefulWidget{
@凌驾
State createState()=>MapsDemoState();
}
类MapsDemoState扩展了状态{
谷歌地图控制器;
//映射权限=等待PermissionHandler().requestPermissions([PermissionGroup.contacts]);导入“包:permission\u handler/permission\u handler.dart”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
容器(
高度:MediaQuery.of(context).size.height,
宽度:MediaQuery.of(context).size.width,
孩子:谷歌地图(
onMapCreated:(谷歌地图控制器){
mapController=控制器;
},
),
),
],
),
浮动操作按钮:浮动操作按钮(按下时:(){
double mq1=MediaQuery.of(context.devicePixelRatio);
String icon=“images/car.png”;
如果(mq1>1.5&&mq1=2.5){icon=“images/car3.png”;}
打印(“mq1”+mq1.toStringAsFixed(5));
String iconPath=“lib/assets”/move@3x.png";
mapController.addMarker(
标记选项(
位置:LatLng(37.4219999,-122.0862462),
infoWindowText:infoWindowText(“测试”、“测试”),
图标:BitmapDescriptor.fromAsset(iconPath),
对,,
/*生成器:(上下文)=>(
)*/
//图标:BitmapDescriptor.fromAsset(assetName)
),
);
mapController.addMarker(
标记选项(
位置:LatLng(38.4219999,-122.0862462),
infoWindowText:infoWindowText(“tt”、“adfaf”),
图标:BitmapDescriptor.fromAsset(“lib/assets/logo.png”),
锚定:偏移量(100160),
//图标:BitmapDescriptor.fromAsset(assetName)
),
);
mapController.animateCamera(
CameraUpdate.newCameraPosition(
摄像定位(
目标:LatLng(37.4219999,-122.0862462),
缩放:15.0,
),
),
);
})
);
}
}
我所显示的是,如果您注意到图标右侧的空白处是我希望注册号出现的位置,则图标将正确显示。尝试以下操作:
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class MapsDemo extends StatefulWidget {
@override
State createState() => MapsDemoState();
}
class MapsDemoState extends State<MapsDemo> {
final Set<Marker> _markers = {};
void _onAddMarkerButtonPressed() {
print('in _onAddMarkerButtonPressed()');
setState(() {
_markers.add(Marker(
// This marker id can be anything that uniquely identifies each marker.
markerId: MarkerId("111"),
position: LatLng(30.666, 76.8127),
infoWindow: InfoWindow(
title: "bingo! This works",
),
icon: BitmapDescriptor.defaultMarker,
));
});
print('setState() done');
}
GoogleMapController mapController;
//Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.contacts]);import 'package:permission_handler/permission_handler.dart';
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: GoogleMap(
markers: _markers,
onMapCreated: (GoogleMapController controller) {
mapController = controller;
},
initialCameraPosition:
CameraPosition(target: LatLng(30.666, 76.8127), zoom: 15),
),
),
],
),
floatingActionButton: FloatingActionButton(onPressed: () {
print('in fab()');
double mq1 = MediaQuery.of(context).devicePixelRatio;
_onAddMarkerButtonPressed();
mapController.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(30.666, 76.8127),
zoom: 15.0,
),
),
);
}));
}
}
导入“包装:颤振/材料.省道”;
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
类MapsDemo扩展StatefulWidget{
@凌驾
State createState()=>MapsDemoState();
}
类MapsDemoState扩展了状态{
最终集_标记={};
void _onAddMarkerButtonPressed(){
打印('in'u onAddMarkerButtonPressed()');
设置状态(){
_标记。添加(标记)(
//此标记id可以是唯一标识每个标记的任何内容。
markerId:markerId(“111”),
位置:LatLng(30.666,76.8127),
信息窗口:信息窗口(
标题:“宾果!这很有效”,
),
图标:BitmapDescriptor.defaultMarker,
));
});
打印('setState()done');
}
谷歌地图控制器;
//映射权限=等待PermissionHandler().requestPermissions([PermissionGroup.contacts]);导入“包:permission\u handler/permission\u handler.dart”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
容器(
高度:MediaQuery.of(context).size.height,
宽度:MediaQuery.of(context).size.width,
孩子:谷歌地图(
标记:_标记,
onMapCreated:(谷歌地图控制器){
mapController=控制器;
},
初始摄像机位置:
摄像机位置(目标:LatLng(30.666,76.8127),变焦:15),
),
),
],
),
浮动操作按钮:浮动操作按钮(按下时:(){
打印('in fab()');
double mq1=MediaQuery.of(context.devicePixelRatio);
_onAddMarkerButtonPressed();
mapController.animateCamera(
CameraUpdate.newCameraPosition(
摄像定位(
目标:LatLng(30.666,76.8127),
缩放:15.0,
),
),
);
}));
}
}
我通过创建一个函数来解决这个问题,该函数返回了一个,在初始化标记时,我将其返回和解析的值作为图标传入:
很抱歉,我不记得为什么我要用神奇的40和20常量填充这个方法。可能是通过视觉测试计算出来的,当时我正在渲染
Future<BitmapDescriptor> createCustomMarkerBitmap(/* your args here */) async {
PictureRecorder recorder = new PictureRecorder();
Canvas c = new Canvas(recorder);
/* Do your painting of the custom icon here, including drawing text, shapes, etc. */
Picture p = recorder.endRecording();
ByteData pngBytes = await (await p.toImage(
tp.width.toInt() + 40, tp.height.toInt() + 20))
.toByteData(format: ImageByteFormat.png);
Uint8List data = Uint8List.view(pngBytes.buffer);
return BitmapDescriptor.fromBytes(data);
}
_标记。添加(新标记)(
/*除您的其他财产外:*/
图标:位图描述符,
));
});
或:
标记器(
/*除您的其他财产外:*/
图标:位图描述符
);
如果有帮助,请告诉我。德国劳埃德船级社
我找到了github问题的答案您能将截图编辑到问题中吗?最好将回答问题所需的一切都包括在内:@MiloP我不知道在截图上编辑什么?它不可见吗?@anmol.majhail你知道如何动态地将文本带入空白区吗?现在我需要非常清楚地了解这一点才能继续应用程序。我甚至试图让窗口文本永久打开,但这都不起作用either@newbie
createCustomMarkerBitmap(...).then((BitmapDescriptor bitmapDescriptor) {
BitmapDescriptor bitmapDescriptor = await createCustomMarkerBitmap(...);