When google maps loads, location permission only asks to "Allow only while using the app". I want it to ask permission to allow all the time so that the location can be queried in the background by workmanger. How do I make it prompt as "Allow all the time"? Full code here. Thanks for reading. This should be pretty easy to figure out, sometimes I can get it to work on another github example here but somehow it breaks after I make changes.
import 'dart:math';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart' as loco;
import 'package:ungshowlocation/models/marker_collect_model.dart';
import 'package:ungshowlocation/widget/add_location.dart';
import 'package:ungshowlocation/widget/detail_marker.dart';
import 'package:ungshowlocation/widget/my_service.dart';
class ShowMap extends StatefulWidget {
final double lat;
final double lng;
ShowMap({Key key, this.lat, this.lng}) : super(key: key);
@override
_ShowMapState createState() => _ShowMapState();
}
class _ShowMapState extends State<ShowMap> {
// Field
double lat, lng;
BitmapDescriptor policeIcon;
List<Marker> list = List();
List<String> listDocuments = List();
final Set<Polyline> _polyline = {};
GoogleMapController controller;
List<LatLng> latlngSegment1 = List();
List<LatLng> latlngSegment2 = List();
static LatLng _lat1 = LatLng(45.19, -121.59);
static LatLng _lat2 = LatLng(45.30, -122.20);
static LatLng _lat3 = LatLng(45.11, -122.61);
static LatLng _lat4 = LatLng(45.42, -122.62);
static LatLng _lat5 = LatLng(45.34, -122.32);
static LatLng _lat6 = LatLng(45.21, -122.2);
bool _myLocationButtonEnabled = true;
bool _myLocationEnabled = true;
// Method
@override
void initState() {
super.initState();
// findLatLng();
readDataFromFirebase();
setState(() {
lat = widget.lat;
lng = widget.lng;
latlngSegment1.add(_lat1);
latlngSegment1.add(_lat2);
latlngSegment1.add(_lat3);
latlngSegment1.add(_lat4);
//line segment 2
latlngSegment2.add(_lat4);
latlngSegment2.add(_lat5);
latlngSegment2.add(_lat6);
latlngSegment2.add(_lat1);
});
}
Future<Null> readDataFromFirebase() async {
print('###############readDataFromFirebase Work####################');
Firestore firestore = Firestore.instance;
CollectionReference collectionReference =
firestore.collection('usertest');
await collectionReference.snapshots().listen((event) {
List<DocumentSnapshot> snapshots = event.documents;
for (var map in snapshots) {
MarkerCollectModel model = MarkerCollectModel.fromMap(map.data);
String nameDocument = map.documentID;
listDocuments.add(nameDocument);
print('Name ==>> ${model.name}');
Marker marker = createMarker(model, nameDocument);
setState(() {
list.add(marker);
print('myMarkers set lenght ==>> ${myMarkers().length}');
});
}
});
}
Marker createMarker(MarkerCollectModel markerCollectModel, String nameDocument) {
Marker marker;
Random random = Random();
int i = random.nextInt(100);
String idString = 'id$i';
marker = Marker(
markerId: MarkerId(idString),
position: LatLng(markerCollectModel.lat, markerCollectModel.lng),
infoWindow: InfoWindow(
title: markerCollectModel.name, snippet: markerCollectModel.detail),
onTap: () {
print('You Tab Name ==>> ${markerCollectModel.name}');
MaterialPageRoute route = MaterialPageRoute(
builder: (context) => DetailMarker(
model: markerCollectModel,nameDocument: nameDocument,
),
);
Navigator.push(context, route);
},
);
return marker;
}
Future<void> findLatLng() async {
loco.LocationData locationData = await findLocation();
setState(() {
lat = locationData.latitude;
lng = locationData.longitude;
print('lat =>>> $lat, lng ===>> $lng');
});
}
Future<loco.LocationData> findLocation() async {
var location = loco.Location();
try {
return await location.getLocation();
} catch (e) {
print('e location = ${e.toString()}');
return null;
}
}
Set<Marker> myMarkers() {
list.add(localMarker());
return list.toSet();
}
Marker localMarker() {
return Marker(
infoWindow: InfoWindow(
),
markerId: MarkerId('myLocotion'),
);
}
Widget showMap() {
print('latlng on showmap ===>>> $lat, $lng');
LatLng centerLatLng = LatLng(lat, lng);
CameraPosition cameraPosition =
CameraPosition(target: centerLatLng, zoom: 16.0);
return Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition: cameraPosition,
mapType: MapType.normal,
markers: myMarkers(),
polylines: _polyline,
myLocationEnabled: _myLocationEnabled,
myLocationButtonEnabled: _myLocationButtonEnabled,
onMapCreated: _onMapCreated,
),
// addButton(),
],
);
}
Widget addButton() {
return Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Container(
margin: EdgeInsets.only(
right: 40.0,
bottom: 40.0,
),
child: FloatingActionButton(
onPressed: () {
MaterialPageRoute route = MaterialPageRoute(
builder: (value) => MyService(
currentWidget: PageWidget(
),
));
Navigator.of(context)
.pushAndRemoveUntil(route, (value) => false);
},
child: Icon(
Icons.add_circle,
size: 36.0,
),
),
),
],
),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: lat == null
? Center(
child: CircularProgressIndicator(),
)
: showMap(),
);
}
void _onMapCreated(GoogleMapController controllerParam) {
setState(() {
controller = controllerParam;
_polyline.add(Polyline(
polylineId: PolylineId('line1'),
visible: true,
//latlng is List<LatLng>
points: latlngSegment1,
width: 2,
color: Colors.blue,
));
//different sections of polyline can have different colors
_polyline.add(Polyline(
polylineId: PolylineId('line2'),
visible: true,
//latlng is List<LatLng>
points: latlngSegment2,
width: 2,
color: Colors.red,
));
});
}
}