Flutter 标记不';不要在地图上添加
如图所示,按下绿色按钮应该会在地图上添加一个标记,在我的情况下,该标记不起作用 以下是链接: 我已经在真实的设备上以及不同的模拟器上进行了尝试 数据已插入firebase数据库,但未显示在地图上 应用程序中也没有错误Flutter 标记不';不要在地图上添加,flutter,dart,Flutter,Dart,如图所示,按下绿色按钮应该会在地图上添加一个标记,在我的情况下,该标记不起作用 以下是链接: 我已经在真实的设备上以及不同的模拟器上进行了尝试 数据已插入firebase数据库,但未显示在地图上 应用程序中也没有错误 导入'dart:async'; 导入“dart:键入的_数据”; 进口“包装:颤振/材料.省道”; 导入“包:flifter/services.dart”; 导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”; 导入“pa
导入'dart:async';
导入“dart:键入的_数据”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
导入“package:location/location.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
标题:“颤振图”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振地图主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
StreamSubscription _locationSubscription;
位置_locationTracker=位置();
标记;
圆圈;
GoogleMapController\u控制器;
静态最终CameraPosition initialLocation=CameraPosition(
目标:拉丁美洲(37.42796133580664,-122.085749655962),
缩放:14.4746,
);
Future getMarker()异步{
ByteData ByteData=await DefaultAssetBundle.of(context.load)(“assets/car_icon.png”);
返回byteData.buffer.asUint8List();
}
void updateMarkerAndCircle(LocationData newLocalData,Uint8List imageData){
LatLng LatLng=LatLng(newLocalData.latitude,newLocalData.longitude);
此.setState(){
标记器(
markerId:markerId(“家”),
位置:latlng,
旋转:newLocalData.heading,
可拖动:错误,
zIndex:2,
平:是的,
锚定:偏移量(0.5,0.5),
图标:BitmapDescriptor.fromBytes(imageData));
圆圈=圆圈(
circleId:circleId(“汽车”),
半径:newLocalData.accurity,
zIndex:1,
strokeColor:Colors.blue,
中心:拉特林,
fillColor:Colors.blue.withAlpha(70));
});
}
void getCurrentLocation()异步{
试一试{
Uint8List imageData=等待getMarker();
var location=await_locationTracker.getLocation();
更新MarkerandCircle(位置、图像数据);
if(_locationSubscription!=null){
_locationSubscription.cancel();
}
_locationSubscription=\u locationTracker.onLocationChanged().listen((newLocalData){
如果(_controller!=null){
_controller.animateCamera(CameraUpdate.newCameraPosition)(新CameraPosition(
轴承:192.8334901395799,
目标:LatLng(newLocalData.latitude,newLocalData.longitude),
倾斜:0,
变焦:18.00),;
updateMarkerAndCircle(newLocalData、imageData);
}
});
}平台上异常捕获(e){
如果(e.code=='权限被拒绝'){
debugPrint(“拒绝许可”);
}
}
}
@凌驾
无效处置(){
if(_locationSubscription!=null){
_locationSubscription.cancel();
}
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:谷歌地图(
mapType:mapType.terrain,
initialCameraPosition:initialLocation,
markers:Set.of((marker!=null)?[marker]:[]),
圆:一组((圆!=null)?[circle]:[]),
onMapCreated:(谷歌地图控制器){
_控制器=控制器;
},
),
浮动操作按钮:浮动操作按钮(
子:图标(图标。位置搜索),
已按下:(){
getCurrentLocation();
}),
);
}
}
是否在pubspec.yaml中初始化图像(car\u icon.png)
assets:
- assets/car_icon.png
dependencies:
google_maps_flutter: ^0.5.5
location:
在pubspec.yaml中添加依赖项
assets:
- assets/car_icon.png
dependencies:
google_maps_flutter: ^0.5.5
location:
现在试试这个代码,它工作得很好
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Maps',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Map Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
StreamSubscription _locationSubscription;
Location _locationTracker = Location();
Marker marker;
Circle circle;
GoogleMapController _controller;
static final CameraPosition initialLocation = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
);
Future<Uint8List> getMarker() async {
ByteData byteData = await DefaultAssetBundle.of(context).load("assets/bong.png");
return byteData.buffer.asUint8List();
}
void updateMarkerAndCircle(LocationData newLocalData, Uint8List imageData) {
LatLng latlng = LatLng(newLocalData.latitude, newLocalData.longitude);
this.setState(() {
marker = Marker(
markerId: MarkerId("home"),
position: latlng,
rotation: newLocalData.heading,
draggable: false,
zIndex: 2,
flat: true,
anchor: Offset(0.5, 0.5),
icon: BitmapDescriptor.fromBytes(imageData));
// icon: BitmapDescriptor.fromAsset("assets/bong.png"));
circle = Circle(
circleId: CircleId("car"),
radius: newLocalData.accuracy,
zIndex: 1,
strokeColor: Colors.blue,
center: latlng,
fillColor: Colors.blue.withAlpha(70));
});
}
void getCurrentLocation() async {
try {
Uint8List imageData = await getMarker();
var location = await _locationTracker.getLocation();
updateMarkerAndCircle(location, imageData);
if (_locationSubscription != null) {
_locationSubscription.cancel();
}
_locationSubscription = _locationTracker.onLocationChanged.listen((newLocalData) {
if (_controller != null) {
_controller.animateCamera(CameraUpdate.newCameraPosition(new CameraPosition(
bearing: 192.8334901395799,
target: LatLng(newLocalData.latitude, newLocalData.longitude),
tilt: 0,
zoom: 18.00)));
updateMarkerAndCircle(newLocalData, imageData);
}
});
} on PlatformException catch (e) {
if (e.code == 'PERMISSION_DENIED') {
debugPrint("Permission Denied");
}
}
}
@override
void dispose() {
if (_locationSubscription != null) {
_locationSubscription.cancel();
}
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: GoogleMap(
mapType: MapType.terrain,
initialCameraPosition: initialLocation,
markers: Set.of((marker != null) ? [marker] : []),
circles: Set.of((circle != null) ? [circle] : []),
onMapCreated: (GoogleMapController controller) {
_controller = controller;
},
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.location_searching),
onPressed: () {
getCurrentLocation();
}),
);
}
}
导入'dart:async';
导入“dart:键入的_数据”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
导入“package:location/location.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
标题:“颤振图”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振地图主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
StreamSubscription _locationSubscription;
位置_locationTracker=位置();
标记;
圆圈;
GoogleMapController\u控制器;
静态最终CameraPosition initialLocation=CameraPosition(
目标:拉丁美洲(37.42796133580664,-122.085749655962),
缩放:14.4746,
);
Future getMarker()异步{
ByteData ByteData=await DefaultAssetBundle.of(context.load)(“assets/bong.png”);
返回byteData.buffer.asUint8List();
}
void updateMarkerAndCircle(LocationData newLocalData,Uint8List imageData){
LatLng LatLng=LatLng(newLocalData.latitude,newLocalData.longitude);
此.setState(){
标记器(
markerId:markerId(“家”),
位置:latlng,
旋转:newLocalData.heading,
可拖动:错误,
zIndex:2,
平:是的,
锚定:偏移量(0.5,0.5),
图标:BitmapDescriptor.fromBytes(imageData));
//图标:BitmapDescr
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Stack(children:[GoogleMap(....)])