HimarsTime HimarsTime 26 травня 2023, 23:44

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

Сиджу пишу диплом. Вияви­лось шо у стан­дар­тній бібліо­те­ці для гео­ло­ка­ції у 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/​A​l​m​o​u​l​l​i​m​/​b​a​c​k​g​r​o​u​n​d​_​l​o​c​a​t​i​o​n.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
  • 4
  • 5

4 коментарі

    • HimarsTime HimarsTime 3 роки тому · Автор

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

      • 0