Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Type Conflict When Using AppleSettings in Geolocator Plugin for iOS or location settings #1565

Open
3 of 8 tasks
alladyaditi opened this issue Aug 26, 2024 · 1 comment

Comments

@alladyaditi
Copy link

Please check the following before submitting a new issue.

Please select affected platform(s)

  • Android
  • iOS
  • Linux
  • macOS
  • Web
  • Windows

Steps to reproduce

Implement location tracking using the Geolocator plugin in a Flutter app.
Create functions _getCurrentLocationForIOS and _enableLocationUpdatesForIOS using AppleSettings for iOS.
Call these functions on an iOS device to get the current location and enable continuous location updates.
Observe the type conflict and other errors during runtime.

Expected results

Example: The application should retrieve the current location and enable continuous location updates on iOS devices without any type conflicts or runtime errors.

Actual results

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: The operation couldn’t be completed. (kCLErrorDomain error 1.)
#0 GeolocatorApple.getPositionStream. (package:geolocator_apple/src/geolocator_apple.dart:188:9)
#1 Stream.handleError. (dart:async/stream.dart:931:16)
#2 _HandleErrorStream._handleError (dart:async/stream_pipe.dart:269:17)
#3 _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:157:13)
#4 _RootZone.runBinaryGuarded (dart:async/zone.dart:1606:10)
#5 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:384:15)
#6 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:402:7)
#7 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:306:7)
#8 _ForwardingStreamSubscription._addError (dart:async/stream_pipe.dart:128:11)
#9 _ForwardingStream._handleError (dart:async/stream_pipe.dart:95:10)
#10 _ForwardingStream<…>
The application encounters a type conflict and crashes with the error: Unhandled Exception: type '(Position) => Null' is not a subtype of type '((Position) => void)?'. The issue appears when using AppleSettings for iOS in the Geolocator plugin. also when the setting location is on alway or while using the app the location puck shows the first time and disappears and gives this error

Code sample

Code sample
[Paste your code here]
 Future<void> _getCurrentLocationForIOS() async {
  try {
    final geolocator.AppleSettings appleLocationSettings = geolocator.AppleSettings(
      accuracy: geolocator.LocationAccuracy.bestForNavigation,
      activityType: geolocator.ActivityType.fitness,
      distanceFilter: 100, // Adjust according to your needs
      pauseLocationUpdatesAutomatically: false,
      showBackgroundLocationIndicator: true,
      allowBackgroundLocationUpdates: true,
    );

    _currentPosition = await geolocator.Geolocator.getCurrentPosition(
      locationSettings: appleLocationSettings,
    );

    if (!mounted) return;

    _mapboxMap.flyTo(
      _getCameraOptions(_currentPosition),
      MapAnimationOptions(duration: 1000),
    );

    _updateLocationPuck();
  } catch (e) {
    print("Error getting current location on iOS: $e");
    // Handle the error, for example, by showing an alert to the user.
  }
}

void _enableLocationUpdatesForIOS() {
  final geolocator.AppleSettings appleLocationSettings = geolocator.AppleSettings(
    accuracy: geolocator.LocationAccuracy.bestForNavigation,
    activityType: geolocator.ActivityType.fitness,
    distanceFilter: 100, // Adjust according to your needs
    pauseLocationUpdatesAutomatically:false,
    showBackgroundLocationIndicator: true,
    allowBackgroundLocationUpdates: true,
  );

  geolocator.Geolocator.getPositionStream(
    locationSettings: appleLocationSettings,
  ).listen((geolocator.Position position) {
    if (!mounted) return;

    setState(() {
      _currentPosition = position;
      _updateLocationPuck();
    });
  });
}

</details>


### Screenshots or video

<details>
<summary>Screenshots or video demonstration</summary>
![Simulator Screenshot - iPhone 15 Pro Max - 2024-08-26 at 14 15 14](https://github.com/user-attachments/assets/bc673bf0-76d0-4072-b967-49365b1c90d6)
![simulator_screenshot_3ECC9736-6D9E-4689-A413-3E1DB2F26FFC](https://github.com/user-attachments/assets/424bd4d5-6e32-42bd-8776-1240dd1c465f)

<img width="394" alt="Screenshot 2024-08-26 at 3 20 41 PM" src="https://github.com/user-attachments/assets/dbb30237-fc46-4c31-87b7-a893f67230fd">

[Upload media here]

</details>


### Version

13.0.1

### Flutter Doctor output

<details><summary>Doctor output</summary>

 flutter doctor -v
[✓] Flutter (Channel stable, 3.22.2, on macOS 14.6.1 23G93 darwin-x64, locale
    en-US)
    • Flutter version 3.22.2 on channel stable at
      /Users/aditiallady/devlopment/flutter
    • Upstream repository https://github.com/flutter/flutter.gitFramework revision 761747bfc5 (3 months ago), 2024-06-05 22:15:13 +0200Engine revision edd8546116
    • Dart version 3.4.3DevTools version 2.34.3

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Users/aditiallady/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0Java binary at: /Applications/Android
      Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      17.0.10+0-17.0.10b1087.21-11572160)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.4)
    • Xcode at /Applications/Xcode.app/Contents/DeveloperBuild 15F31d
    • CocoaPods version 1.15.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2023.3)
    • Android Studio at /Applications/Android Studio.app/ContentsFlutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutterDart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dartJava version OpenJDK Runtime Environment (build
      17.0.10+0-17.0.10b1087.21-11572160)

[✓] VS Code (version 1.92.2)
    • VS Code at /Applications/Visual Studio Code.app/ContentsFlutter extension version 3.94.0

[✓] Connected device (4 available)
    • Aditi’s iPhone (mobile)    • 00008130-000E21A004298D3A            • ios
      • iOS 17.5.1 21F90
    • iPhone 15 Pro Max (mobile) • 1F14C548-F714-4573-8B73-4DA1E72B59A1 • ios
      • com.apple.CoreSimulator.SimRuntime.iOS-17-5 (simulator)
    • macOS (desktop)            • macos                                •
      darwin-x64     • macOS 14.6.1 23G93 darwin-x64
    • Chrome (web)               • chrome                               •
      web-javascript • Google Chrome 128.0.6613.84

[✓] Network resources
    • All expected network resources are available.

• No issues found!


</details>
@alladyaditi
Copy link
Author

Future _getCurrentLocation() async {
_currentPosition = await geolocator.Geolocator.getCurrentPosition(
locationSettings: const geolocator.LocationSettings(
accuracy: geolocator.LocationAccuracy.high));
if (!mounted) return;

//_initialCameraOptions = _getCameraOptions(_currentPosition);
_mapboxMap.flyTo(_getCameraOptions(_currentPosition),
    MapAnimationOptions(duration: 1000));
_updateLocationPuck();

}

void _enableLocationUpdates() {
geolocator.Geolocator.getPositionStream(
locationSettings: const geolocator.LocationSettings(
accuracy: geolocator.LocationAccuracy.high))
.listen((geolocator.Position position) {
if (!mounted) return;

  setState(() {
    _currentPosition = position;
    _updateLocationPuck();
  });
});

} used this code works in android but returns the error above what should i do really need help please?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

13 participants
@alladyaditi and others