tlserver / flutter_map_location_marker

A flutter map plugin for displaying device current location.
https://pub.dev/packages/flutter_map_location_marker
BSD 3-Clause "New" or "Revised" License
97 stars 81 forks source link

Conflict while using Geolocator plugin #58

Closed jesussmile closed 1 year ago

jesussmile commented 1 year ago

Hi, great library, I am using your plugin while calling Geolocator to get some streams and updates as well, I am not entirely sure but i think there is a conflict issue when i use Geolocator to get location in my class for example


class LocationService {
  BuildContext context;
  MapController? mapController;

  bool initializeGeofire;

  LocationService(
      {required this.context,
      this.mapController,
      required this.initializeGeofire});

  late Position position;

  Future<void> locatePosition() async {
    final appData = context.read<ProviderService>();

    position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);
    print("This is your Position:: " + position.toString());
    LatLng initPosT = LatLng(position.latitude, position.longitude);

    appData.setPosition(initPosT);

    GeoPoint initPos =
        GeoPoint(latitude: position.latitude, longitude: position.longitude);
    print('mapp $initPos');
    initPosition = initPos;
    mapController!.move(initPosT, 18);
    appData.myCurrentLocation(initPos);
    String address =
        // ignore: unnecessary_cast
        await (AssistantMethods.searchCoordinateAddress(position, context)
            as FutureOr<String>);
    print("This is your Address:: " + address);
    // if (!loadGeoFire) {
    InitializeGeoFire initializeGeoFire = initializeGeoFire_helper();
    if (initializeGeofire) {
      initializeGeoFire.initializeGeoFireListener();
    }
    // uName = userCurrentInfo.name;
    Provider.of<ProviderService>(context, listen: false)
        .closeSplashScreen(false, true);
    AssistantMethods.retrieveHistoryInfo(context);
  }

  InitializeGeoFire initializeGeoFire_helper() {
    return InitializeGeoFire(
      position: position,
      context: context,
    );
  }
}

when executing this code i get something like this

/FlutterGeolocator( 9739): Geolocator position updates stopped
E/FlutterGeolocator( 9739): There is still another flutter engine connected, not stopping location service
D/SensorManager( 9739): unregisterListener :: 5, Rotation Vector  Non-wakeup,
4
I/flutter ( 9739): obtainTrip  riderandroid1
D/SensorManager( 9739): unregisterListener :: 28, lsm6dsm Accelerometer Non-wakeup,
3
I/flutter ( 9739): obtainTrip  riderandroid1
I/flutter ( 9739): obtainTrip  riderandroid2
D/SensorManager( 9739): unregisterListener :: 26, AK09918 Magnetometer,
I/flutter ( 9739): obtainTrip  riderandroid1
I/chatty  ( 9739): uid=11836(com.example.geo_rider) 1.ui identical 1 line
I/flutter ( 9739): obtainTrip  riderandroid1
I/flutter ( 9739): obtainTrip  riderandroid2
I/flutter ( 9739): obtainTrip  riderandroid1
I/chatty  ( 9739): uid=11836(com.example.geo_rider) 1.ui identical 2 lines
I/flutter ( 9739): obtainTrip  riderandroid1
D/SensorManager( 9739): registerListener :: 5, Rotation Vector  Non-wakeup, 100000, 0,
D/SensorManager( 9739): registerListener :: 28, lsm6dsm Accelerometer Non-wakeup, 100000, 0,
D/SensorManager( 9739): registerListener :: 26, AK09918 Magnetometer, 100000, 0,
D/SensorManager( 9739): unregisterListener :: 5, Rotation Vector  Non-wakeup,
D/SensorManager( 9739): unregisterListener :: 28, lsm6dsm Accelerometer Non-wakeup,
D/SensorManager( 9739): unregisterListener :: 26, AK09918 Magnetometer,
D/SensorManager( 9739): registerListener :: 5, Rotation Vector  Non-wakeup, 100000, 0,
I/flutter ( 9739): obtainTrip  riderandroid1

how should i approach this issue ? I want to get current location lat / lon and perhaps a stream.

tlserver commented 1 year ago

This question is mentioned in readme.md in FAQ section. I am closing this now, reopen if you still have problem about this.

jesussmile commented 1 year ago

Ah! sorry about that, working fine Here, updated code and some debug

Future<void> locatePosition() async {
    final appData = context.read<ProviderService>();

    _locationSubscription = LocationMarkerDataStreamFactory()
        .fromGeolocatorPositionStream()
        .asBroadcastStream()
        .listen((location) async {
      if (location != null) {
        initPosT = LatLng(location.latitude, location.longitude);
        initPos = GeoPoint(
            latitude: location.latitude, longitude: location.longitude);
        appData.setPosition(initPosT);
        mapController!.move(initPosT, 18);
        appData.myCurrentLocation(initPos);
        String address =
            await AssistantMethods.searchCoordinateAddress(initPosT, context);
        print("This is your Address:: $address");
        if (initializeGeofire) {
          InitializeGeoFire initializeGeoFire = initializeGeoFire_helper();
          initializeGeoFire.initializeGeoFireListener();
        }
        Provider.of<ProviderService>(context, listen: false)
            .closeSplashScreen(false, true);
        AssistantMethods.retrieveHistoryInfo(context);
        _locationSubscription.cancel();
      }
    });
  }

However I get some Sensor manager events, unregisterListener/ registerListener, is it normal ?

D/SensorManager( 4364): unregisterListener :: 5, Rotation Vector  Non-wakeup,
D/SensorManager( 4364): unregisterListener :: 28, lsm6dsm Accelerometer Non-wakeup,
D/SensorManager( 4364): unregisterListener :: 26, AK09918 Magnetometer,
D/SensorManager( 4364): registerListener :: 5, Rotation Vector  Non-wakeup, 100000, 0,
D/SensorManager( 4364): registerListener :: 28, lsm6dsm Accelerometer Non-wakeup, 100000, 0,
D/SensorManager( 4364): registerListener :: 26, AK09918 Magnetometer, 100000, 0,
tlserver commented 1 year ago

I am not sure about that it is normal or not. It is not handle by this plug-in but geolocator.