Skip to content

Instantly share code, notes, and snippets.

@mskasal
Last active October 4, 2022 19:57
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mskasal/326d29626dcd169a4d1b4a142081f6ee to your computer and use it in GitHub Desktop.
Save mskasal/326d29626dcd169a4d1b4a142081f6ee to your computer and use it in GitHub Desktop.
Location provider for flutter projects, Riverpod, Location
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:location/location.dart';
class PersonLocationProvider extends ChangeNotifier {
Location _location = new Location();
PermissionStatus _permissionGranted;
StreamController<LocationData> currentLocation = StreamController.broadcast();
PersonLocationProvider() {
_init();
}
_checkPermission() async {
_permissionGranted = await _location.hasPermission();
if (_permissionGranted == PermissionStatus.denied) {
_permissionGranted = await _location.requestPermission();
if (_permissionGranted != PermissionStatus.granted) {
return;
}
}
}
_init() {
_checkPermission();
currentLocation.addStream(_location.onLocationChanged);
}
}
final locationProvider = ChangeNotifierProvider<PersonLocationProvider>((ref) {
return PersonLocationProvider();
});
final locationStreamProvider = StreamProvider.autoDispose<LocationData>(
(ref) {
ref.maintainState = true;
final stream = ref.read(locationProvider).currentLocation.stream;
return stream;
},
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment