Flutter-geolocator: IOS рдкрд░ рдЕрдиреБрдореЛрджрди рдХреЗ рдмрд╛рдж рддреНрд░реБрдЯрд┐: PlatformException (PERMISSION_DENIED, рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЕрд╕реНрд╡реАрдХреГрдд, рд╢реВрдиреНрдп)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Baseflow/flutter-geolocator

ЁЯРЫ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ

  1. рдХреЛрдб рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдореЛрджрди рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ:
    PlatformException (PERMISSION_DENIED, рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдЕрд╕реНрд╡реАрдХреГрдд, рд╢реВрдиреНрдп)

  2. рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдмрд╛рд░ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рддреБрд░рдВрдд рд╕рдВрд╡рд╛рдж рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

рд╕реНрдерд┐рддрд┐ рд╡рд╛рдкрд╕ рдХрд░ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдореЛрджрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдлреЗрдВрдХреА рдЬрд╛рддреА рд╣реИред

рдкреНрд░рдЬрдирди рдХреЗ рдХрджрдо

import 'package:geolocator/geolocator.dart';
try{
   position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
}
catch(error)
{
  print("error in geolocation: $error"); //error in geolocation: PlatformException(PERMISSION_DENIED, Access to location data denied, null)
  print("position: $position"); // position: null
  print("retrying");  // retrying
  try{
    position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
  }
  catch(error)
  {
    await printGeoStatus(5);
    print("2nd error in geolocation $error");
  }
  print("final position: $position"); //flutter: final position: Lat: 59.xyz, Long: 17.xyz

}

рд╡рд┐рдиреНрдпрд╛рд╕

рд╕реНрдкрдВрджрди рд╕рдВрд╕реНрдХрд░рдг: "рдЪреИрдирд▓ рджреЗрд╡, v1.5.8"
рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг: ^ 4.0.2

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо:

  • [x]: iphone: iOS
  • []: рд░реЛрдмреЛрдЯ: Android

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдЗрд╕ рд╕рдордп рдФрд░ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП # 430 рджреЗрдЦреЗрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рд╣реЛрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ iOS рд╕рд╛рдЗрдб рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЕрдм Android рдУрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@FlashJonas рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣рдордиреЗ geolocator рдкреНрд▓рдЧрдЗрди (рд╕рдВрд╕реНрдХрд░рдг 5.0.0) рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рд┐рдлреИрдХреНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@mvanbeusekom рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА 5.0.0 рдореЗрдВ рдореМрдЬреВрдж рд╣реИ
рдмрд╕ AppBrewery рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреА рдЦреЛрдЬ рдХреАред

рдореИрдВрдиреЗ рдкреИрдХреЗрдЬ рдбреЙрдХреНрд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдкреНрд▓рд┐рд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 3 рдХреБрдВрдЬреА рдЬреЛрдбрд╝реАрдВ:

<key>NSLocationWhenInUseUsageDescription</key>
    <string>This app needs access to location when open.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>This app needs access to location when in the background.</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>This app needs access to location when open and in the background.</string>

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░реЗрдВ

Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.low);

рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрдВ (3 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде):
image

рдпрджрд┐ рдореИрдВ "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЗрд╡рд▓" рджрдмрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдЯрд░реНрдорд┐рдирд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:

[VERBOSE-2: ui_dart_state.cc (148)] рдЕрдЦрдВрдбрд┐рдд рдЕрдкрд╡рд╛рдж: PlatformException (PERMISSION_DENIED, рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдЕрд╕реНрд╡реАрдХреГрдд, рдЕрд╢рдХреНрдд)

0 рдЬрд┐рдУрд▓реЛрдХреИрдЯрд░._рд╣реИрдВрдбрд▓рдЗрдиреНрд╡рд╛рд▓рд╛рдЗрдбрдкрд┐рди (рдкреИрдХреЗрдЬ: рдЬрд┐рдпреЛрд▓реЛрдХреИрдЯрд░ / рдЬрд┐рдпреЛрд▓реЛрдХреИрдЯрд░.рдЖрд░реНрдЯ: 191: 7)

1 рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░.рдЧреИрдЧрд╕рдВрдХрд▓реНрдк (рдкреИрдХреЗрдЬ: рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░ / рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░ред рдХрд╛рд░реНрдЯ: 102: 7)

2 _LadingScreenState.getLocation (рдкреИрдХреЗрдЬ: рдХреНрд▓рд┐рдорд╛ / рд╕реНрдХреНрд░реАрди / рд▓реЛрдбрд┐рдВрдЧ_рд╕реНрдХреНрд░реАрдиред рдбрд╛рд░реНрдЯ: 13: 10)

