#flutter #api #geolocation #location #flutter-getx
Вопрос:
Я хочу найти пользователя и отправить координаты его местоположения через api на сервер, пожалуйста, ответьте кодом, я пробовал library geolocator: ^ 7.7.0
void getCurrentLocation() async {
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
var lat = position.latitude;
var long = position.longitude;
print("Latitude: $lat and Longitude: $long");
}
Этот код не работает, ошибка:
[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: MissingPluginException(No implementation found for method getCurrentPosition on channel flutter.baseflow.com/geolocator)
E/flutter (25476): #0 MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:156
E/flutter (25476): <asynchronous suspension>
E/flutter (25476): #1 MethodChannelGeolocator.getCurrentPosition (package:geolocator_platform_interface/src/implementations/method_channel_geolocator.dart:128:27)
E/flutter (25476): <asynchronous suspension>
E/flutter (25476): #2 getCurrentLocation
package:check_time/Screens/fingerprint_Screen.dart:84
E/flutter (25476): <asynchronous suspension>
Комментарии:
1. запустите flutter doctor и добавьте сюда экраны
Ответ №1:
Попробуйте перезапустить приложение! с этого момента должно работать. Горячий перезапуск не будет работать при добавлении плагинов.
Комментарии:
1. больше не работает * Что пошло не так: не удалось выполнить задачу ‘:geolocator_android:compileDebugJavaWithJavac’. > Сбой компиляции; подробности см. В выводе ошибки компилятора. * Попробуйте: запустите с параметром —stacktrace, чтобы получить трассировку стека. Запустите с параметром —info или —debug, чтобы получить больше выходных данных журнала. Запустите с помощью —scan, чтобы получить полную информацию. * Получите дополнительную помощь на help.gradle.org ОШИБКА СБОРКИ в исключении 49s: ошибка сборки assembleDebug задачи Gradle с кодом выхода 1
2. вы следовали инструкциям для Android? попробуйте flutter clean тоже!
3. обновление компилирует dkversion 31 здесь android app build.gradle
Ответ №2:
Создайте приложение заново. Попробуйте этот код.
Future<void> getCurrentLocation() async {
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy:LocationAccuracy.high);
double lat = position.latitude;
double long = position.longitude;
print("Latitude: $lat and Longitude: $long");
}
Комментарии:
1. не работает * Что пошло не так: не удалось выполнить задачу ‘:geolocator_android:compileDebugJavaWithJavac’. > Сбой компиляции; подробности см. В выводе ошибки компилятора. * Попробуйте: запустите с параметром —stacktrace, чтобы получить трассировку стека. Запустите с параметром —info или —debug, чтобы получить больше выходных данных журнала. Запустите с помощью —scan, чтобы получить полную информацию. * Получите дополнительную помощь на help.gradle.org ОШИБКА СБОРКИ за 30 секунд Исключение: ошибка сборки assembleDebug задачи Gradle с кодом выхода 1
2. измените версию geolocator на 7.6.2
3. не сработало * Что пошло не так: не удалось выполнить задачу ‘:geolocator_android:compileDebugJavaWithJavac’. > Сбой компиляции; подробности см. В выводе ошибки компилятора. * Попробуйте: запустите с параметром —stacktrace, чтобы получить трассировку стека. Запустите с параметром —info или —debug, чтобы получить больше выходных данных журнала. Запустите с помощью —scan, чтобы получить полную информацию. * Получите дополнительную помощь на help.gradle.org ОШИБКА СБОРКИ за 10 секунд Исключение: ошибка сборки assembleDebug задачи Gradle с кодом выхода 1
Ответ №3:
Эта ошибка обычно возникает, если вы не внесли изменения в приложение в соответствии с требуемой платформой приложения.
т.е. android, iOS, Web
ПЕРЕЙДИТЕ к пакету в описании пакета в разделе Usage
следуйте инструкциям по реализации для платформы, которую вы создаете
Ответ №4:
Есть несколько полезных шагов, которым вы должны следовать, которые упомянуты в readme пакета. Обновить
androidappbuild.gradle
android {
compileSdkVersion 31
...
}
Ответ №5:
Попробуйте приведенный ниже код, надеюсь, он вам поможет, обратитесь к геолокатору здесь и геокодированию здесь, чтобы получить широту и долготу и название вашего местоположения
Создайте позицию и одну переменную для вашей текущей позиции и метода init()
Position? _currentPosition;
String? _currentAddress;
void initState() {
super.initState();
getCurrentLocation();
}
Функция для получения широты и долготы
getCurrentLocation() {
Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.best,
forceAndroidLocationManager: true)
.then((Position position) {
setState(() {
_currentPosition = position;
print(position.latitude);
print(position.longitude);
_getAddressFromLatLng();
});
}).catchError((e) {
print(e);
});
}
Функция определения местоположения по вашей широте и долготе
_getAddressFromLatLng() async {
try {
List<Placemark> placemarks = await placemarkFromCoordinates(
_currentPosition!.latitude, _currentPosition!.longitude);
Placemark place = placemarks[0];
setState(() {
_currentAddress = "${place.subLocality}";//here you can used place.country and other things also
print(_currentAddress);
});
} catch (e) {
print(e);
}
}
Ваш виджет:
Column(
children: [
if (_currentPosition != null amp;amp; _currentAddress != null)
Text(
_currentAddress!,
style: TextStyle(
fontWeight: FontWeight.bold,
letterSpacing: .5,
fontSize: 15,
color: Colors.black,
),
),
],
)
Добавьте нижеприведенные строки внутри androidappsrcmainAndroidManifest.xml
файла над application
тегом
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Перейдите в androidappbuild.gradle
файл и измените изменения ниже
compileSdkVersion 31
minSdkVersion 21
targetSdkVersion 29
Комментарии:
1. * Что пошло не так: не удалось выполнить задачу ‘:geolocator_android:compileDebugJavaWithJavac’. > Сбой компиляции; подробности см. В выводе ошибки компилятора. * Попробуйте: запустите с параметром —stacktrace, чтобы получить трассировку стека. Запустите с параметром —info или —debug, чтобы получить больше выходных данных журнала. Запустите с помощью —scan, чтобы получить полную информацию. * Получите дополнительную помощь на help.gradle.org ОШИБКА СБОРКИ за 32 секунды Исключение: ошибка сборки assembleDebug задачи Gradle с кодом выхода 1
2. @HamZa посмотрите мой обновленный ответ и измените некоторый код в
androidappbuild.gradle
файле иre-run
вашем приложении и дайте мне знать