diff --git a/lib/addevent.dart b/lib/addevent.dart index c469156b8ae3c3d47421a524dbdcddf5c55622d7..2eae6aba7add7ad01f5650b13da8a268759e4067 100644 --- a/lib/addevent.dart +++ b/lib/addevent.dart @@ -4,20 +4,6 @@ import 'datamodel.dart'; import 'dart:async'; import 'package:geolocator/geolocator.dart'; - -Future<Position> fetchPosition() async { - Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high); - print(position.longitude); //Output: 80.24599079 - print(position.latitude); //Output: 29.6593457 - print(position.altitude); - - String long = position.longitude.toString(); - String lat = position.latitude.toString(); - String alt = position.altitude.toString(); - - return position; -} - class AddEvent extends StatefulWidget { @override State<AddEvent> createState() => _AddEventPageState(); @@ -25,9 +11,92 @@ class AddEvent extends StatefulWidget { class _AddEventPageState extends State<AddEvent> { final List<bool> _isSelected = [true]; + bool servicestatus = false; + bool haspermission = false; + late LocationPermission permission; + late Position position; + late String long = ""; + late String lat = ""; + late String alt = ""; + late String accuracy = ""; + late StreamSubscription<Position> positionStream; + LocationSettings locationSettings = const LocationSettings( + accuracy: LocationAccuracy.high, + distanceFilter: 0, + ); + + getLocation() async { + position = + await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high); + print('Get Location: Lat:' + position.latitude.toString() + + ' Long:' + position.longitude.toString() + + ' Alt:' + position.altitude.toString()); + + long = position.longitude.toString(); + lat = position.latitude.toString(); + alt = position.altitude.toString(); + accuracy = position.accuracy.toString(); + + setState(() { + //refresh UI + }); + StreamSubscription<Position> positionStream = Geolocator.getPositionStream( + locationSettings: locationSettings).listen((Position position) { + print('Get Location: Lat:' + position.latitude.toString() + + ' Long:' + position.longitude.toString() + + ' Alt:' + position.altitude.toString()); + + long = position.longitude.toString(); + lat = position.latitude.toString(); + alt = position.altitude.toString(); + accuracy = position.accuracy.toString(); + + setState(() { + //refresh UI on update + }); + }); + } + + + checkGnssPermission() async { + print("CheckGnssPermission"); + servicestatus = await Geolocator.isLocationServiceEnabled(); + if(servicestatus){ + permission = await Geolocator.checkPermission(); + + if (permission == LocationPermission.denied) { + permission = await Geolocator.requestPermission(); + if (permission == LocationPermission.denied) { + print('Location permissions are denied'); + }else if(permission == LocationPermission.deniedForever){ + print('Location permissions are permanently denied'); + }else{ + haspermission = true; + } + }else{ + haspermission = true; + } + + if(haspermission){ + print('Location permissions granted'); + setState(() { + //refresh the UI + }); + + getLocation(); + } + }else{ + print("GPS Service is not enabled, turn on GPS location"); + } + + setState(() { + //refresh the UI + }); + } @override void initState() { + checkGnssPermission(); super.initState(); } @@ -115,37 +184,42 @@ class _AddEventPageState extends State<AddEvent> { }, ), TextFormField( + initialValue: lat, decoration: const InputDecoration( labelText: 'Latitude' ), ), TextFormField( + initialValue: long, decoration: const InputDecoration( labelText: 'Longitude' ), ), TextFormField( + initialValue: alt, decoration: const InputDecoration( labelText: 'Elevation' ), ), - FutureBuilder<Position>( - future: fetchPosition(), - builder: (context, snapshot){ - if (snapshot.hasData) - { - return Text(snapshot.data!.latitude.toString()); - } - else{ - return CircularProgressIndicator(); - } - } - ), + //FutureBuilder<Position>( + // future: fetchPosition(), + // builder: (context, snapshot){ + // if (snapshot.hasData) + // { + // return Text(snapshot.data!.latitude.toString()); + // } + // else{ + // return CircularProgressIndicator(); + // } + // } + //), + Text('Lat:'+lat), ]), bottomNavigationBar: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - + Text('No-Fix'), + SizedBox(width: 50), ToggleButtons( children: <Widget>[ Icon(Icons.my_location), @@ -157,7 +231,6 @@ class _AddEventPageState extends State<AddEvent> { }); }, ), - SizedBox(width: 50), FloatingActionButton( heroTag: null,