3 _LadingScreenState.buildред(рдкреИрдХреЗрдЬ: рдХреНрд▓рд┐рдорд╛ / рд╕реНрдХреНрд░реАрдиреНрд╕ / рд▓реЛрдбрд┐рдВрдЧ / рд╕реНрдХреНрд░реАрди_рдбрд╛рд░реНрдЯ: 23: 13)

4 _InkResponseState._handleTap (рдкреИрдХреЗрдЬ: рд╕реНрдкрдВрджрди / src / рд╕рд╛рдордЧреНрд░реА / ink_well.dart: 511: 14)

5 _InkResponseState.buildред(рдкреИрдХреЗрдЬ: рд╕реНрдкрдВрджрди / src / рд╕рд╛рдордЧреНрд░реА / ink_well.dart: 566: 30)

6 GestureRecognizer.invokeCallback (рдкреИрдХреЗрдЬ: рд╕реНрдкрдВрджрди / src / рдЗрд╢рд╛рд░реЗ / рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред рдбрд╛рд░реНрдЯ: 166: 24)

7 TapGestureRecognizer._checkUp (рдкреИрдХреЗрдЬ: рд╕реНрдкрдВрджрди / src / рдЗрд╢рд╛рд░реЗ / рдЯреИрдкред рдХрд╛рд░реНрдЯ: 240: 9)

8 TapGestureRecognizer.handlePrimaryPointer (рдкреИрдХреЗрдЬ: рд╕реНрдкрдВрджрди / src / рдЗрд╢рд╛рд░реЗ / рдЯреИрдкред рдХрд╛рд░реНрдЯ: 177: 9)

9 <тАж>

рджреВрд╕рд░рд╛ рдкреНрд░реЗрд╕ рдареАрдХ рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓реЙрдЧ рдЗрди рд╣реИ:

рд╕реНрдкрдВрджрди: рд▓реИрдЯ: 37.785834, рд▓рдВрдмреА: -122.406417

рдХреЛрдб:
image

рдЕрднреА рднреА рдореЗрд░реЗ iPhone 5s рдкрд░ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ, 12.2, рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░ 5.1.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред
* рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рд╕реНрдкрдВрджрди рдЪреИрдирд▓ рджреЗрд╡, v1.8.4)

// Called after closing welcome alert
Future getFirstLocation() async {
    Position position;
    try {
      position = await Geolocator()
          .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    } catch (error) {
      print("getfirstlocation error 1");
      try {
        position = await Geolocator()
            .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
      } catch (error) {
        print("error in geolocation $error");
      }
    }

    print("getfirstlocation position: $position");

    if (position != null) {
     // send to database
    }
  }

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЪрд▓рд╛рдиреЗ рд╕реЗ рд▓реЙрдЧ:
flutter: getfirstlocation error 1
flutter: getfirstlocation position: Lat: 59.xxxx, Long: 17.yyyy

рдореИрдВ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ:
рдПрдВрдбреНрд░реЙрдЗрдб (рд╡рдирдкреНрд▓рд╕ 2) - рдПрдВрдбреНрд░реЙрдЗрдб 8.1.0 - рдЬрд┐рдпреЛрд▓реЛрдХреЗрдЯрд░ 5.1.2
(рд╕реНрдерд╛рди рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИ)

2019-08-15 16:54:22.606 926-1110/system_process E/InputDispatcher: channel '569829a de.paschke.coffeebreak/de.paschke.coffeebreak.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
2019-08-15 16:54:56.808 14735-14766/? E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(PERMISSION_DENIED, Access to location data denied, null)
    #0      Geolocator._handleInvalidPermissions (package:geolocator/geolocator.dart:207:7)
    #1      Geolocator.getLastKnownPosition (package:geolocator/geolocator.dart:146:7)
    <asynchronous suspension>
    #2      LocationService.getLastKnownLocation (package:coffee_break/services/location_service.dart:24:51)
    <asynchronous suspension>
    #3      UserStoreBase.checkLastLocation (package:coffee_break/stores/user_store.dart:125:36)

рддреАрдиреЛрдВ рдЕрдиреБрдорддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред рдЕрдЧрд░ рдореИрдВ рдХреЗрд╡рд▓ NSLocationWhenInUseUsageDescription рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдРрдк рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореЗрд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдорд╛рди рдпрд╣ рд╣реИ рдХрд┐ рддреАрдиреЛрдВ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдРрдк рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдХреА рдорд╛рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдпреВрдЖрдИ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИред рд╡реИрд╕реЗ рднреА, рдпрджрд┐ рдЖрдк рд╕рд┐рд░реНрдл NSLocationWhenInUseUsageDescription рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреНрдп рджреЛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред

