Google maps 如何在flatter中为谷歌地图创建自定义图像标记,并在自定义小部件中使用它?
如何在Google maps 如何在flatter中为谷歌地图创建自定义图像标记,并在自定义小部件中使用它?,google-maps,flutter,dart,widget,google-maps-markers,Google Maps,Flutter,Dart,Widget,Google Maps Markers,如何在flatter google map中将custom widget用作下图中的市场,或者如何在flatter中实现下图作为输出 这是我第一次在颤振中使用贴图。我知道我需要将图像转换为Unit8List,但这只是图像!如何在自定义小部件中处理图像 图像来自网络api调用,格式为base46string。如果您使用的是google\u maps\u flatter软件包,您可以使用图标的BitmapDescriptor使用自己的图像创建自定义标记。首先,您需要在pubspec.yaml的fl
flatter google map
中将custom widget
用作下图中的市场,或者如何在flatter
中实现下图作为输出
这是我第一次在颤振中使用贴图。我知道我需要将图像转换为Unit8List
,但这只是图像!如何在自定义小部件中处理图像
图像来自网络api调用,格式为
base46
string。如果您使用的是google\u maps\u flatter
软件包,您可以使用图标的BitmapDescriptor
使用自己的图像创建自定义标记。首先,您需要在pubspec.yaml
的flatter:
部分下定义您的资产/图像:
flutter:
# To add assets to your application, add an assets section, like this:
assets:
- assets/images/
然后,在加载贴图之前,定义一个BitmapDescriptor
变量将图标存储在main.dart
上,如下所示:
// Custom marker icon
BitmapDescriptor icon;
// List for storing markers
List<Marker> allMarkers = [];
@override
void initState() {
super.initState();
BitmapDescriptor.fromAssetImage(
ImageConfiguration(), 'assets/images/icon.png')
.then((value) => icon = value);
}
编辑:
您还可以使用从URL加载图像,然后将响应传递到BitmapDescriptor.fromBytes(bytes)代码>:
经过数小时的测试,我得到的工作解决方案是屏蔽+根据服务器端图像的要求添加边框。因为我已经能够将图像转换为BitmapDescriptor
。所以现在我得到了想要的输出
注意:我还能够将base64
图像字符串转换为图像,并在移动应用程序中工作。问题是它有时显示,有时不显示。随着图像数量的增加,问题也越来越严重。因此,上述解决方案是一个可以简单实用地实现的最佳解决方案。问题是图像通过网络传输,我可以在api中以base64
的形式发送图像,这样我就不需要等待图像加载。当前的问题是,处理图像需要花费一些时间,因为这些图像多次未显示。我可以知道您当前是如何获取图像的吗?您是否尝试过使用从URL获取图像,然后将响应中的字节传递到BitmapDescriptor.fromBytes()代码>?我编辑了我的答案,以包括这一点,因为我说的问题不是图像没有被提取。其未显示是问题所在。不管怎样,我得到的答案是另一种选择。
GoogleMap(
initialCameraPosition: _initialLocation,
mapType: MapType.normal,
markers: Set.from(allMarkers),
onMapCreated: (GoogleMapController controller) {
mapController = controller;
setState(() {
// add marker
allMarkers.add(Marker(
markerId: MarkerId('Google'),
draggable: false,
icon: icon,
position: LatLng(37.422066,-122.08409)));
});
},
),
final Response response = await get("imageUrl");
icon = await BitmapDescriptor.fromBytes(response.bodyBytes);