getCurrentLocationì ìëíë©Ž íŽê²°ëì§ ììµëë€. ëë IOSì ëí ì 묞ê°ê° ìëë¯ë¡ 묎ìžê°ë¥Œ ììŽ ë²ëŠ° ê²œì° ì ìê² ì€ëª íììì€.
Future<Position> getCurrentPosition({
LocationAccuracy accuracy = LocationAccuracy.best,
GeolocationPermission geolocationPermission =
GeolocationPermission.location,
}) =>
_geolocator.getCurrentPosition(
desiredAccuracy: accuracy,
locationPermissionLevel: geolocationPermission,
);
ííìŒ:
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1',
]
ì 볎.plist:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need location when in use</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Always and when in use!</string>
<key>NSLocationUsageDescription</key>
<string>Older devices need location.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Can I haz location always?</string>
ížì§íë€:
ì€ì Android êž°êž°ìì í ì€ížíëë° ë¬žì ë ë°ìíê³ ììµëë€.
ëŽ ë§€ëíì€íž ìì¹ ê¶í:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
í¬ì§ì ì ë°íí©ëë€.
geolocator.GetCurrentPositionì ížì¶íêž°ë§ íë©Ž ë©ëë€.
ë²ì : 5.1.5.
íë«íŒ:
ê°ì ì€ë¥ê° ë°ìí©ëë€. ìŽê²ì iOSì Android 몚ëìì ë°ìí©ëë€ .....
iOS 10.3 ëë iOS 13.4 륌 ì€ííë ì뮬ë ìŽí° ì iOS 13.4 ê° ì€ì¹ë iPad ììë ëìŒí ì€ë¥ê° ë°ìí©ëë€.
mycode.dart:
Position pos = await Geolocator()
.getCurrentPosition(
locationPermissionLevel:
GeolocationPermission.locationWhenInUse,
desiredAccuracy: LocationAccuracy.high)
ì 볎.plist:
<key>NSLocationAlwaysUsageDescription</key>
<string>Can I haz location always?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need location when in use</string>
ë²ì : 5.3.1
Android 8.0ììë ëìŒí 묞ì ê° ë°ìí©ëë€. ëë¬íë©Ž ë°ìíë ìì€ ìœëì ì§ì 10ìŽ íìŽëšžë¥Œ ìì±íë ê²ì ê³ ë €í©ëë€.
@brenoasm ì뮬ë ìŽí° ëë ì€ì ì¥ì¹ìì ìŽ ë¬žì ê° ë°ìíê³ ììµëê¹?
@dammel ì뮬ë ìŽí°ìì ìì¹ë¥Œ ë°©ì¶íëë¡ ì뮬ë ìŽí°ë¥Œ 구ì±íë ê²ìŽ ì€ìí©ëë€. ìŽê²ì ì뮬ë ìŽí° ì í늬ìŒìŽì ì ë€ì ë©ëŽ í목ì ì¬ì©íì¬ ìíí ì ììµëë€. êž°ë¥ -> ìì¹ ->("ìì" ìŽìžì ìµì ì í).
@mvanbeusekom ì€ì êž°êž°ê° ìì¹ë¥Œ ëŽë³ŽëŽì§ ìëë€ë©Ž? ì¬ì©ìê° GPS륌 ëë©Ž ì ëê² ì£ ?
@mvanbeusekom IOSì© ì뮬ë ìŽí°ìì í ì€ížíìµëë€(ì€ì ì¥ì¹ìì í ì€íží iPhoneìŽ ììµëë€). ì€ì Android êž°êž°ìì í ì€ížíëë° ê°ì 묞ì ê° ë°ìíìµëë€. Android êž°êž° ì 볎륌 ìì íê³ ì¶ê°íê² ìµëë€.
ëë ì€ì ìëë¡ìŽë ì¥ì¹ì ê°ì 묞ì ê° ììµëë€ ...
@mvanbeusekom ëì죌ì
ì ê°ì¬í©ëë€. ì뮬ë ìŽí°ì ëí ê·íì Tippê° ì ìê² íšê³Œì ìŽììµëë€.
ëë ì묎 ê²ë ë³ê²œíì§ ììì§ë§ ìŽì iPad(ì€ì ì¥ì¹)ìì ë€ì ìëí©ëë€.
iOS ì뮬ë ìŽí°ì iOS êž°êž°ìì í ì€íží 결곌 묞ì ë ììì§ë§ Android ì뮬ë ìŽí°ììë ëìŒí 묞ì ê° ë°ìíìµëë€.
ëë ëì 겜ì°ë¥Œ ììží ì€ëª íë €ê³ ë žë ¥í ê²ìŽë€.
첫짞, 묞ì ë Android ë° iPhone ì¥ì¹(QA í곌 íšê» ì±ì í ì€ížíêž° ìíŽ Testflight륌 ì¬ì©íê³ ìì)ìì ë°ìíì§ë§ Android Emulator ë° iOS ì뮬ë ìŽí°ììë ë°ìí©ëë€.
'getCurrentPosition' ë©ìëë ëëë¡ ìì¹ë¥Œ ë°ííì§ ìì§ë§ ì°ìì ìž ìë íìë ìì¹ë¥Œ ë°íí©ëë€. ëë ìŒë°ì ìŒë¡ ì±ì ì²ì ì€ì¹í ëìŽ ë¬žì ê° ììµëë€. ìŒì ìê°ìŽ ì§ëë©Ž ê°ìêž° ë©ìëê° íì¬ ìì¹ë¥Œ ê°ì žì€êž° ììí©ëë€.
ìŽ ë¬žì ì 묞ì ë íì ë°ìíì§ ìëë€ë ê²ì ëë€. ì±ì ì€ì¹í ì ììŒë©° ëë¡ë 첫 ë²ì§ž ìëìì íì¬ ìì¹ë¥Œ ë°ííë ë©ìë륌...
ì¶ê° ì°žê³ ì¬í:
ëŽ í겜:
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[â] Flutter (Channel stable, v1.12.13+hotfix.9, on Linux, locale en_GB.UTF-8)
[â] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[â] Android Studio (version 3.6)
[â] IntelliJ IDEA Community Edition (version 2019.3)
[â] Connected device (2 available)
⢠No issues found!
ëŽ íë¡ì ížì ìì ì룚ì :
#375ì #386ìŽ ìŽ ë¬žì ì êŽë šìŽ ìë ê² ê°ìµëë€.
LG G6, Android 9.0ììë ëìŒí 묞ì ê° ë°ìí©ëë€.
ì ë íŽê²°íì§ ììµëë€.
ìëíê² íë ìŽìí ë°©ë²ìŽ ììµëë€.
ìì¹ë¥Œ íìžíêž° ìíŽ Google ì§ë ì±ì ììí©ëë€. ìŽë¥Œ ìíŽ ìì¹ ìŒìì Wi-Fi륌 íì±ííŽìŒ í©ëë€(ìë§ë 몚ë°ìŒ ë°ìŽí° ì°ê²°ë ìëíì§ë§ í
ì€ížëì§ë ìì).
ê·žëì êµ¬êž ì§ëìì ìì¹ë¥Œ ììëìµëë€.
ê·ž íì ëŽ ì±ììë ìëí©ëë€(ëì€ì ëŽ ì±ìŽ ììëìê±°ë ìŽë¯ž ì€í ì€ìžì§ ì¬ë¶ì êŽê³ììŽ).
Wi-Fi륌 ì¢
ë£íê±°ë ìì¹ë¥Œ ëë©Ž ë€ì ìŒë ë ìŽì ìëíì§ ììµëë€.
ëŽ ì±ìŽ ìŽëŠ¬êž° ì ìë ìžì ë ì§ Google ì§ë륌 ë«ìë ìêŽ ììµëë€(íì§ë§ ëë¡ë Google ì§ë륌 ë ë² ìŽì ìŽìŽìŒ í©ëë€.)
Google ì§ëë ì§ëê° ë«í íìë ì§ìëê³ ì§ëŠ¬ ìì¹ ì¶ì êž°ì íìí 묎ìžê°ë¥Œ ì€ì íë ê² ê°ìµëë€.
ìì /ìì :
íšì¬ ë ë³µì¡í©ëë€. Google ì§ë륌 ì¬ì©í ì ì°šë "desiredAccuracy"ì ëí 몚ë ìžìì íšê» ìëíì§ë§ Wi-Fi륌 ì íí ë ë ê°ì§ ë²ì£Œê° ìììµëë€.
ì¬ë¶í í ì¥ì¹ ìì¹ê° ë ìŽì íìžëì§ ììµëë€. ë°ëŒì Google ì§ë륌 ì¬ì©íì¬ ìì¹ ê°ì žì€êž°ë¥Œ ë°ë³µíŽìŒ íë©° ì€ëª ëë¡ ë€ì ìëí©ëë€.
(ì±ì ìë¡ ì€ì¹í í ê¶í ëí ììê° ë€ë¥Žê² íìëê³ "ë€ì ë¬»ì§ ìì" íìžëìŽ ìì§ë§, ëí ììê° ì²ì íìë ëë§ íŽë¹ ëí ììê° íìëê³ ê·ž ìŽíìë íì íìžëìŽ ìë ëìŒí ëí ìì)
ëìŒí 묞ì , Android 10, OnePlus 7 Pro.
ììì ì€ëª
í Google ì§ëì ížëŠì ì ìê² íšê³Œê° ììì§ë§ ìŽë»ê² ë ìê°ìŽ ì§ëë©Ž í¹ì ìì
ì ìííì§ ìê³ ë ìì¹ê° íŽê²°ëêž° ììíìµëë€. ë°©êž ëžëŒì°ì ìì ìŽì ì ìŽëŠ° íìŽì§ë¥Œ ìœì ë€ì ëŽ ì±ìŒë¡ ë€ì ì ííì¬ ìì¹ë¥Œ ìë €ì£Œë ëí ìì륌 볎ììµëë€. ëí ììë 믞ëê° íŽê²°ë ë íìëëë¡ ì€ì ëìŽ ììŒë¯ë¡ ê²°êµ íŽê²°ëìì§ë§ ìê°ìŽ ê±žë žìµëë€. . ê·ž í ìì¹ë 몚ë ìëìì ì íŽê²°ëììµëë€.
ììì ìžêžíë¯ìŽ ì¬ë¶í
í ìì¹ê° ë ìŽì íìžëì§ ììµëë€.
ì뮬ë ìŽí°ììë 몚ë ê²ìŽ ì ìëí©ëë€.
@SchmadenSchmuki ì ë©ìì§ ìŽíì ëë ëŽ íë¡ì ížìì ëª ê°ì§ í ì€ížë¥Œ íê³ ìŽê²ìŽ ëŽ ê²°ë¡ ì ëë€. Geolocator íë¬ê·žìžì ìí¥ì 믞ì¹ë Google ì§ë íë¬ê·žìžì 묞ì ê° ììµëë€. ê·žë€ ì¬ìŽìë ë¹ížíì±ìŽ ììµëë€.
ìŽê²ì ì²ì ììí ë ëŽ ì±ì íëŠì ëë€.
ìŽ íëŠììë ì±ìŽ ì€íší©ëë€. Geolocatorì 'getCurrentPosition()' ë©ìëë ì€íšíê³ ê°ì ë°ííì§ ììµëë€. ì°žê³ : 'isLocationServiceEnabled()' ë° 'getLastKnownPosition()' ë©ìëë ì ëë¡ ìëí©ëë€.
íì§ë§ íëŠì ë€ì곌 ê°ìŽ ë³ê²œíë©Ž
íšê³Œê°ìë€!!!!!
ê·žëì ëŽ ê²°ë¡ ì ìŽë€ ì ìŒë¡ë Google Maps íë¬ê·žìžìŽ ë€ë¥ž íë¬ê·žìžìŽ ì§ëŠ¬ì ìì¹ ìë¹ì€ë¥Œ ì¬ì©íë ê²ì ì°šëšíë "묎ìžê°"륌 ì ì íë€ë ê²ì ëë€. Google ì§ëê° ë ëë§ëë©Ž íŽë¹ "묎ìžê°"ê° íŽì ëê³ ëªšë ì¬ëìŽ ë¬žì ììŽ ìì í ì ììµëë€.
ë€ë¥ž ì¬ëìŽ íìží ì ìë€ë©Ž Flutter ì¬ì©ììê² ë¬žì 륌 ìŽìŽ ìŽë¥Œ íìží ì ììµëë€.
@KnucklesEQ êŽë²ìí ë³Žê³ ì ê°ì¬ë늜ëë€. ìŽ ë¬žì ì ëë²ê¹ ì ììíê³ ë¬žì 륌 ì¬ííê³ íŽê²°íë ë° ë ë§ì ìê°ì í ì í ê²ì ëë€. ì¬êž° ìë ë€ë¥ž ì¬ëë€ë 몚ë Google ì§ë íë¬ê·žìžì ì¬ì©íê³ ìëì§ íìží ì ìë€ë©Ž ë§€ì° ëììŽ ë ê¹ì?
ê·žëë ì¬ë¬ ê°ì§ 묞ì ê° ìë€ê³ ìê°í©ëë€(Android 9 + Android 10ì ì°šìŽì , iOSë Google ì§ëì íšê» Geolocator륌 ì¬ì©íì¬ ìì¹ë¥Œ ë°ííë ë° ëª ìŽê° ììëš). 몚ë 묞ì ì ìŽì ì ë§ì¶ê³ ê°ë¥íì§ íìžíê² ìµëë€. ìí©ì ê°ì í©ëë€. ìê°ìŽ ì¢ ê±žëŠ¬ë¯ë¡ ìµì ì ë€íê³ ì§í ìí©ì ëí ì ë°ìŽížë¥Œ ì¬êž°ì ëšêž°ë €ê³ ë žë ¥íë ëì ìíŽíŽ 죌ììì€.
ì§ë íë¬ê·žìžì ì¬ì©íì§ ììµëë€. ì±ìŽ ì€í ì€ìŒ ëë§ ê¶íì ë¶ì¬íë©Ž(locationWhenInUse), ë€ìì ìì²í ë ì±ìŽ íìëì§ ìê³ íŽê²°ëì§ ììµëë€(Androidë§ íŽë¹, IOSììë ìŽ ë¬žì 륌 ì° ìŽíë¡ ìëíì§ ìì).
Google ì§ë íë¬ê·žìžì ì¬ì©íì§ ììµëë€.
Google ì§ë íë¬ê·žìžë ì¬ì©íì§ ììµëë€.
(묞ì ê° ìì ë Google ì§ë ì±ìë ìì¹ë¥Œ ê°ì žì€ë ë° ë¬žì ê° ìëì§ íìží ë€ì íŽë¹ ìì¹ë¥Œ ê°ì žì€ë ê²ìŽ ëŽ ì±ì ìí¥ì 죌ë ê²ìŒë¡ ëíë¬ìµëë€.)
ììží ëŽì©ì:
묞ì ë ë€ì ì¡°ê±ŽìŽ ì°žìŒ ë ë°ìí©ëë€.
ìœë륌 íµíŽ ì¶ì íëë° ì²ì 2ê°ì§ 조걎ìì ì íëë ìì¹ ê³µêžìë 'gps'ìŽê³ ì¥ì¹ë ëŽë¶ì GPS ì ížë¥Œ ì íí ì ììµëë€. ëë ë°ìœëë¡ ëê°ê³ ê±°ì ìŠì 몚ë ê²ìŽ ì ìì ìŒë¡ ìëíêž° ììíìµëë€.
ìì¹ ì íëê° ìì¹ ê³µêžì ì íì ìŽë€ ìí¥ì 믞ì¹ëì§ ìì볎Ʞ ìíŽ ìì¹ ì íë륌 ê°ì§ê³ ëì§ ììì§ë§ ê³µêžìê° (íëìœë©ì íµíŽ) 'ë€ížìí¬'íëë¡ ê°ì ë¡ ìëíìµëë€. ê·žê²ì ìëíì§ë§ ê²ìë ìì¹ì ì íëë ë¶ëª í ~1080믞í°ë¡ ê·žë€ì§ ì¢ì§ ìììµëë€.
@minusminuszero ê° ë§ìµëë€. ì ìê²ë ë§ì°¬ê°ì§ì
ëë€.
ë°ëŒì ì¬ë¶í
ì§íìë ì ìì ìŒë¡ ìëíê³ ììµëë€. ë¶ížì ëë € ì£ì¡í©ëë€.
(ì ë ìì¹ êŽëŠ¬ì륌 ì€ì íì§ ìììŒë¯ë¡ ì 겜ì°ìë forceAndroidLocationManager = falseì
ëë€. ì ë LocationAccuracy.best륌 ì¬ì©íê³ LocationAccuracy.highììë ìëí ê²ìŽëŒê³ ì¶ìž¡í©ëë€. ìŽ ê²œì° locationsymbolìŽ ë ë®ì ì íëììë ìëíì§ ìì ê²ì
ëë€. ìí íìì€ì íìëì§ ìì§ë§ ìŽë¯ž 묞ì ê° ììµëë€.)
ì¬ííë ê²ê³Œ ëê°ì ëšê³(ëŽë¶, Ʞ볞 ìì¹ acc ë±)륌 ì¬ì©íì¬ ìì ê°ì íìì 겜ííê³ ììµëë€.
ììží ëŽì©ì:
묞ì ë ë€ì ì¡°ê±ŽìŽ ì°žìŒ ë ë°ìí©ëë€.
- ìì¹ êŽëŠ¬ì륌 ì¬ì©íê³ ììµëë€(Geolocator().forceAndroidLocationManager = true)
- ì ë LocationAccuracy.bestìž êž°ë³ž ìì¹ ì íë륌 ì¬ì©íê³ ììµëë€.
- ëë ìììë€
ìœë륌 íµíŽ ì¶ì íëë° ì²ì 2ê°ì§ 조걎ìì ì íëë ìì¹ ê³µêžìë 'gps'ìŽê³ ì¥ì¹ë ëŽë¶ì GPS ì ížë¥Œ ì íí ì ììµëë€. ëë ë°ìœëë¡ ëê°ê³ ê±°ì ìŠì 몚ë ê²ìŽ ì ìì ìŒë¡ ìëíêž° ììíìµëë€.
ìì¹ ì íëê° ìì¹ ê³µêžì ì íì ìŽë€ ìí¥ì 믞ì¹ëì§ ìì볎Ʞ ìíŽ ìì¹ ì íë륌 ê°ì§ê³ ëì§ ììì§ë§ ê³µêžìê° (íëìœë©ì íµíŽ) 'ë€ížìí¬'íëë¡ ê°ì ë¡ ìëíìµëë€. ê·žê²ì ìëíì§ë§ ê²ìë ìì¹ì ì íëë ë¶ëª í ~1080믞í°ë¡ ê·žë€ì§ ì¢ì§ ìììµëë€.
"ë€ížìí¬" ìì¹ë¥Œ ê°ì ë¡ ì§ì íë ë°©ë²ì 묎ìì ëê¹? ìŽê²ì ì ìŽë ì€ëŽìì ë°ìíë 묞ì 륌 íŽê²°íë ìž¡ë©Žìì 충ë¶í ê²ì ëë€.
"ë€ížìí¬" ìì¹ë¥Œ ê°ì ë¡ ì§ì íë ë°©ë²ì 묎ìì ëê¹? ìŽê²ì ì ìŽë ì€ëŽìì ë°ìíë 묞ì 륌 íŽê²°íë ìž¡ë©Žìì 충ë¶í ê²ì ëë€.
Geolocator íë¬ê·žìž ìœëìì ì§ì ìì¹ ì ê³µì ê°ì íëìœë©íì¬ ê·žë ê² íìµëë€. ë®ì ì íë륌 ì ííë©Ž ê°ì íšê³Œê° ìì ê²ìŽëŒê³ ìê°íì§ë§ ìëíì§ ìììµëë€.
ìë§ë ë©ìëìë íììì 맀ê°ë³ìê° ììŽìŒ íì§ ììê¹ì?
Flutter/Geolocator íìŽ ìŽ ë¬žì 륌 íŽê²°íê³ ììµëê¹?
ë€, ì°ëŠ¬ë
@mvanbeusekom ê°ì¬í©ëë€!
묞ì ì ììžìŽ 묎ììžì§ ììëê¹?
ê·žê²ì ì°ííë ë°©ë²(ëë ìŒì¢
ì ìì ì룚ì
)ì ì°Ÿììµëê¹?
(4.0.3ìŒë¡ ë€ìŽê·žë ìŽëíŽë 묞ì ê° íŽê²°ëì§ ìììµëë€.)
ì뮬ë ìŽí°ìì ìì¹ë¥Œ ë°©ì¶íëë¡ ì뮬ë ìŽí°ë¥Œ 구ì±íë ê²ìŽ ì€ìí©ëë€. ìŽê²ì ì뮬ë ìŽí° ì í늬ìŒìŽì ì ë€ì ë©ëŽ í목ì ì¬ì©íì¬ ìíí ì ììµëë€. êž°ë¥ -> ìì¹ ->("ìì" ìŽìžì ìµì ì í).
ê·žê²ì ë륌 ìíŽ ë¬žì 륌 íŽê²°íìµëë€. ê·žë¬ë ììžë ë€ë¥ž ê² ììŽ ì€íšíêž° ë묞ì ë§€ì° íŒëì€ë¬ìŽ ë²ê·žì ëë€.
ì뮬ë ìŽí°ìì ìì¹ë¥Œ ë°©ì¶íëë¡ ì뮬ë ìŽí°ë¥Œ 구ì±íë ê²ìŽ ì€ìí©ëë€. ìŽê²ì ì뮬ë ìŽí° ì í늬ìŒìŽì ì ë€ì ë©ëŽ í목ì ì¬ì©íì¬ ìíí ì ììµëë€. êž°ë¥ -> ìì¹ ->("ìì" ìŽìžì ìµì ì í).
ê·žê²ì ë륌 ìíŽ ë¬žì 륌 íŽê²°íìµëë€. ê·žë¬ë ììžë ë€ë¥ž ê² ììŽ ì€íšíêž° ë묞ì ë§€ì° íŒëì€ë¬ìŽ ë²ê·žì ëë€.
ê·žë, ëë.
ìì¹ ìì²ì ìê° ìŽê³Œë¥Œ ì¶ê°íê³ ìì¹ê° ì€ì ëì§ ìì ì뮬ë ìŽí°ìì ììžë¥Œ ë°ììí€ììì€.
ê°ì¬ íŽì :)
iOSììë ëìŒí 묞ì ê° ììŒë©° Google ì§ë íë¬ê·žìžë ì¬ì©íê³ ììµëë€.
getLocationStreamì ì¬ì©íë ì±ìŽ ìì§ë§ Google ì§ëê° ìë íìŒë¡ ìŽëí ëê¹ì§ ê¶í ëí ììê° íìëì§ ììµëë€.
Google ì§ë륌 ë ìŽì ì¬ì©íì§ ììì§ë§ íë¬ê·žìžì ì ê±°íë ê²ì ìì ë€ë¥ž ì±ìŽ ìëë° ëìŒí 묞ì ê° ë°ìíìµëë€. Google ì§ë íë¬ê·žìžì ì ê±°íëë° ìŽì ì ëë¡ ìëí©ëë€.
ìŽì ëí ì ë°ìŽížê° ììµëê¹?
ìë íìžì ì¬ë¬ë¶, ì ë ìŽ ë¬žì 륌 íŽê²°íêž° ìíŽ ìŽì¬í ë žë ¥íê³ ììµëë€. Ʞ볞ì ìŒë¡ ì°ëŠ¬ë geolocator륌 ì²ìë¶í° 구ì¶íê³ í ë²ì ì¬ë¬ 묞ì 륌 íŽê²°íêž°ë¡ ê²°ì íìµëë€.
í¬íšë í¬ìžížë ë€ì곌 ê°ìµëë€.
getCurrentLocation
ê° í©ëŠ¬ì ìž ìê° ëŽì ê²ìëìëì§ íìžíììì€.getCurrentLocation
ë° getPositionStream
ë©ìëì ìê° ìŽê³Œë¥Œ ì¶ê°íì¬ ìì¹ íëìŽ ììë³Žë€ ì€ë 걞늬멎 ìì²ìŽ ìê° ìŽê³Œëê³ ìì²ì ë€ì ììí ì ììµëë€.첫 ë²ì§ž ëšê³ë ì§ì€ìœë© êž°ë¥ì ì ê±°íê³ ì첎 íë¬ê·žìž(íì¬ pub.dev ìì ì¬ì©í ì ìì)ìì ížì€í íë ê²ìŽììµëë€.
ë ë²ì§ž ëšê³ë íìí 몚ë Dart ìœë륌 ìì±íê³ ëšì í ì€ížíë ê²ìŽììµëë€. ìŽì ì€ë¹ëììŒë©° federated_plugin ë¶êž°ìì 볌 ì ììµëë€.
ë€ì ëšê³ë iOS ë° Android 구íì ì¶ê°íê³ ìì ì±ì ìì íë ê²ì ëë€. ìŽê²ìŽ ì ê° ì§êž íê³ ìë ìŒì ëë€. ë°ëŒê±Žë ììŒë¡ 2죌 ìì 몚ë ìì ì ë§ì¹ ì ìì ê²ì ëë€.
ìŽìšë ìžëŽì¬ê³Œ íŒëë°±ì 죌ì 몚ë ë¶ë€ê» ê°ì¬ëëŠ¬ê³ ì¶ìµëë€. ì¡°êžë§ ë êž°ë€ë € 죌ìžì.
@mvanbeusekom
ì¢ì ììì
ëë€. ìê°ì ëŽìŽ ìŽ íë¬ê·žìžì ì ê³µíŽì£Œì
ì êž°ì©ëë€.
í° ê°ì¬ë¥Œ ë늜ëë€!
ë€ì ì ë°ìŽížë¥Œ êž°ëí©ëë€.
ê°ì¬í©ëë€.
ë©ì§! í ì€íží ì ìëë¡ ì¶ìëë©Ž ìë €ì£Œìžì.
ìì íŽê²° ë°©ë²ìŒë¡ GeolocationStatus checkGeolocationPermissionStatus()
ë©ìë륌 ì¬ì©íì¬ ì¥ì¹ì ìí륌 íìží ì ììµëë€. ìì¹ê° êºŒì ž ììŒë©Ž ìŽ ë©ìëë "ë¹íì±íëš"ì ë°íí©ëë€. ê·žë¬ë©Ž getCurrentPosition()
ë©ìë륌 ížì¶í íìê° ììµëë€.
ìì:
Future<Position> getCurrentPosition() async {
Position position;
GeolocationStatus status = await _geolocator.checkGeolocationPermissionStatus();
if (status != GeolocationStatus.disabled) {
position = await _geolocator.getLastKnownPosition();
if (position == null && status == GeolocationStatus.granted) {
position = await _geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high,
locationPermissionLevel: GeolocationPermission.locationWhenInUse,
);
}
}
return position;
}
ì¬êž°ì ìœê°ì ì ë°ìŽíž, ì€ë ì칚 Flutter ìì ì±ì í¬íšíì¬ iOSì ëí ìì í ì§ìì í¬íšíë federated_plugin ë¶êž°ì ëí ìë¡ìŽ ì ë°ìŽížë¥Œ ížìíìµëë€.
ì°ëŠ¬ë ëí ê¶í ìí íìžì ì§ìíë Android ìì ì ììíìŒë©° ìŽì ê¶í ìì² ë° ìì¹ ìë¹ì€ ì²ëŠ¬ë¥Œ 구íí ê²ì ëë€.
ìœë륌 íìžíê±°ë íµí©ì ìëíë ê²ì í ì€íž ì±ì ìê³ iOSìì ì€íë©ëë€. 묞ìíë ìë¹í ë§ì 죌ì ë³ê²œ ì¬íìŽ í¬íšëìŽ ììµëë€. ì§êžì ìê°ìŽ 걞늬Ʞë íì§ë§ ì§í ìí©ìŽ ìë€ë ê²ì 몚ëìê² ìëŠ¬ê³ ì¶ììµëë€. ë€ì í ë² ìíŽíŽ 죌ì ì ê°ì¬í©ëë€.
ì¬êž°ì ìœê°ì ì ë°ìŽíž, ì€ë ì칚 Flutter ìì ì±ì í¬íšíì¬ iOSì ëí ìì í ì§ìì í¬íšíë federated_plugin ë¶êž°ì ëí ìë¡ìŽ ì ë°ìŽížë¥Œ ížìíìµëë€.
ì°ëŠ¬ë ëí ê¶í ìí íìžì ì§ìíë Android ìì ì ììíìŒë©° ìŽì ê¶í ìì² ë° ìì¹ ìë¹ì€ ì²ëŠ¬ë¥Œ 구íí ê²ì ëë€.
ìœë륌 íìžíê±°ë íµí©ì ìëíë ê²ì í ì€íž ì±ì ìê³ iOSìì ì€íë©ëë€. 묞ìíë ìë¹í ë§ì 죌ì ë³ê²œ ì¬íìŽ í¬íšëìŽ ììµëë€. ì§êžì ìê°ìŽ 걞늬Ʞë íì§ë§ ì§í ìí©ìŽ ìë€ë ê²ì 몚ëìê² ìëŠ¬ê³ ì¶ììµëë€. ë€ì í ë² ìíŽíŽ 죌ì ì ê°ì¬í©ëë€.
ìŽì¬í ìŒíŽì£Œì ì ê°ì¬í©ëë€. ìŽ ë³ê²œìŒë¡ pub.devì geolocator íší€ì§ë¥Œ ì ë°ìŽížíìê² ìµëê¹?
ëí ìŽê²ì ììì ìžêží ìì ëí íìŒì ëë€: position_updates_example_widget.dart?
ìŽì¬í ìŒíŽì£Œì ì ê°ì¬í©ëë€. ìŽ ë³ê²œìŒë¡ pub.devì geolocator íší€ì§ë¥Œ ì ë°ìŽížíìê² ìµëê¹?
ëí ìŽê²ì ììì ìžêží ìì ëí íìŒì ëë€: position_updates_example_widget.dart?
ìëì, ì ë ìì§ pub.devì ê²ìíì§ ìì ê²ì ëë€. ìŽê²ì geolocator íë¬ê·žìžì ì 첎 ì¬ìì ìŽë©° ìì§ Android륌 ì§ìíì§ ììµëë€. Androidì 묞ìê° ìë£ëë©Ž pub.devì 늎늬ì€í ê²ì ëë€.
ì, ìŽ ìì ¯ì ìì ì±ì ìŒë¶ìŽë©° ìì¹ ì ë°ìŽížë¥Œ ìì íë ë°©ë²ì 볎ì¬ì€ëë€.
ìë ,
ìŽ íší€ì§ë¥Œ 죌ì ì ê°ì¬í©ëë€.
ìŽë² 죌ì Androidì ëíŽ ììì ìžêží 몚ë ìì ì ìë£í ì ìë êž°íê° ììµëê¹?
ìŽì ëí ì ë°ìŽížê° ììµëê¹?
ì²ììŒë¡ ìì²í ëë§ ìì¹ ì§ì°ì êž°ë€ëŠœëë€.
ì¬ìì ë ë²ì ìŽ ìžì ì¶ìëëì§ì ëí ì ë°ìŽížê° ììµëê¹? @mvanbeusekom
@dalmia007 , ìì§ ë ì§ë ìì§ë§ ì§í ì€ì
ëë€. feature/federated_android
ë¶êž°ì Androidì ëí Ʞ볞 ì§ìì ì¶ê°íìµëë€. ì¬êž°ìë ê¶í ìì², ë§ì§ë§ìŒë¡ ìë €ì§ ìì¹ ê°ì žì€êž°, íµí© ìì¹ ì ê³µì íŽëŒìŽìžíž(Google Play ìë¹ì€ì ìŒë¶)륌 ì¬ì©íì¬ íì¬ ìì¹ ë° ìì¹ ì
ë°ìŽíž ê°ì žì€êž°ê° 몚ë í¬íšë©ëë€.
ì ë ì¬ì í ë€ì ìì ì íê³ ììµëë€.
ìëë¡ìŽë ì ì©:
ìŒë°ì ìž:
ì¬êž° ìì íìžíìžì.
@mvanbeusekom ì ë°ìŽíž ì ë§ ê°ì¬í©ëë€! ð
ìë íìžì ì¬ë¬ë¶,
ìŽ ëªšë 묞ì 륌 ì ê±°íŽìŒ íë I(ìµì¢ ) ëŠŽëŠ¬ì€ ë²ì 6.0.0-rc.1 ì ë°ííê² ëìŽ êž°ì©ëë€.
ì¬ì©íŽ 볎ìê³ íŒëë°±ì 죌ìë©Ž ì ë§ ê°ì¬íê² ìµëë€.
ìŽ ë§ì íŽì ì ê°ìŽì§ë§ ìŽë¯ž 4.0.3ìŒë¡ ëë늎 ì ìì ë§íŒ ë ë²ìŽë 충ëíìµëë€.
E/AndroidRuntime(19881): java.lang.RuntimeException: Failure delivering result ResultInfo{who=<strong i="6">@android</strong>:requestPermissions:, request=24, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.packagename.consumer.app/com.packagename.consumer.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.baseflow.geolocator.permission.PermissionResultCallback.onResult(com.baseflow.geolocator.permission.LocationPermission)' on a null object reference
ëí ìììì íì© íì©ì ëë¥Žê³ ê±°ë¶ë¥Œ ëë ì ëë ë°ìíìµëë€. ëŽê° ëì¹ ê²ìŽ ììŒë©Ž ìë €ì£Œììì€.
@Dohmanlechx ë 6.0.0-rc.x ëë 5.3.2 ë²ì ìì ìŽê²ì ì»ìëì§ íìžíìµëë€.
6.0.0-rc.1
ìì ìŽê²ì ì»ììµëë€(IDEìì 5.3.2+2
, ì°žê³ ë¡ "ì
ë°ìŽíž"íëë¡ ìì²íìµëë€)
@Dohmanlechx íŒëë°± ëë¶ì 묞ì 륌 ì°Ÿììµëë€. ë¶ëª í ê·íì ê²œì° geolocatorë ë¶ëª í ì€íšíë ì²ëŠ¬ë¥Œ ìëíë ë€ë¥ž íë¬ê·žìžìŒë¡ë¶í° íŒëë°±ì ë°ê³ ììµëë€. ìŽë¬í ê²œì° Geolocatorë íŽë¹ ë©ìì§ê° Geolocatorì ìíì§ ìêž° ë묞ì íŽë¹ ë©ìì§ë¥Œ 묎ìíŽìŒ í©ëë€. ì€ë ìŽ ë¬žì 륌 ìì íê³ ìë¡ìŽ ëŠŽëŠ¬ì€ í볎륌 ë°ííê² ìµëë€.
íŒëë°± 죌ì ì ê°ì¬í©ëë€!
ì€, ì€ì ë¡ ì°ëŠ¬ë permission_handler
륌 ì¬ì©íê³ ììµëë€. ì¢ì ë°ê²¬!
몚ë í¬ë ë§ì @Dohmanlechx ìê² ëìê°ëë€. ;). ê·íì íŒëë°± ëë¶ì ìŽ ë²ê·žë¥Œ ë°ê²¬í ì ììê³ ê³§ ì ë²ì ì ì¶ìí ì ìì ê²ì ëë€.
@Dohmanlechx 겜íí ë²ê·žë¥Œ ìì íŽìŒ íë ë²ì 6.0.0-rc.3ì ë°©êž ì¶ìíìµëë€.
ë§€ì° íë¥íê³ Android Emulatorìì ì ì€íê² í ì€ížëììŒë©° ì¹ìž ë° ê±°ë¶, ìì¹ ì¡°ììŽ ì벜íê² ìëíìµëë€. ì€ì Android êž°êž°ììë ì ìëíìµëë€.
ê·žë¬ë iOS ì뮬ë ìŽí°ì ëí ìì€í ìì²ìŽ ì í íìëì§ ììµëë€. ìëí ê² ê°ìµëê¹? ê·žë¬ë ì ìŽë 충ëíì§ ììŒë©° ì¬ì© ê°ë¥í ìì¹ ììŽ ì±ìŽ ìíë ëë¡ ìëí©ëë€. ë¶ííë Xcode ì°ê²° 묞ì ë¡ ìžíŽ ì¬ì í ëŽ iPhoneìì í ì€íží ì ììŒë©° ì§êž í ì€ížíêž° ìíŽ TestFlightì ë¹ë륌 ë°°í¬íê³ ì¶ì§ ììµëë€. iPhoneìì í ì€ížíë ëë¡ ìë €ëëŠ¬ê² ìµëë€.
íì§ë§ ì§êžê¹ì§ë ë묎 ì¢ìµëë€!
êŽë²ìí í ì€íž @Dohmanlechx ì ëíŽ ëëší ê°ì¬í©ëë€. ëëší ê°ì¬í©ëë€!
íë¬ê·žìžì ì€ì ë¡ iOSìì ìë¹ì€ ìì²ì íìíì§ ììµëë€. ê·žë ê² íë (ê³µê°) APIê° ìêž° ë묞ì
ëë€. ì¬êž°ì ìë ì ìŒí ìµì
ì ìëìŒë¡ ì€ì ì ì
ë°ìŽížíë ë°©ë²ì ì€ëª
íë ë©ìì§ë¥Œ ì¬ì©ììê² ìëìŒë¡ íìíë ê²ì
ëë€. ì¬ì©ì륌 ì€ì ì±ìŒë¡ 늬ëë ì
íë ìµì
ìŽ ììµëë€( openAppSettings()
ëë openLocationSettings()
ë©ìë ížì¶). README.md íìŒì ë ììží 묞ìííìµëë€.
ìŽ ì¬ì€ì ìëŠ¬ê² ëìŽ ì ê°ìŽì§ë§ ëŽ iPhone XS Max, OS 13.6.1ììë ì¬ìì²ëŒ ìëíìµëë€.
ì²ì ìì¹ë¥Œ ê°ì žì€ë ê²ì ìŽì ë²ì ì²ëŒ ìëíê³ ì¬ë°ë¥ž ìì¹ë¥Œ ë°ííì§ë§ ì¬ì í 7-8ìŽê° ê±žë žìµëë€.
ê·žë¬ë ë ë²ì§žë¶í°ë ê³ìíŽì ììê°ì ëì¡ìµëë€. ë€ì곌 ê°ì ìŽì ë¡ Exception err
ìì dynamic err
ë¡ ë³ê²œíŽìŒ íìµëë€.
_ ì²ëŠ¬ëì§ ìì ììž: '_TypeError' ì íì 'ììž' ì íì íì ì íìŽ ìëëë€ . _.
ì€íší ë ê°ì žìµëë€(ì²ì ê°ì žì€êž° í).
2020-08-26 14:01:45.670206+0200 Runner[4565:206487] flutter: ìì¹ë¥Œ ê°ì žì¬ ì ìì: ì못ë ìí: ìì ìì
2020-08-26 14:01:45.670416+0200 Runner[4565:206487] flutter: ìì¹ë¥Œ ê°ì žì¬ ì ìì: 'NoLocationFoundException' ìžì€íŽì€
( NoLocationFoundException
ë ëŽ ì¬ì©ì ì ì íŽëì€ì
ëë€)
_Bad state: No element_ ë ë¶ííë ë§ì ê²ì ë§íì§ ììµëë€... ìëë ëŽ ìœëì ëë€:
static Future<void> _getUserLocation({bool isSneaky = false}) async {
void _throw(dynamic err) {
print("Could not fetch location: $err");
if (!isSneaky) Fluttertoast.showToast(msg: getTranslation("location_fetch_error"));
throw NoLocationFoundException();
}
await GeolocatorPlatform.instance
.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high,
timeLimit: const Duration(seconds: _TIMEOUT_DELAY),
)
.then((position) => _userLatestPosition = position)
.catchError(
(err) {
// Debug only, remove later
Fluttertoast.showToast(msg: "error: $err");
if (err is TimeoutException) {
GeolocatorPlatform.instance.getLastKnownPosition().then((position) {
if (position == null) _throw(err);
return position;
}, onError: (err) {
_throw(err);
});
} else if (err is PermissionDeniedException) {
XxlPermissionsHandler.request(Permission.location);
} else {
_throw(err);
}
},
).catchError((err) => _throw(err));
}
iPhoneìì ìŽê²ì ì¬íí ì ìꞰ륌 ì§ì¬ìŒë¡ ë°ëëë€.
@Dohmanlechx , êŽë²ìí íŒëë°±ì ê°ì¬ë늜ëë€. ì¬êž°ì 묞ì 륌 ì°Ÿì ê² ê°ìµëë€. ìŽì ê·žê²ì ê³ ì¹ ì ìë ì¢ì ë°©ë²ì ì°ŸììŒ í©ëë€ ;)
ê°ëší ë§íŽì getCurrentPosition
ë©ìëë getPositionStream
륌 ížì¶íê³ ì²« ë²ì§ž ìì륌 ê°ì žìš ë€ì ì€ížëŠŒì ë«ìµëë€. 묞ì ë getPositionStream
ì ë€ì곌 ê°ì ìœëê° ìë€ë ê²ì
ëë€.
if (_positionStream != null) {
return _positionStream;
}
ìŽë¯ž ë«í ì€ížëŠŒìì first
륌 ížì¶íêž° ë묞ì getCurrentPosition
륌 ë ë²ì§žë¡ ížì¶í ë Bad state: No element
ììžê° ë°ìíë€ê³ ì¶ìž¡í ì ììµëë€. ëë ìŽê²ì ìì
íê³ ê³§ ìë¡ìŽ í볎ì륌 ë°íí ê²ì
ëë€.
@Dohmanlechx , ë°©êž ê²ìí 6.0.0-rc.4 ìì "Bad state: No element"ê° ìì ëìŽìŒ íë 묞ì ê° ë°ìí©ëë€. 묞ì 륌 ì¬íí ìë ììì§ë§ getCurrentPosition
ë ë²ì§ž(ë° ìŽí) ââížì¶í ë ì ì€ížëŠŒì ì¬ì©íëë¡ í ì ìììµëë€.
ë€ì ìëíŽë³Žê³ íšê³Œê° ìëì§ ìë €ì£Œìë©Ž ì ë§ ê°ì¬íê² ìµëë€.
ëŽê° ìì찚늰 ê²ì GeolocatorPlatform.instance.<some_method>
륌 ì§ì ì¬ì©íë€ë ê²ì
ëë€. ìŽë ê² íë©Ž geolocator
íší€ì§ì ìë ë
ŒëŠ¬ë¥Œ ì ë¬íê³ geolocator_platform_instance
ì ìë Ʞ볞 구íìŒë¡ ë°ë¡ ìŽëí©ëë€. geolocator
íší€ì§ì í¹ì 구íìŽ ìì§ë§ íšì€íì§ ìë ê²ìŽ ì¢ìµëë€.
geolocator íší€ì§ë¥Œ ê°ì žì€ë©Ž ì ì ë©ìë륌 ì§ì ížì¶í ì ììŽìŒ í©ëë€. ì륌 ë€ë©Ž ë€ì곌 ê°ìµëë€.
import 'package:geolocator/geolocator.dart';
final position = await getCurrentPosition();
충ëìŽ ë°ìíê±°ë ëšìí ì ì ë©ìë륌 ì ëì¬ë¡ ì¬ì©íë €ë ê²œì° ë€ì곌 ê°ìŽ ê°ì žì€êž°ì ë³ì¹ì ì¶ê°í ì ììµëë€.
import 'package:geolocator/geolocator.dart' as geolocator;
final position = await geolocator.getCurrentPosition();
ê°ì¬í©ëë€. ê·íì ì ìì ë°ëŒ ìœëë ë³ê²œíìµëë€.
ì§êžì 충ëìŽ ì¬ëŒì¡ì§ë§ ë¶ííë ì¬ì í ë묎 ë¶ìì í©ëë€. 10ë² ì€ 3ë²ì ë§€ì° ë¹ ë¥Žì§ë§(10ë² ì€ 10ë²ì ì ë§ ì¢ê² ë€), 10ë² ì€ 7ë²ì ì í ìê°(10ìŽ)ì ìŽê³Œíê³ íšìê° ë°ìí©ëë€. getCurrentPosition()
ì€ížì iPhoneìì í
ì€ížíìµëê¹? iPhone XS Max, OS 13.6.1ìì í
ì€ížíìµëë€.
_4.0.3_ì ë늬ì§ë§ ìì ì ì
ëë€.
_6.0.0-rc.4_ë ë¹ ë¥Žì§ë§ ë¶ìì í©ëë€.
ê·žë¬ë ê±±ì íì§ ë§ììì€. í¹í ë²ì 4.0.3ì ëíŽ ì첎 ìê° ì íì ìŒêž° ë묞ì ìŽê²ì ìì í êŽì°®ê³ ì°ëŠ¬ìê² ì í ì¬ììŽ ìëëë€.
@Dohmanlechx 충ëìŽ íŽê²°ëìë€ë ììì ë£ê³ êž°ì©ëë€.
ì¬ìì°í ì ìêž° ë묞ì ì¬ì í ë늰 ì ë°ìŽížë¥Œ ë°ë ìŽì ê° ì ë§ ê¶êží©ëë€. ëë ê·žê²ì ìëíêž° ìíŽ ë§€ì° ê°ëší ë°ëªš ì±ì ë§ë€ììµëë€.
ë©ìž.ë€íž:
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
<strong i="10">@override</strong>
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<Position> _positions = <Position>[];
<strong i="11">@override</strong>
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
body: ListView.builder(
itemCount: _positions.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(title: Text(_positions[index].toString()),);
},),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () => getCurrentPosition().then((position) {
setState(() {
_positions.add(position);
});
}),
),
),
);
}
}
ì 볎.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>geolocator_issue</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>NSLocationWhenInUseUsageDescription</key>
<string>The example App requires access to the device's location.</string>
</dict>
</plist>
ë°ëŒì ë¶ë ìì
ë²íŒì ë륌 ëë§ë€ getCurrentPosition
ê° ížì¶ëê³ ê²°ê³Œê° ListView
ì ì¶ê°ë©ëë€. ëŽ ê°ìž iPhone 7, ìëŽì iPhone 6 ë° ì뮬ë ìŽí°(몚ë ìµì iOS ë²ì ì€í)ìì ìŽ ì±ì í
ì€ížíì§ë§ ë²íŒì ì€íží ì ìê³ ìì¹ê° ê±°ì ìŠì ë°íë©ëë€. ì ë€ë¥ž 겜íì íëì§ ì ë§ ê¶êží©ëë€. ìŽ ìí ìœë륌 í
ì€ížíê³ ì¬ì í ëìŒí 묞ì ê° ìëì§ íìží ì ììµëê¹?
ëë ë¹ì ì ëêž°ì ì ë§ ì¡Žê²œí©ëë€. ì íë¡ì ížë¥Œ ë§ë€ê³ ìœë륌 ì¬ì©íê³ ë²íŒì ì€ížíì¬ iPhone íë©Žì ê±°ì 깚ëšëŠŽ ë»íìµëë€. ìì¹ë íì ìŠì ë°íëììµëë€. ìì²ë! ëŽìŒì ìì ¯ìì ì§ì getCurrentPosition()
ì ì€ííë ê²ìŒë¡ ììíì¬ ìœëìì 묞ì 륌 íŽê²°í ìê°ì ì°Ÿì ë€ì ë²ìžì ì°Ÿêž° ìíŽ ìëí ìì¹ê¹ì§ ê³ìíŽì ìŽëí©ëë€. ëë ê·žê²ìŽ ê¶í íë¬ê·žìž ë묞ìŽëŒê³ ìê°íì§ë§ ì°ëŠ¬ë ë³Žê² ë ê²ì
ëë€.
íŒë백곌 ì¹ì í ë§ì ê°ì¬í©ëë€. ì ë§ ê°ì¬í©ëë€. ì§ëŠ¬ìì¹ì¶ì êž° ì¬êµ¬ì¶ì ë§ì ë žë ¥ì êž°ìžìëë° ìŽ ë¬žì ê° ì ë§ ììíê² ë ê³êž°ê° ëìêž°ì ìŽë²ìë ì ë§ ì ëììŒë©Ž íë ë°ëšì ëë€ ;)
ì§í ìí©ê³Œ ì ê° ëìë늎 ì ìëì§ ìë €ì£Œìžì.
getCurrentPosition().then((position) {
print(position);
}).catchError((err) {
print(err);
});
ìì ¯ìì ì§ì ìëíëë° íŽëŠí ëë§ë€ ìœìì ìì¹ê° êž°ë¡ëììµëë€! ë°ëŒì ìŽê²ì íì€í ì°ëŠ¬ì ìœëì ëë€. ìŽì ì°ëŠ¬ìê² ë¬ë € ììµëë€. 몚ë ê²ì ê°ì¬ë늜ëë€!
íì§ë§ ìì¹ë¥Œ ê°ì žì€ë ëì _ê°ë_ ë°ìí©ëë€.
I/flutter ( 393): âââ¡ EXCEPTION CAUGHT BY SERVICES LIBRARY âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
I/flutter ( 393): The following PlatformException was thrown while de-activating platform stream on channel
I/flutter ( 393): flutter.baseflow.com/geolocator_updates:
I/flutter ( 393): PlatformException(error, No active stream to cancel, null)
I/flutter ( 393):
I/flutter ( 393): When the exception was thrown, this was the stack:
I/flutter ( 393): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572:7)
I/flutter ( 393): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161:18)
I/flutter ( 393): <asynchronous suspension>
I/flutter ( 393): #2 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
I/flutter ( 393): #3 EventChannel.receiveBroadcastStream.<anonymous closure> (package:flutter/src/services/platform_channel.dart:554:29)
I/flutter ( 393): #4 EventChannel.receiveBroadcastStream.<anonymous closure> (package:flutter/src/services/platform_channel.dart:551:18)
I/flutter ( 393): #18 MethodChannelGeolocator.getPositionStream.<anonymous closure> (package:geolocator_platform_interface/src/implementations/method_channel_geolocator.dart:135:13)
I/flutter ( 393): (elided 24 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
I/flutter ( 393): ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
@mvanbeusekom ìµì 6.0.0+1 ë²ì ì ì¬ì©íì¬ ìì¹ë¥Œ ì í ì»ì ì ììµëë€. iOS ì뮬ë ìŽí°, Android ì뮬ë ìŽí° API 29, 묌늬ì OnePlus 6ìì ìëíìµëë€. ë§€ë² ìê° ìŽê³Œê° ë°ìí©ëë€.
묞ì 륌 ì°Ÿë ë° ëìì 죌Ʞ ìíŽ ì¬êž°ì ì¶ê°í ì ìë ê²ìŽ 묎ììžì§ ëªšë¥Žê² ìµëë€. getCurrentPosition
ë ìê° ìŽê³Œë¥Œ ë°ííê±°ë timeLimit
맀ê°ë³ìê° ì§ì ëì§ ìì ê²œì° ì€ëšë©ëë€. ë€ë¥ž ìì¹ ì íë륌 ìëíìµëë€. ë구ë ì§ìŽ 묞ì ê° ììµëê¹?
ë²ì 5.3.2+2ë iOS ì뮬ë ìŽí°(ì¬ì©ì ì§ì ìì¹ ì§ì ), Android ì€ì ì¥ì¹ ë° Android ì뮬ë ìŽí°ìì ì ìëí©ëë€.
@mvanbeusekom , ìŽ ëªšë ê²ì ìœììŒë©° 10ìŽ ì§ì° 묞ì 륌 íŽê²°íêž° ìíŽ ìµì ë²ì ìŒë¡ ì ê·žë ìŽë ì€ì ëë€.
ì ê° ëì¹ ë¶ë¶ìŽ ìì ìë ìì§ë§ ì ë²ì (ì§ì€ìœë©)ìì ë ìŽì í ì ìë ë¶ë¶ìŽ ììµëë€.
ë€ìì ìííì¬ ìëìŒë¡ ìì¹ë¥Œ ëì¬ìŒë¡ ì€ì í ì ìììµëë€(ì¬ì©ìê° ìì¹ë¥Œ ê±°ë¶íë 겜ì°).
Position userLocation;
List<Placemark> listAddresses = [];
if(permission.toString() != "PermissionStatus.granted"){
listAddresses = await placemarkFromAddress("$city, $state");
userLocation = listAddresses[0].position;
}else{
getCurrentPosition...
}
ìŽì _placemarkFromAddress_ ê° _ locationFromAddress _(ìŒ)ë¡ ë³ê²œë ê² ê°ìŒë¯ë¡ ìììì ë€ì ë³ê²œ ì¬íì ì ì©íë €ê³ íìµëë€.
Position userLocation;
List<Location> listAddresses = [];
if(permission.toString() != "PermissionStatus.granted"){
listAddresses = await locationFromAddress("$city, $state");
userLocation = listAddresses[0].position;
}else{
getCurrentPosition...
}
íì§ë§ ë€ì ì€ë¥ê° ë°ìí©ëë€.
A value type 'Location' can't be assigned to a variable of type 'Position'.
ìŽë»ê² ìì¹ë¥Œ ìì¹ë¡ ë³íí ì ììµëê¹? ëë ê¶ê·¹ì ìŒë¡ ì¬ì©ìê° ìì¹ë¥Œ ê±°ë¶íë ê²œì° ìŽì ê·žì ìì¹ë¥Œ ââìëŽ ì€ì¬ìŒë¡ ì€ì íë €ë©Ž ìŽë»ê² íŽìŒ í©ëê¹?
ê°ì¬ íŽì.
ìµì ë²ì ìŒë¡ ì ë°ìŽížíê³ ë¬žì 륌 íŽê²°íìµëë€ ððð
ê°ì¥ ì ì©í ëêž
ìë íìžì ì¬ë¬ë¶,
ìŽ ëªšë 묞ì 륌 ì ê±°íŽìŒ íë I(ìµì¢ ) ëŠŽëŠ¬ì€ ë²ì 6.0.0-rc.1 ì ë°ííê² ëìŽ êž°ì©ëë€.
ì¬ì©íŽ 볎ìê³ íŒëë°±ì 죌ìë©Ž ì ë§ ê°ì¬íê² ìµëë€.