μλ νμΈμ, μ΄ νλ¬κ·ΈμΈμ΄ λΈλΌμ°μ λ₯Ό ν΅ν΄ μ¬μ©μμ μμΉλ₯Ό ββμ»μ μ μλμ§ κΆκΈν©λλ€. λλ κ·Έκ²μ λν μ 보λ₯Ό μ°Ύμ§ λͺ»νμ΅λκΉ? κ·Έκ²μ νμ©νλ λ€λ₯Έ νλ¬κ·ΈμΈμ΄ μμ΅λκΉ? λμμ μ£Όμ μ 미리 κ°μ¬λ립λλ€!
μλ νμΈμ @lionelquirynen , νμ¬ μΉ νλ«νΌμ λν ꡬνμ΄ μμ΅λλ€. μ°λ¦¬λ μ΄κ²μ μ§μνκ³ ν 리νμ€νΈλ₯Ό μν΄ μ΄λ € μμ΅λλ€.
ν₯ν μ°Έμ‘°λ₯Ό μν΄ νλ¬κ·ΈμΈμ μΉ μ§μμ μΆκ°νλ λ°©λ²μ μ€λͺ νλ Flutter νμ λ κΈ°μ¬κ° μμ΅λλ€.
@mvanbeusekom λ°©λ²μ λ°°μΈ μκ°μ΄ μλ€λ©΄ μλν΄ λ³Ό μ μμ΅λλ€. μ§κΈμ js ν¨ν€μ§λ₯Ό ν΅ν΄ μ΄λ₯Ό μννλ λ°©λ²μ μ°Ύμμ΅λλ€. λκ΅°κ°κ° μ¦μ μ½λλ₯Ό μνλ©΄ μ¬κΈ°μ λΉ λ₯΄κ² μ½λλ₯Ό κ²μν©λλ€.
@JS('navigator.geolocation') // navigator.geolocation namespace
library jslocation; // library name can be whatever you want
import "package:js/js.dart";
@JS('getCurrentPosition') // Accessing method getCurrentPosition from Geolocation API
external void getCurrentPosition(Function success(GeolocationPosition pos));
@JS()
<strong i="7">@anonymous</strong>
class GeolocationCoordinates {
external double get latitude;
external double get longitude;
external double get altitude;
external double get accuracy;
external double get altitudeAccuracy;
external double get heading;
external double get speed;
external factory GeolocationCoordinates(
{double latitude,
double longitude,
double altitude,
double accuracy,
double altitudeAccuracy,
double heading,
double speed});
}
@JS()
<strong i="8">@anonymous</strong>
class GeolocationPosition {
external GeolocationCoordinates get coords;
external factory GeolocationPosition({GeolocationCoordinates coords});
}
And to call this :
success(pos) {
try {
print(pos.coords.latitude);
print(pos.coords.longitude);
} catch (ex) {
print("Exception thrown : " + ex.toString());
}
}
_getCurrentLocation() {
if (kIsWeb) {
getCurrentPosition(allowInterop((pos) => success(pos)));
}
_getCurrentLocation λ©μλλ₯Ό νΈμΆνκΈ°λ§ νλ©΄ λ©λλ€.
@lionelquirynen pubspec.yaml μ κ²μν μ μμ΅λκΉ? λ€μ νμ μΆκ°νλ €κ³ ν©λλ€. import ' package:Shared/locationJs.dart '; stackexchange μ κ²μνμ§λ§ μ€λ₯κ° λ°μν©λλ€. λ£¨νΈ μμ€μμ 곡μ ν΄λλ₯Ό μμ±νμ΅λκΉ?
μλ νμΈμ @lionelquirynenμ λλ€!
λ¨Όμ μ¬κΈ°μ μ루μ μ κ²μν΄ μ£Όμ μ κ°μ¬ν©λλ€. λΉμ μ λ©μμ§λ‘ λ§μ μ¬λλ€μκ² λμμ΄ λ κ² κ°μμ!
κ·Έλ¬λ λλ μ¬μ ν λ κ°μ§ μ§λ¬Έμ΄ μμλ€. λΉμ μ λν μ΄λ¬ν λ¬Έμ λ₯Ό κ²ͺμκ³ μ΄λ―Έ ν΄κ²°μ±
μ κ°μ§κ³ μμ μ μμ΅λλ€.
λ΄ μ§λ¬Έμ λ€μκ³Ό κ°μ΅λλ€.
1.) μΉμ¬μ΄νΈ λ°©λ¬Έμμκ² μμΉλ₯Ό 쿼리ν μ μλ κΆνμ μμ²νλ λ°©λ²μ μ΄λ―Έ μ°Ύμμ΅λκΉ?
μ±μ κ²½μ° AndroidManifest.xmlμμ Androidμ©μΌλ‘, info.plistμμ iOSμ©μΌλ‘ μ΄ μμ
μ μνν©λλ€. κ·Έλ¬λ μΉ μμ© νλ‘κ·Έλ¨μμλ μ΄λ»κ² ν΄μΌ ν©λκΉ?
2.) λ μ μ¬μ΄μ 거리λ₯Ό λ―Έν° λ¨μλ‘ κ³μ°νλ ν¨μλ₯Ό μ΄λ―Έ ꡬμΆνμ΅λκΉ?
λΉμ μ΄ λλ΅νλ€λ©΄ λλ νμ€ν κΈ°μ κ²μ λλ€! λΉμ μ λμκ² λ§μ λμμ΄ λ κ²μ λλ€!
@xpat λ€, locationJs νμΌμ΄ μλ ν΄λκ° μμ΅λλ€. μ£μ‘ν©λλ€. μ€λμμμΌ λΉμ μ λ©μμ§λ₯Ό 보μμ΅λλ€.
pubspecμ κ²½μ° μ무 κ²λ λ³κ²½λμ§ μμΌλ©° js ν¨ν€μ§λ₯Ό μΆκ°νκΈ°λ§ νλ©΄ λ©λλ€.
@LarsHenning98
μλ
,
1) μ κ° μ¬λ¦° μ½λλ‘ μΉμ κΆνμ μμ²νλ μ λ©λλ€! μΉμ©μΌλ‘ μ΄ μ½λλ₯Ό μ¬μ©νλ©΄ μλμΌλ‘ κΆνμ μμ²ν©λλ€. μνλ κ²½μ° λ΄ λͺ¨μ νλ‘μ νΈμμ μλν΄ λ³Ό μ μμ΅λλ€. https://www.nearysport.com/
2) μ, νμ§λ§ μλ² μΈ‘, ν΄λΌμ΄μΈνΈ μΈ‘μμ μ¬μ©μλ‘λΆν° μλμ κ²½λλ₯Ό κ²μν λ€μ Haversine 곡μκ³Ό κ°μ λ μ§λ¦¬μ μμΉ μ¬μ΄μ 거리λ₯Ό κ³μ°ν΄μΌ ν©λλ€.
λ΄κ° λΉμ μ μ§λ¬Έμ λλ΅νλ€λ©΄ μλ €μ£ΌμΈμ!
@lionelquirynen κ°μ¬ν©λλ€. μμ νλ‘μ νΈμμ μ΄ μμ μ μννλ λ°©λ²μ μ°ΎκΈ° μν΄ μ¬κΈ°μ κΈ° λμλ€λκ³ μμ΅λλ€. pubspec.yamlμ΄ μλνκ³ loading_screen.dart νμΌμ locationJS.dart νμΌμ κ°μ Έμμ΅λλ€. μ΄μ¨λ μ΄ μμ μ μννλ λ°©λ²μ μ½κ² μ μ μμ΅λλ€. κ·Έ λμ λλ κ³μ μ°κ²°μ λμ κ²μ λλ€. μμ κ²μνμ κ²μν λ©μμ§ λ§ν¬μ λλ€. https://www.appbrewery.co/courses/548873/lectures/9989052/comments/5326630
μ°Έκ³ λ‘ @LarsHenning98
pubspecκ³Ό λ‘λ© νλ©΄μ κ²μν μ μμ΅λκΉ?
@lionelquirynen μ, pubspec: `μ΄λ¦: clima
μ€λͺ
: μλ‘μ΄ Flutter μ ν리μΌμ΄μ
μ
λλ€.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
geolocator: ^5.3.0
js: ^0.6.1+1
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
fonts:
- family: Spartan MB
fonts:
- asset: fonts/SpartanMB-Black.otf
weight: 900`
@lionelquirynen λ° loading_screen.dart:
import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:clima/locationJS.dart';
import 'package:js/js.dart';
class LoadingScreen extends StatefulWidget {
<strong i="7">@override</strong>
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
void getCurrentPosition() async {
Position position = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.low);
print(position);
}
<strong i="8">@override</strong>
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () {
// Get the current location
},
child: Text('Get Location'),
),
),
);
}
}
λ©μλλ₯Ό νΈμΆνμ§ μλ μ΄μ λ InitStateμ λ£μ΄μΌ νλ μ΄μ μ λλ€.
@lionelquirynen λμμ μ£Όμ μ κ°μ¬ν©λλ€. λλ λΉμ (λλ λ€λ₯Έ μ¬λ)μκ² μμ‘΄ν΄μΌ νλ κ²μ μ«μ΄νμ§λ§, μ΄λ€ νμΌμ λ£κ±°λ νΈμΆν΄μΌ ν μ§ μ¬μ ν νΌλμ€λ½μ΅λλ€. λ€μμ μ 체 νλ‘μ νΈμ λν λ§ν¬μ λλ€. . κ·Έλ¦¬κ³ μ΄κ²μ λΆννλ flutter web μ΄μ μ λ§λ€μ΄μ§ Complete Flutter Development Bootcampμ 13λ²μ§Έ λͺ¨λμμ κ°μ Έμ¨ κ²μ λλ€.
λ©μλ νΈμΆμ΄ μ΄λμλ νμλμ§ μκΈ° λλ¬Έμ onpressedμμ getcurrentposition λ©μλλ₯Ό νΈμΆν μ μμ΅λλ€. μμΉ μμ²μ νΈλ¦¬κ±°νλ €λ©΄ μ΄λκ°μμ νΈμΆν΄μΌ ν©λλ€.
κ·Έκ² λ΄κ° λ§νλ κ³³μ΄μΌ. λ΄κ° λΉμ μ μ μμ μ΄ν΄νλ λ°©μμ κΈ°λ°μΌλ‘ λ΄κ° μλνλ κ²μ μ΄ν΄λ³΄κ³ μΆμ κ²½μ°λ₯Ό λλΉνμ¬ λ°©κΈ loading_screen.dart νμΌμ μ λ°μ΄νΈνμ΅λλ€. Dart Analysisμμ λ€μκ³Ό κ°μ μ 보 λ©μμ§κ° λνλ©λλ€. "' getCurrentPosition' μ μΈμ΄ μ°Έμ‘°λμ§ μκ³ js.dart λ° clima/locationJS.dart ν¨ν€μ§κ° μ¬μ©λμ§ μκ³ print(value.coords.latitude) ) λ° print(value.coords.longitude)λ νμ λ¬Όκ²°μ λ°μ€μ΄ κ·Έμ΄μ Έ μκ³ "μΈνΈ 리ν°λ΄μ λ²μ 2.2κΉμ§ μ§μλμ§ μμμ§λ§ μ΄ μ½λλ μ΄μ λ²μ μμ μ€νν μ μμ΄μΌ ν©λλ€."λΌλ λ©μμ§κ° νμλ©λλ€.
locationjsκ° μ΅μ μνμ λκΉ?
λλ λΉμ μ΄ stackoverflow μ κ²μν μ½λλ₯Ό μ¬μ©νκ³ μμ΅λλ€. κ·Έκ² λΉμ μ΄ μλ―Ένλ λ°μΈκ°μ? λλ λ€μ flutter pub getμ μ΄μν κ²μ΄μ§λ§, μ, μ΅μ μνλΌκ³ μκ°ν©λλ€.
stackoverflowκ° μλ ββgithubμ μ½λλ₯Ό λΆμ¬λ£μΌμ ¨λμ?
λ₯΄ λ²€. 28μ΄ 2020 Γ 21:53, Christophe R. Patraldo <
[email protected]> μν¬λ¦¬νΈ:
λλ λ€μ flutter pub getμ μ΄μν κ²μ΄μ§λ§, μ, μ΅μ μνλΌκ³ μκ°ν©λλ€.
β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/Baseflow/flutter-geolocator/issues/392?email_source=notifications&email_token=ANUIRZMOEPTHHNBI7NDU3G3RFF2TJA5CNFSM4KURNFD2YYY3PNVWWK3TUL52HS4DFVEXG43VMVBW63
λλ ꡬλ μ·¨μ
https://github.com/notifications/unsubscribe-auth/ANUIRZLLEKQ2CKHF2A7VUIDRFF2TJANCNFSM4KURNFDQ
.
λ΄ λ§μ .dart
μμ githubμ κ²μν μ½λλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. stackoverflowμ λν λ΅λ³μ μ λ°μ΄νΈν΄μΌ ν©λλ€.
μ΄ν΄νκΈ° μ½κΈ° λλ¬Έμ stackoverflow μ½λμ μ§μ€νμ΅λλ€. νμ§λ§ μ΄μ Githubμ μ½λλ‘ loading_screen.dart λ° locationJS.dart νμΌμ μ λ°μ΄νΈνμ΅λλ€. '_LoadingScreenState' ν΄λμ€μ λν΄ 'success' λ©μλκ° μ μλμ§ μμκ³ '_LoadingScreenState' ν΄λμ€μ λν΄ '_getCurrentLocation' λ©μλκ° μ μλμ§ μμμ΅λλ€.
@JS('navigator.geolocation')
library jslocation;
import 'package:js/js.dart';
@JS('getCurrentPosition')
external void getPosition(Function success(GeolocationPosition pos));
@JS()
<strong i="6">@anonymous</strong>
class GeolocationCoordinates {
external double get latitude;
external double get longitude;
external double get altitude;
external double get accuracy;
external double get altitudeAccuracy;
external double get heading;
external double get speed;
external factory GeolocationCoordinates(
{double latitude,
double longitude,
double altitude,
double accuracy,
double altitudeAccuracy,
double heading,
double speed});
}
@JS()
<strong i="7">@anonymous</strong>
class GeolocationPosition {
external GeolocationCoordinates get coords;
external factory GeolocationPosition({GeolcationCoordinates});
}
import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:clima/locationJS.dart';
import 'package:js/js.dart';
class LoadingScreen extends StatefulWidget {
<strong i="5">@override</strong>
_LoadingScreenState createState() => _LoadingScreenState();
}
class _LoadingScreenState extends State<LoadingScreen> {
void getCurrentPosition() async {
success(pos);
try
{
print(pos.coords.latitude);
print(pos.coords.longitude);
} catch (ex) {
print("Exception thrown: " + ex.toString());
}
}
<strong i="6">@override</strong>
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () {
// Get the current location
_getCurrentLocation();
},
child: Text('Get Location'),
),
),
);
}
}
μ¬μ© λ°©λ²μ githubμμ λ΄ μ½λλ₯Ό μ°Έμ‘°νμΈμ.
λ΄κ° λ°λ μ€λ₯λ Github(μ)μ κ²μν μ½λλ₯Ό μ¬μ©ν ν λ°μν©λλ€. λλ κ·Έ μ½λλ₯Ό λ΄ νλ‘μ νΈμ μ νν μ΄λ»κ² μΆκ°ν΄μΌ ν μ§ λͺ°λΌ ν€λ§Έμ΅λλ€. μλ₯Ό λ€μ΄, μ±κ³΅μΌλ‘ μμνλ λΆλΆμ μ΄λμ λ£λμ? μ¬κΈ°μ λ£μ΄ 보μμ΅λλ€.
ν΄λμ€ _LoadingScreenState νμ₯ μν {
λ¬΄ν¨ getCurrentPosition() λΉλκΈ° {
μ±κ³΅(ν¬μ§μ
);
λ
Έλ ₯νλ€
{
μ 체 νλ‘μ νΈ μ½λκ° ν¬ν¨λ κ³΅κ° λ¦¬ν¬μ§ν λ¦¬κ° μμ΅λκΉ?
μλμ, 곡κ°λμ§λ μμμ§λ§ μμ μ½λλ₯Ό κ²μνμ΅λλ€.
μ±κ³΅(ν¬μ§μ
) {
λ
Έλ ₯νλ€ {
μΈμ(pos.coords.latitude);
μΈμ(pos.coords.longitude);
} μ‘κΈ°(μμ) {
print("μμΈ λ°μ: " + ex.toString());
}
}
_getCurrentLocation() {
if (kIsWeb) {
getCurrentPosition(allowInterop((pos) => μ±κ³΅(pos)));
}λ λ€λ₯Έ{
// μμΉ κ°μ Έμ€κΈ° Ios Android
}
}
λ°λΌμ μ΄ μ½λλ₯Ό 볡μ¬νμ¬ λΆμ¬λ£κ³ onPressed λ©μλμμ _getCurrentLocation()μ νΈμΆνκΈ°λ§ νλ©΄ λ©λλ€.
μ΄ μ½λλ locationJS.dart νμΌμ΄λ loading_screen.dartμ λ€μ΄κ°λμ?
`κ·Έλ¦¬κ³ μ΄κ²μ νΈμΆνλ €λ©΄ :
μ±κ³΅(ν¬μ§μ
) {
λ
Έλ ₯νλ€ {
μΈμ(pos.coords.latitude);
μΈμ(pos.coords.longitude);
} μ‘κΈ°(μμ) {
print("μμΈ λ°μ: " + ex.toString());
}
}
_getCurrentLocation() {
if (kIsWeb) {
getCurrentPosition(allowInterop((pos) => μ±κ³΅(pos)));
}`
loading_screenμμ ! μ΄λ»κ² μλνλμ§ μ΄ν΄νμ ¨λμ?
λμ°©ν μλ μμ΅λλ€. λ°©κΈ Dart Analysis(Android Studio)κ° Function Function(GeoLocationPosition pos)μ μμ±νλλ‘ νμ΅λλ€. get success => null; λ΄κ° 무μμ ν μ μλμ§ μμλ³΄κ² μ΅λλ€. νμ§λ§ μλμ, λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ ν μ΄ν΄νμ§ λͺ»ν©λλ€. μΉμμ μμΉ μ 보λ₯Ό μ»λ μ΄ λ¬Έμ λ μ μκ² μ λ§ μ΄λ €μ΄ λμ μ΄μμ΅λλ€. Flutter Bootcampμμ μ΅μνμ κ²λ§ λ°°μ΄ κ² κ°μ λλμ΄ λ€ λκ° μμ΅λλ€.
κ·Έλμ λ΄κ° μ±κ³΅μΌλ‘ μμνλ μ€μ μΆκ°νλ©΄ μ, κ·Έκ²μ μμ ν μνμ°©μ€μ λλ€. μ΄λμ λ£μ΄μΌ ν μ§ λͺ¨λ₯΄κ² μ΅λλ€.
μ§ν μ€μ λλ€. λ§μΉ¨λ΄ κΆν μ°½μ λμ°λ μ½λλ₯Ό μ»μμ΅λλ€. κ·Έλ¦¬κ³ μ½μμ λ©μμ§λ₯Ό μΈμνκ³ μμ΅λλ€. λμκ³Ό κ²©λ €μ κ°μ¬λ립λλ€. λλ κ·Έκ²μ΄ λ§μΉ¨λ΄ μλνκΈ° μμνλ€κ³ μκ°νκ³ , μΌλ¨ μλνλ©΄ μ΄ν΄νλ €κ³ λ Έλ ₯ν κ²μ λλ€. μ΄ μ§μ€λ‘μΌμ΄ν° νλ¬κ·ΈμΈμ΄ νλ¬ν° μΉμ©μΌλ‘ μ λ°μ΄νΈλκΈ°λ₯Ό λ°λλλ€. κ·Έλμ μκ° λ΄μ£Όμ μ λ€μ ν λ² κ°μ¬λ립λλ€. @lionelquirynen
μ’μ μλ²½ν΄! λ무 νΌλμ€λ¬μνμ§ μκΈ°λ₯Ό λ°λλλ€. μλ΄κ° νμνλ©΄ μλ €μ£ΌμΈμ!
λ€μμ μΉμμ μλνλ ꡬνμ
λλ€.
https://github.com/AseemWangoo/experiments_with_web
https://fir-signin-4477d.firebaseapp.com/#/location (μ
μ€)
νλ¬κ·ΈμΈμΌλ‘ λλ κ·Έλλ‘ ν΅ν©ν μ μμ΅λλ€. κ·Έλλ‘λΌλ©΄ kIsWeb μ μ¬μ©νμΈμ.
νλ¬ν° μΉμμ μ¬μ©μ μμΉλ₯Ό μ»κ³ μΆμ§λ§ Mozilla GeoLocationμ΄ μλνμ§ μμ΅λλ€ !!! λκ΅°κ° μ λ₯Ό λμΈ μ μμ΅λκΉ?
μ΄κ²μ StackOverFlowμ λν μ μ§λ¬Έμ
λλ€. https://stackoverflow.com/questions/64411270/flutter-web-get-location-on-web-by-location-plugin
μ΄ ν¨ν€μ§μ μΉ μ§μμ λν μμμ΄λ μμμ΄ μμ΅λκΉ?!
@mvanbeusekom
κ°μ₯ μ μ©ν λκΈ
@mvanbeusekom λ°©λ²μ λ°°μΈ μκ°μ΄ μλ€λ©΄ μλν΄ λ³Ό μ μμ΅λλ€. μ§κΈμ js ν¨ν€μ§λ₯Ό ν΅ν΄ μ΄λ₯Ό μννλ λ°©λ²μ μ°Ύμμ΅λλ€. λκ΅°κ°κ° μ¦μ μ½λλ₯Ό μνλ©΄ μ¬κΈ°μ λΉ λ₯΄κ² μ½λλ₯Ό κ²μν©λλ€.
_getCurrentLocation λ©μλλ₯Ό νΈμΆνκΈ°λ§ νλ©΄ λ©λλ€.