рдПрдХ рд╣реА рдореБрджреНрджрд╛ :( рд╕реНрдкрдВрджрди рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд┐рд░ рдЪреИрдирд▓ рдкрд░ред

рдпрд╣ рдкреИрдХреЗрдЬ рдмреЗрдХрд╛рд░ рд╣реИ ...

рд╕рдорд╛рди рддреНрд░реБрдЯрд┐, рдПрдВрдбреНрд░реЙрдЗрдб 10 рдкрд░ рд╕реНрдкрдВрджрди рдХрд╛ рд╕рдмрд╕реЗ рд▓рдВрдмрд╛ рд╕рдВрд╕реНрдХрд░рдгред

рдореЗрд░реЗ рд╕рд╛рде рднреА рд╡рд╣реА рджрд┐рдХреНрдХрдд рд╣реИ!

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рд▓реЛрдЧ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рд╕реНрдкрдВрджрди рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕реА рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рдЖрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рдХрджрдо рдереЗред

рдЬрдм рдореИрдВ iOS рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ "рдХреЗрд╡рд▓ рдРрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдлрд╝реНрд▓рдЯрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреВрд╕рд░реА рдмрд╛рд░ рдЬрдм рдореИрдВ рдРрдк рд╕реЗ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕рд╣реА рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред

PS рдирд╡реАрдирддрдо 5.3.2+2 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдореИрдВ рдЗрд╕ рд╕рдордп рдФрд░ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП # 430 рджреЗрдЦреЗрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рд╣реЛрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ iOS рд╕рд╛рдЗрдб рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЕрдм Android рдУрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг 6.0.0 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рджреЗрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рднреА рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд╣рд╛рдВ рдРрдк рдЖрдИрдУрдПрд╕ рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд╛рдВрдЧ рд░рд╣рд╛ рдерд╛ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреБрдорддрд┐ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдХреНрдпреЛрдВ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ "location_permissions" рдирд╛рдо рдХрд╛ рдПрдХ рдкреИрдХреЗрдЬ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ

  1. "Pubspec.yaml" рдореЗрдВ рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ "location_permissions: 3.0.0 + 1" рдЬреЛрдбрд╝реЗрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕реНрдкрдВрджрди рдХреЗ рд▓рд┐рдП 1.22.0 рдХрд┐рдпрд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП рд╕реНрдкрдВрджрди 2.0 рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  2. рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХреЗрдЬ рдЖрдпрд╛рдд рдХрд░реЗрдВ

    рдЖрдпрд╛рдд ' рдкреИрдХреЗрдЬ: location_permissions / location_permissions.dart ';

  3. рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдЕрдкрдиреЗ рдРрдк рдХреЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред)

     <strong i="16">@override</strong>
      void initState() {
       ....
      if (Platform.isIOS) {
        location_permission();
      }
      ....
    

    }

  4. рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ

    рд╢реВрдиреНрдп рд╕реНрдерд╛рди_рдкреНрд░рд╡реЗрд╢ () async {
    рдЕрдВрддрд┐рдо PermissionStatus рдЕрдиреБрдорддрд┐ = рдЗрдВрддрдЬрд╛рд░ _getLocationPermission ();
    рдЕрдЧрд░ (рдЕрдиреБрдорддрд┐ == PermissionStatus.granted) {
    рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐
    рд╡рд╛рдВрдЫрд┐рдд

      // Use the position to do whatever...
    }
    

    }

    рднрд╡рд┐рд╖реНрдп_getLocationPermission () async {
    рдЕрдВрддрд┐рдо PermissionStatus рдЕрдиреБрдорддрд┐ = рд╕реНрдерд╛рдирдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ ()
    .checkPermissionStatus (рд╕реНрддрд░: LocationPermissionLevel.location);

    if (permission != PermissionStatus.granted) {
      final PermissionStatus permissionStatus = await LocationPermissions()
          .requestPermissions(
              permissionLevel: LocationPermissionLevel.location);
    
      return permissionStatus;
    } else {
      return permission;
    }
    

    }

рдпрд╣реА рд╣реИ рдЕрдм рдЖрдкрдХреЛ iOS рдРрдк рдореЗрдВ рдПрдХ рдкреЙрдкрдЕрдк рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реНрдерд╛рди рдХреА рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧреЗрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Andrew-Tolentino picture Andrew-Tolentino  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

devalp-pro picture devalp-pro  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dark-chocolate picture dark-chocolate  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

seakmengc picture seakmengc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Sammius picture Sammius  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