google-maps - 我的流在两次获得纬度和经度后崩溃,并且没有跟随我当前的位置。这是什么原因造成的?
问题描述
两次地理定位更新后,它崩溃并且不在地图中跟随我:
StreamSubscription subscription;
super.initState();
subscription = getPositionStream(desiredAccuracy: LocationAccuracy.high, distanceFilter: 10).listen(
(Position position) async {
getLocation();
centerScreen(position);
print(position == null ? 'Unknown' : position.latitude.toString() + ', ' + position.longitude.toString());
});
}
为了安全起见,我尝试将:subscription.resume() 添加到我的_onMapCreated(颤动谷歌地图)。没有影响...
这是我的getLocation:
Future getLocation() async {
Position position =
await getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
lat = position.latitude;
lng = position.longitude;
setState(() {});
}
和我的中心屏幕功能:
Future<void> centerScreen(Position position) async {
final GoogleMapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
target: LatLng(position.latitude, position.longitude),
zoom: _currentZoom)));
}
这是最新版本的颤振地理定位器和颤振谷歌地图。
两天来我一直在试图解决这个问题......我非常感谢你的帮助。先感谢您。
解决方案
带有地理定位器的 GoogleMapFlutter
// GoogleMapFlutter with Geolocator
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
class Map extends StatefulWidget {
@override
_MapState createState() => _MapState();
}
class _MapState extends State<Map> {
bool mapToggle = false;
var currentLocation;
@override
//initiate position
void initState() {
super.initState();
//Geolocation
Geolocator.getCurrentPosition().then((currloc) {
setState(() {
currentLocation = currloc;
mapToggle = true;
});
});
}
//Location Marker
Set<Marker> _createMarker() {
return <Marker>[
Marker(
markerId: MarkerId("currentLocation"),
position: LatLng(currentLocation.latitude, currentLocation.longitude),
icon: BitmapDescriptor.defaultMarker,
infoWindow: InfoWindow(title: "Your Location"),
)
].toSet();
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
mapToggle
//Google Map flutter
? GoogleMap(
mapType: MapType.normal,
markers: _createMarker(),
initialCameraPosition: CameraPosition(
target: LatLng(
currentLocation.latitude, currentLocation.longitude),
zoom: 15.0))
//Loading
: Center(
child: Text(
'Loading.. Please wait..',
style: TextStyle(fontSize: 20.0),
)),
],
);
}
}
推荐阅读
- powershell - 触摸命令在 VSC 的终端中不起作用
- visual-studio-code - VS Code'when'子句上下文 - 在资源管理器中右键单击时无论如何要获取文件路径?
- bash - Bash:使用 set -e 期望不同的退出代码
- reactjs - React Navigation StackNavigator 在 SwitchNavigation 中不起作用
- javascript - 如何实现这种滚动效果?
- html - 如何在 Wordpress 上检测基于设备的 HTML 代码?
- scala - 如何将 RequestHeader 发送到 ServiceCall?
- python - 尝试将 append_fields() 附加到 ndarray,没有错误但没有任何反应
- css - 如何修复 CSS3 中工具提示的过渡?
- ivr - 无法检测到ivr