У меня есть проблема с проектом Flutter, который я делаю. Я использую API GoogleMaps в качестве карты, и до сих пор карта загружается, но я не могу получить свое текущее местоположение. Я называю свой метод инициализации, чтобы получить разрешение на местоположение и получить свою позицию, как только мое мнение загружается, но его не называют как -то, и я не понимаю, почему. < /P>
Здесь мы, мой взгляд < /p>
class GoogleMapWidget extends StatefulWidget {
const GoogleMapWidget({super.key});
@override
State createState() => GoogleMapState();
}
class GoogleMapState extends State {
late GoogleMapController mapController;
final LatLng _center = const LatLng(45.521563, -122.677433);
void onMapCreated(GoogleMapController controller) {
mapController = controller;
}
@override
Widget build(BuildContext context) {
return ViewModelBuilder.reactive(
viewModelBuilder: () => GoogleMapViewModel(),
onViewModelReady: (viewModel) async {
await viewModel.initLocation();
},
builder: (context, viewModel, child) {
return MaterialApp(
home: Scaffold(
body: Stack(
children: [
GoogleMap(
onMapCreated: onMapCreated,
initialCameraPosition: CameraPosition(
target: _center,
zoom: 11.0,
),
),
Positioned(
bottom: 16.0,
left: 16.0,
child: FloatingActionButton(
onPressed: viewModel.locationEnabled
? () => viewModel.recenterMap(mapController)
: null,
child: Icon(
!viewModel.locationEnabled
? Icons.gps_off_outlined
: (viewModel.isCentered
? Icons.gps_fixed_outlined
: Icons.gps_not_fixed_outlined),
),
),
),
],
),
),
);
},
);
}
}
< /code>
И вот мои два метода: тот, который обрабатывает разрешение, и тот, который вызывается при загрузке.
Future _handlePermission() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
await Geolocator.openLocationSettings();
return false;
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return false;
}
}
if (permission == LocationPermission.deniedForever) {
return false;
}
return true;
}
< /code>
Future initLocation(GoogleMapController mapController) async {
setBusy(true);
final hasPermission = await _handlePermission();
if (!hasPermission) {
_locationEnabled = false;
notifyListeners();
setBusy(false);
return;
}
try {
final position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
_currentPosition = LatLng(position.latitude, position.longitude);
_isCentered = true;
// Déplacer la caméra vers la position actuelle
await mapController.animateCamera(
CameraUpdate.newLatLngZoom(_currentPosition!, 15.5),
);
} catch (e) {
_currentPosition = defaultLatLng;
_isCentered = true;
await mapController.animateCamera(
CameraUpdate.newLatLngZoom(defaultLatLng, 15.5),
);
notifyListeners();
}
setBusy(false);
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... permission
Невозможно получить разрешение на определение местоположения Android ⇐ Android
Форум для тех, кто программирует под Android
1737995829
Anonymous
У меня есть проблема с проектом Flutter, который я делаю. Я использую API GoogleMaps в качестве карты, и до сих пор карта загружается, но я не могу получить свое текущее местоположение. Я называю свой метод инициализации, чтобы получить разрешение на местоположение и получить свою позицию, как только мое мнение загружается, но его не называют как -то, и я не понимаю, почему. < /P>
Здесь мы, мой взгляд < /p>
class GoogleMapWidget extends StatefulWidget {
const GoogleMapWidget({super.key});
@override
State createState() => GoogleMapState();
}
class GoogleMapState extends State {
late GoogleMapController mapController;
final LatLng _center = const LatLng(45.521563, -122.677433);
void onMapCreated(GoogleMapController controller) {
mapController = controller;
}
@override
Widget build(BuildContext context) {
return ViewModelBuilder.reactive(
viewModelBuilder: () => GoogleMapViewModel(),
onViewModelReady: (viewModel) async {
await viewModel.initLocation();
},
builder: (context, viewModel, child) {
return MaterialApp(
home: Scaffold(
body: Stack(
children: [
GoogleMap(
onMapCreated: onMapCreated,
initialCameraPosition: CameraPosition(
target: _center,
zoom: 11.0,
),
),
Positioned(
bottom: 16.0,
left: 16.0,
child: FloatingActionButton(
onPressed: viewModel.locationEnabled
? () => viewModel.recenterMap(mapController)
: null,
child: Icon(
!viewModel.locationEnabled
? Icons.gps_off_outlined
: (viewModel.isCentered
? Icons.gps_fixed_outlined
: Icons.gps_not_fixed_outlined),
),
),
),
],
),
),
);
},
);
}
}
< /code>
И вот мои два метода: тот, который обрабатывает разрешение, и тот, который вызывается при загрузке.
Future _handlePermission() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
await Geolocator.openLocationSettings();
return false;
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return false;
}
}
if (permission == LocationPermission.deniedForever) {
return false;
}
return true;
}
< /code>
Future initLocation(GoogleMapController mapController) async {
setBusy(true);
final hasPermission = await _handlePermission();
if (!hasPermission) {
_locationEnabled = false;
notifyListeners();
setBusy(false);
return;
}
try {
final position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
_currentPosition = LatLng(position.latitude, position.longitude);
_isCentered = true;
// Déplacer la caméra vers la position actuelle
await mapController.animateCamera(
CameraUpdate.newLatLngZoom(_currentPosition!, 15.5),
);
} catch (e) {
_currentPosition = defaultLatLng;
_isCentered = true;
await mapController.animateCamera(
CameraUpdate.newLatLngZoom(defaultLatLng, 15.5),
);
notifyListeners();
}
setBusy(false);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79391160/unable-to-get-android-location-permission[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия