Flutter 地图当前位置:以下 NoSuchMethodError 被抛出构建 HomeScreen(dirty, state:_HomeScreenState#fc684)
Flutter map current location : The following NoSuchMethodError was thrown building HomeScreen(dirty, state:_HomeScreenState#fc684)
我正在使用 flutter map 和 geolocator 包来获取当前位置并在地图中显示,但出现如下错误
getter 'latitude' 被调用为 null。
接收者:空
尝试调用:latitude
我已经解决了这个问题,但没有帮助
https://github.com/johnpryan/flutter_map/issues/124
我在stateful widget中使用过
LatLng _center ;
Position currentLocation;
Future<Position> locateUser() async {
return Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
}
getUserLocation() async {
currentLocation = await locateUser();
setState(() {
_center = LatLng(currentLocation.latitude, currentLocation.longitude);
});
print('center $_center');
}
@override
void initState() {
super.initState();
getUserLocation();
}
这是我调用 getUserLocation() 的小部件
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(
title: Text('Plants Watch'),
backgroundColor: Colors.green[700],
actions: <Widget>[
IconButton(
icon: Icon(Icons.exit_to_app),
onPressed: () {
BlocProvider.of<AuthenticationBloc>(context).dispatch(
LoggedOut(),
);
},
)
],
),
body: Stack(
children: <Widget>[
new FlutterMap(
options: new MapOptions(
center: new LatLng(currentLocation.latitude, currentLocation.longitude),
maxZoom: 13.0,
),
layers: [
new TileLayerOptions(
urlTemplate: "https://api.tiles.mapbox.com/v4/"
"{id}/{z}/{x}/{y}@2x.png?access_token={accessToken}",
additionalOptions: {
'accessToken': '<accessToken>',
'id': 'mapbox.streets',
},
),
new MarkerLayerOptions(
markers: [
new Marker(
width: 80.0,
height: 80.0,
point: LatLng(currentLocation.latitude, currentLocation.longitude),
builder: (ctx) =>
new Container(
child: new IconButton(
icon: Icon(Icons.location_on),
color: Colors.green[700],
iconSize: 45.0,
onPressed: (){
print('Marker Tapped');
},
),
),
),
],
),
],
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton(
backgroundColor: Colors.green[700],
child: Icon(Icons.add),
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context)=> PostPage()));
},
),
),
)
],
)
);
}
}
I just want to remove the no such method error on building app.
问题出在我调用用户当前位置的 MarkerLayerOption 中,导致纬度错误。因此,在 FlutterMap 函数和 MarkerLayerOption 中更改 LatLng 可以解决问题。
new FlutterMap(
options: new MapOptions(
center: new LatLng(12.9716, 77.5946),
maxZoom: 13.0,
),
layers: [
new TileLayerOptions(
urlTemplate: "https://api.tiles.mapbox.com/v4/"
"{id}/{z}/{x}/{y}@2x.png?access_token={accessToken}",
additionalOptions: {
'accessToken': '<accessToken>',
'id': 'mapbox.streets',
},
),
new MarkerLayerOptions(
markers: [
new Marker(
width: 80.0,
height: 80.0,
point: LatLng(12.9716, 77.5946),
builder: (ctx) =>
new Container(
child: new IconButton(
icon: Icon(Icons.location_on),
color: Colors.green[700],
iconSize: 45.0,
onPressed: (){
print('Marker Tapped');
},
),
),
),
],
),
我正在使用 flutter map 和 geolocator 包来获取当前位置并在地图中显示,但出现如下错误
getter 'latitude' 被调用为 null。 接收者:空 尝试调用:latitude
我已经解决了这个问题,但没有帮助 https://github.com/johnpryan/flutter_map/issues/124
我在stateful widget中使用过
LatLng _center ;
Position currentLocation;
Future<Position> locateUser() async {
return Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
}
getUserLocation() async {
currentLocation = await locateUser();
setState(() {
_center = LatLng(currentLocation.latitude, currentLocation.longitude);
});
print('center $_center');
}
@override
void initState() {
super.initState();
getUserLocation();
}
这是我调用 getUserLocation() 的小部件
Widget build(BuildContext context){
return Scaffold(
appBar: AppBar(
title: Text('Plants Watch'),
backgroundColor: Colors.green[700],
actions: <Widget>[
IconButton(
icon: Icon(Icons.exit_to_app),
onPressed: () {
BlocProvider.of<AuthenticationBloc>(context).dispatch(
LoggedOut(),
);
},
)
],
),
body: Stack(
children: <Widget>[
new FlutterMap(
options: new MapOptions(
center: new LatLng(currentLocation.latitude, currentLocation.longitude),
maxZoom: 13.0,
),
layers: [
new TileLayerOptions(
urlTemplate: "https://api.tiles.mapbox.com/v4/"
"{id}/{z}/{x}/{y}@2x.png?access_token={accessToken}",
additionalOptions: {
'accessToken': '<accessToken>',
'id': 'mapbox.streets',
},
),
new MarkerLayerOptions(
markers: [
new Marker(
width: 80.0,
height: 80.0,
point: LatLng(currentLocation.latitude, currentLocation.longitude),
builder: (ctx) =>
new Container(
child: new IconButton(
icon: Icon(Icons.location_on),
color: Colors.green[700],
iconSize: 45.0,
onPressed: (){
print('Marker Tapped');
},
),
),
),
],
),
],
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Align(
alignment: Alignment.bottomRight,
child: FloatingActionButton(
backgroundColor: Colors.green[700],
child: Icon(Icons.add),
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context)=> PostPage()));
},
),
),
)
],
)
);
}
}
I just want to remove the no such method error on building app.
问题出在我调用用户当前位置的 MarkerLayerOption 中,导致纬度错误。因此,在 FlutterMap 函数和 MarkerLayerOption 中更改 LatLng 可以解决问题。
new FlutterMap(
options: new MapOptions(
center: new LatLng(12.9716, 77.5946),
maxZoom: 13.0,
),
layers: [
new TileLayerOptions(
urlTemplate: "https://api.tiles.mapbox.com/v4/"
"{id}/{z}/{x}/{y}@2x.png?access_token={accessToken}",
additionalOptions: {
'accessToken': '<accessToken>',
'id': 'mapbox.streets',
},
),
new MarkerLayerOptions(
markers: [
new Marker(
width: 80.0,
height: 80.0,
point: LatLng(12.9716, 77.5946),
builder: (ctx) =>
new Container(
child: new IconButton(
icon: Icon(Icons.location_on),
color: Colors.green[700],
iconSize: 45.0,
onPressed: (){
print('Marker Tapped');
},
),
),
),
],
),