Skip to content
Snippets Groups Projects
addevent.dart 18.51 KiB
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'datamodel.dart';
import 'dart:async';
import 'package:geolocator/geolocator.dart';

class AddEvent extends StatefulWidget {
  const AddEvent({Key? key}) : super(key: key);

  @override
  State<AddEvent> createState() => _AddEventPageState();
}

class _AddEventPageState extends State<AddEvent>  {
  bool syncGNSSData = true;
  late String long = "";
  late String lat = "";
  late String alt = "";
  late double accuracy = 0.0;
  late StreamSubscription<Position> streamHandler;  //For canceling GNSS stream on dispose

  Future startGNSS() async {
    debugPrint("Check Location Permission");
    bool serviceStatus = false;
    bool hasPermission = false;
    serviceStatus = await Geolocator.isLocationServiceEnabled();
    if(serviceStatus){
      LocationPermission permission = await Geolocator.checkPermission();

      if (permission == LocationPermission.denied) {
        permission = await Geolocator.requestPermission();
        if (permission == LocationPermission.denied) {
          debugPrint('Location permissions are denied');
        }else if(permission == LocationPermission.deniedForever){
          debugPrint('Location permissions are permanently denied');
        }else{
          hasPermission = true;
        }
      }else{
        hasPermission = true;
      }
      if(hasPermission){
        debugPrint('Location permissions granted');
        if(mounted){
          setState(() {
            //refresh the UI
          });}
        debugPrint('Starting location stream');
        streamHandler = Geolocator.getPositionStream(
            locationSettings: const LocationSettings(
              accuracy: LocationAccuracy.high,
              distanceFilter: 0,
            )).listen((Position position) {
          debugPrint('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;

          if (syncGNSSData == true) {
            if(mounted){
              setState(() {
                //refresh UI on update
              });}
          }