import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flushbar/flushbar.dart'; import '../main.dart'; import 'package:location/location.dart'; import 'package:permission_handler/permission_handler.dart' as pHandler; import 'package:app_settings/app_settings.dart'; class Util{ JsonDataPostRaw(Map jsonData, String url,{timeout:false}) async{ const JsonDecoder decoder = const JsonDecoder(); try { var response; if (timeout) response = await http.post( '$url', headers: {'Content-type': 'application/json'}, body: json.encode(jsonData)).timeout( const Duration(seconds: 10)); else response = await http.post( '$url', headers: {'Content-type': 'application/json'}, body: json.encode(jsonData)); final Map data = decoder.convert(response.body); return data; } on TimeoutException catch(e){ return {"STATUS":0,"DATA":"Request Timeout"}; } on Exception catch(exception){ print(url); // Toast("Not Connected to Server", Colors.red); return {"STATUS":0,"DATA":"Not Connected to Server. $exception"}; } } showLoading(context,{dissmissable=false,onwillpop}){ showDialog( context: context, builder: (BuildContext context) { return WillPopScope( onWillPop: onwillpop??()async{return true;}, child: new Center( child: new CircularProgressIndicator(), ), ); }, barrierDismissible: dissmissable, ); } showFlushbar(context,text,{color:Colors.grey}){ Flushbar( message: "$text", backgroundColor: color, duration: Duration(seconds: 5), )..show(context); } streamLocation(context)async{ print('checking location'); bool gpsEnabled = false; pHandler.PermissionStatus permissionEnabled = await pHandler.Permission.locationWhenInUse.status; if(await location.serviceEnabled()){ gpsEnabled = await location.serviceEnabled(); } else{ print('requesting gps'); gpsEnabled = await location.requestService(); await streamLocation(context); } // print([gpsEnabled,permissionEnabled]); if(gpsEnabled){ if(permissionEnabled == pHandler.PermissionStatus.granted){ if(locationStream==null){ locationStream = location.onLocationChanged.listen((LocationData event) { currentPosisiton = event; }); } } else if(permissionEnabled==pHandler.PermissionStatus.denied || permissionEnabled==pHandler.PermissionStatus.undetermined){ print('requesting permission'); showFlushbar(context,'Location permission is needed to locate your REAL location. Please grant the permission!'); await Future.delayed(Duration(seconds: 1)); await pHandler.Permission.locationWhenInUse.request(); await streamLocation(context); } else if (permissionEnabled==pHandler.PermissionStatus.permanentlyDenied){ showFlushbar(context,'It seems, your system security explicitly denied the permission to access your location. Please MANUALLY enable it in setings!'); await Future.delayed(Duration(seconds: 3)); AppSettings.openAppSettings(); exit(0); } } } }