Я получаю null
в местоположении пользователя, а также null
при доступе к геопункту из пожарного магазина.
Я хочу, чтобы расстояние между пользовательской позицией и геопунктом было сохранено в базе данных firebase, но я получаю null
в пользовательском местоположении и в местоположении базы данных.
Я хочу показать расстояние в моем списке в соответствии с различными геопоинтами, хранящимися в базе данных.
Ниже приведено то, что я пытался сделать до сих пор:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class ListPage extends StatefulWidget {
@override
_ListPageState createState() => _ListPageState();
}
class _ListPageState extends State<ListPage> {
final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;
Position _currentPosition;
String _currentAddress;
Future getMNO() async{
var firestore = Firestore.instance;
QuerySnapshot qn = await firestore.collection("mochies").getDocuments();
return qn.documents;
}
@override
Widget build(BuildContext context) {
_getCurrentLocation();
return Container(
child: FutureBuilder(
future: getMNO(),
builder: (_, snapshot){
if(snapshot.connectionState== ConnectionState.waiting){
return Center(
child: Text("Loading...."),
);
}else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder:(_, index){
return Container(
child: Card(
color:Colors.deepOrangeAccent[100],
elevation: 8.0,
margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 6.0),
child:Container(
decoration: BoxDecoration(color: Colors.grey[900]),
child:ListTile(
contentPadding: EdgeInsets.symmetric(vertical:10,horizontal: 20),
leading: new Container(
padding: EdgeInsets.only(right: 12.0),
decoration: new BoxDecoration(
border: new Border(
right: new BorderSide(width: 1.0, color: Colors.orangeAccent[700]))),
child: new Container(
height: 60,
width: 60,
decoration: new BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
image: new NetworkImage("${snapshot.data[index].data["image"]}"),
fit: BoxFit.fill,
),
)
),
),
title: Text(
snapshot.data[index].data["Mochi No"],
style: TextStyle(color: Colors.white,fontSize:20 , fontWeight: FontWeight.bold),
),
subtitle: Row(
children: <Widget>[
Icon(Icons.location_on, color: Colors.orangeAccent[700],size:20),
if (_currentPosition!= null)
Text("${Geolocator().distanceBetween(
_currentPosition.latitude,
_currentPosition.longitude,
snapshot.data[index].data["Loacaion"].latitude,
snapshot.data[index].data["Loacaion"].longitude).toString()} meters away ",
style: TextStyle(
color: Colors.white))
] ),
trailing:
Icon(Icons.keyboard_arrow_right, color: Colors.orangeAccent[700], size: 30.0)
)
)
)
);
});
}
})
);
}
_getCurrentLocation() {
geolocator
.getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
.then((Position position) {
setState(() {
_currentPosition = position;
});
}).catchError((e) {
print("null");
});
}
_getAddressFromLatLng() async {
try {
List<Placemark> p = await geolocator.placemarkFromCoordinates(
_currentPosition.latitude, _currentPosition.longitude);
Placemark place = p[0];
setState(() {
_currentAddress =
"${place.locality}, ${place.postalCode}, ${place.country}";
});
} catch (e) {
print(e);
}
}
}