当我尝试在Google地图中放置标记时,直到单击“热重载”后,标记才会显示。我在某处缺少setState()
吗?
我的问题是我不知道在哪里。该软件包的文档确实令人迷惑,因为Google Maps Controller自推出以来就已进行了更新和更改。许多指南根本无济于事,因为代码已更改。
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter/material.dart';
import 'package:mobile_app_dev/UI/base_widget.dart';
import 'package:mobile_app_dev/UI/widgets.dart';
import '../main.dart';
class myMapScreen extends StatefulWidget {
@override
myMapState createState() => myMapState();
}
class myMapState extends State<myMapScreen> {
PageController _pageController;
GoogleMapController mapController;
LatLng center = const LatLng(37.352727, -122.034227);
// Location location = new Location();
Position currentLocation;
final Set<Marker> _markers = {};
void _getLocation() async {
var currentLocation = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
setState(() {
_markers.clear();
final marker = Marker(
markerId: MarkerId("curr_loc"),
position: LatLng(currentLocation.latitude, currentLocation.longitude),
infoWindow: InfoWindow(title: 'Your Location'),
icon: BitmapDescriptor.defaultMarker
);
_markers.add(marker);
});
currentLocation = currentLocation;
}
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
}
@override
void initState() {
_markers.clear();
super.initState();
_pageController = PageController();
_getLocation();
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BaseWidget(builder: (context, sizingInformation) {
return Scaffold(
backgroundColor: MyApp.backgroundColor,
appBar: AppBar(
automaticallyImplyLeading: true,
backgroundColor: MyApp.appBarColor,
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Map View',
style: TextStyle(
color: MyApp.whiteNoChangeColor,
fontSize: 25.0,
fontWeight: FontWeight.bold
),
),
],
),
centerTitle: true,
actions: <Widget>[
Padding(
padding: EdgeInsets.only(right: 20.0),
child: GestureDetector(
onTap: () async {
_getLocation();
},
child: Icon(
Icons.search,
size: 26.0,
),
)
)
],
),
body: Container(
height: sizingInformation.myScreenSize.height,
width: sizingInformation.myScreenSize.width,
child: Stack(
children: <Widget>[
GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: center,
zoom: 15.0,
),
myLocationEnabled: true,
mapType: MapType.hybrid,
compassEnabled: true,
markers: _markers,
),
Positioned(
child: FlatButton(
color: Colors.green,
child: Text("button"),
onPressed: (){
final marker = Marker(
markerId: MarkerId("curr_loc"),
position: center,
infoWindow: InfoWindow(title: 'Your Location'),
icon: BitmapDescriptor.defaultMarker
);
_markers.add(marker);
// _getLocation();
},
),
)
],
),
),
);
},
);
}
}
答案 0 :(得分:1)
只需创建一个标记列表,首先必须清除该列表,然后在该列表上添加标记
var markers = Set<Marker>();
addMarker(double lat, double lng, String id) {
var marker = Marker(
markerId: MarkerId(id),
position: LatLng(
lat,
lng,
),
infoWindow: InfoWindow(title: locationName),
onTap: () {},
);
markers.clear();
markers.add(marker);
}
答案 1 :(得分:0)
**只需在onPressed中添加setState方法,请检查下面的示例**
onPressed: (){
final marker = Marker(
markerId: MarkerId("curr_loc"),
position: center,
infoWindow: InfoWindow(title: 'Your Location'),
icon: BitmapDescriptor.defaultMarker
);
setState((){
_markers.add(marker);
});
},
答案 2 :(得分:0)
我遇到了完全相同的问题。
我发现解决此问题的唯一方法是将getLocation()
移至Google Maps小部件的 onTap 选项中。