Створити

Як же я втомивсь

Сиджу пишу диплом. Виявилось шо у стандартній бібліотеці для геолокації у Flutter не працює фонова геолокація. А саме цей пакет і ось цей

Я почав гуглити, і перше шо трапилось на очі це ось ця платна параша. Я не вникав, але на Medium писали шо воно шось під 300 баксів коштує (пішли вони в сраку).

Далі я вирішив погуглити ще. Були варіанти з викликом у фоні через Workmanager, але ця хрінь в мене не запрацювала взагалі. 

Я продовжив гуглити (я не вірив шо ніхто не зробив для бідних програмістів безкоштовне нормальне рішення). Я мої сподівання справдились. Я знайшов робоче рішення, але воно забаговане трошки. 

В чому власне баги? Ну в першу чергу в мене чомусь виявилось шо minFlutterSdk було 16, а ця бібліотека вимагала 18. Ну я поміняв у файлі build.gradle на 18. Далі вилізла наступна помилка:
execution failed for task ':background_location:compiledebugkotlin'.
Вирішилось воно тим, що у знаменитому кожному Dungeon Flutter Developer файлі pubspec.yaml треба було трішки нестандартно прописати залежність для бібліотеки. Замість стандартного background_location: ^0.8.1 треба було писати отак от  
background_location:
  git:
    url: https://github.com/Almoullim/background_location.git
    ref: master
Тоді всі ЯВНІ помилки були знайдені і вбиті пострілом в ногу. Але ж користувацькі бібліотеки не були б безкоштовними, якби не приховані баги. В даному випадку це абсолютно незрозуміла робота методу для разового визначення поточної позиції користувача. Він то працював, то не працював. Певно залежить від положення Меркурія відносно Марсу. 

Власне ось цей забагований метод 

BackgroundLocation().getCurrentLocation().then((location) {

print("Current location is: ${location.latitude} : ${location.longitude}");

});

Якщо вже дуже хочеться отримати поточну локацію один раз, а не регулярно, то краще все таки брати стандартні бібліотеки вказані вище. 

Якщо вам треба буде зі стандартних бібліотек  взяти місцезнаходження і всунути в змінну location із методу вище (в неї тип Location. В бібліотеках вище використовуються типи Position і LocationData, тому просто так прирівняти змінні не вдасться), то для цього можна банально створити новий об'єкт на основі даних з отриманих локацій. 

Виглядатиме це десь отак:

LocationData locData *ну і як там далі по методичці*

Location location = Location(latitude: locData.latitude, longtitude: locData.longtitude);

Загалом це всі баги які я знайшов за 10 хвилин колупання. Геолокація у фоні працює наче добре, але ще не перевіряв у польових умовах свого села.

Отака хуйня малята

4 коментарі

Увійдіть, щоб коментувати.
Оцінити
Поскаржитись

В мене взагалі ідея з цього диплому зробити прибутковий стартап. Але сумніваюсь що впораюсь сам, бо плани аж надто амбітні

Оцінити
Поскаржитись

Не знаю как мне это может помочь але добре