Используя флаттер, я пытаюсь получить текущую позицию с помощью StreamSubscription и getPositionStream в геолокаторе. Но я продолжаю получать сообщение об ошибке: Ошибка: метод getPostionStream не определен для класса Geolocator.
Вот моя функция:
void getLocationUpdates(){
StreamSubscription<Position> homeTabPostionStream;
homeTabPostionStream = geoLocator.getPositionStream(locationOptions).listen((Position position){
currentPosition = position;
});
Здесь я создал переменные:
var geoLocator = Geolocator();
var locationOptions = LocationOptions(accuracy: LocationAccuracy.bestForNavigation, distanceFilter: 4);
Как вы просили, я пишу весь код для справки.
Вот весь код:
class HomeTab extends StatefulWidget {
@override
_HomeTabState createState() => _HomeTabState();
}
class _HomeTabState extends State<HomeTab> {
GoogleMapController mapController;
Completer<GoogleMapController> _controller = Completer();
Position currentPosition;
DatabaseReference tripRequestRef;
var geoLocator = Geolocator();
var locationOptions = LocationOptions(accuracy: LocationAccuracy.bestForNavigation, distanceFilter: 4);
void getCurrentPosition() async{
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.bestForNavigation);
currentPosition = position;
LatLng pos = LatLng(position.latitude, position.longitude);
mapController.animateCamera(CameraUpdate.newLatLng(pos));
}
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
GoogleMap(
padding: EdgeInsets.only(top: 135),
myLocationEnabled: true,
myLocationButtonEnabled: true,
mapType: MapType.normal,
initialCameraPosition: googlePlex,
onMapCreated: (GoogleMapController controller){
_controller.complete(controller);
mapController = controller;
getCurrentPosition();
},
),
Container(
height: 135,
width: double.infinity,
color: BrandColors.colorPrimary,
),
Positioned(
top: 60,
left: 0,
right: 0,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
AvailabilityButton(
title: 'GO ONLINE',
color: BrandColors.colorOrange,
onPressed: (){
GoOnline();
},
),
],
),
),
],
);
}
void GoOnline(){
Geofire.initialize('driversAvailable');
Geofire.setLocation(currentFirebaseUser.uid, currentPosition.latitude, currentPosition.longitude);
tripRequestRef = FirebaseDatabase.instance.reference().child('drivers/${currentFirebaseUser.uid}/newtrip');
tripRequestRef.set('waiting');
tripRequestRef.onValue.listen((event) {
});
}
void getLocationUpdates(){
StreamSubscription<Position> homeTabPostionStream;
homeTabPostionStream = geoLocator.getPositionStream(locationOptions).listen((Position position){
currentPosition = position;
});
2 ответа
Какую версию Геолокатора вы используете? Последняя версия не требует создания экземпляра класса Geolocator. GetPositionStream () - это статический метод, называемый так Geolocator.getPositionStream (). Все аргументы, переданные методу, теперь также являются необязательными. Местоположение не требуется.
Обновлено
void getLocationUpdates(){
StreamSubscription<Position> homeTabPostionStream;
homeTabPostionStream = Geolocator.getPositionStream(
desiredAccuracy: LocationAccuracy.bestForNavigation,
distanceFilter: 4).listen((event) {
...
});
}
Вы можете удалить
var geoLocator = Geolocator();
var locationOptions = LocationOptions(accuracy: LocationAccuracy.bestForNavigation, distanceFilter: 4);
Кажется, в вашем методе отсутствует буква (i): getPostionStream. Это должно быть так:
void getLocationUpdates(){
StreamSubscription<Position> homeTabPostionStream;
homeTabPostionStream = geoLocator.getPositionStream().listen((Position position){
currentPosition = position;
});
Похожие вопросы
Новые вопросы
firebase
Firebase - это бессерверная платформа для унифицированной разработки приложений для мобильных устройств и для Интернета.