import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';
import 'package:rewahub/widgets/styles.dart';
class Gmap extends StatefulWidget {
@override
_GmapState createState() => _GmapState();
}
class _GmapState extends State<Gmap> {
GoogleMapController mapController;
LocationData _currentPosition;
var lng, lat, loading;
bool sitiosToggle = false;
var sitios = [];
Set<Marker> allMarkers = Set();
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
}
Set<Circle> circles = Set.from([
Circle(
circleId: CircleId("myCircle"),
radius: 500,
center: _createCenter,
fillColor: Color.fromRGBO(171, 39, 133, 0.1),
strokeColor: Color.fromRGBO(171, 39, 133, 0.5),
onTap: () {
print('circle pressed');
})
]);
populateClients() {
sitios = [];
Firestore.instance.collection('retailers').getDocuments().then((docs) {
if (docs.documents.isNotEmpty) {
setState(() {
sitiosToggle = true;
});
for (int i = 0; i < docs.documents.length; ++i) {
initMarker(docs.documents[i].data);
}
}
});
}
initMarker(afro) {
allMarkers.add(Marker(
markerId: MarkerId(afro['rname']),
draggable: false,
infoWindow: InfoWindow(title: afro['rname'], snippet: afro['raddress']),
position: LatLng(afro['LatLng'].latitude, afro['LatLng'].longitude),
));
}
Set<Marker> marker = Set.from([
Marker(
markerId: MarkerId("mymarker"),
alpha: 0.7,
draggable: true,
infoWindow: InfoWindow(title: "mymarker", snippet: "mymakrer"),
)
]);
@override
initState() {
loading = true;
_getLocation();
super.initState();
}
_getLocation() async {
var location = new Location();
try {
_currentPosition = await location.getLocation();
setState(() {
lat = _currentPosition.latitude;
lng = _currentPosition.longitude;
loading = false;
print(_currentPosition);
}); //rebuild the widget after getting the current location of the user
} on Exception {
_currentPosition = null;
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primaryColor: reddish,
primaryTextTheme: TextTheme(
title: TextStyle(color: Colors.white),
),
),
home: Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(100.0),
child: new AppBar(
centerTitle: true,
title: Text(
'YOUR NEAREST STORES',
textAlign: TextAlign.center,
),
),
),
body: Stack(
children: <Widget>[
loading == false
? GoogleMap(
// circles: circles,
mapType: MapType.normal,
circles: circles,
myLocationButtonEnabled: true,
myLocationEnabled: true,
onMapCreated: _onMapCreated,
zoomGesturesEnabled: true,
compassEnabled: true,
scrollGesturesEnabled: true,
rotateGesturesEnabled: true,
tiltGesturesEnabled: true,
initialCameraPosition: CameraPosition(
target: LatLng(lat, lng),
zoom: 15.0,
),
markers: allMarkers,
)
: Center(
child: CircularProgressIndicator(),
),
Positioned(
top: MediaQuery.of(context).size.height -
(MediaQuery.of(context).size.height - 70.0),
right: 10.0,
child: FloatingActionButton(
onPressed: () {
populateClients();
},
mini: true,
backgroundColor: Colors.red,
child: Icon(Icons.refresh),
)),
],
),
),
);
}
LatLng _createCenter() {
return _createLatLng(lat , lng);
}
LatLng _createLatLng(double lat, double lng) {
return LatLng(lat, lng);
}
}
如何让用户的位置在Google Maps Flutter中圈出。这就是说,它能否在Google地图抖动中提供动态的位置来圈出。并且还应该过滤圆半径内的标记。
我收到错误消息,如果我尝试给圆指定动态位置,则只能在中心初始化静态变量。请帮我解决这个问题。
谢谢。
答案 0 :(得分:1)
您正在从外部访问方法。因此,它必须是静态的。如果您不想这样做,
在initState
中移动您的圈子初始化。喜欢,
@override
initState() {
circles = Set.from([
Circle(
circleId: CircleId("myCircle"),
radius: 500,
center: _createCenter,
fillColor: Color.fromRGBO(171, 39, 133, 0.1),
strokeColor: Color.fromRGBO(171, 39, 133, 0.5),
onTap: () {
print('circle pressed');
})
]);
loading = true;
_getLocation();
super.initState();
}
答案 1 :(得分:-1)
错误:无法在初始化程序中访问实例成员'_createCenter'。 (位于[myiu] lib / Widgets / Map.dart:97处的implicit_this_reference_in_initializer)