Найти расстояние между местоположением пользователя и геопоинтами, хранящимися в базе данных пожарного магазина - PullRequest
0 голосов
/ 18 января 2020

Я получаю 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);
  }
  }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...