geolocator 6.0.0+1 distanceBetween() not working in flutter

2,376

Solution 1

[Solved]

Distance Between

GeolocatorPlatform.distanceBetween(startLatitude, startLongitude, endLatitude, endLongitude);

For Bearing distance

GeolocatorPlatform.bearingBetween(startLatitude, startLongitude, endLatitude, endLongitude);

At the time of writing this answer official documentation is not correct. I tried both other answers above and not worked if that's the case with you try these code it worked for me and hopefully this will fix your problem too. [ version : geolocator 6.0.0+1 ]

git https://github.com/Baseflow/flutter-geolocator/issues/496#issuecomment-683861804

Solution 2

Looking at the GitHub page and source for the package, the documentation on pub.dev appears to be out of date. The correct usage seems to be:

double distanceInMeters = GeolocatorPlatform.instance.distanceBetween(
  52.2165157, 
  6.9437819, 
  52.3546274, 
  4.8285838,
);
Share:
2,376
Arvind suresh
Author by

Arvind suresh

Updated on December 23, 2022

Comments

  • Arvind suresh
    Arvind suresh over 1 year

    i hope everyone is safe i am using flutter,and i want to calculate distance between two locations so i have installed geolocator 6.0.0+1 from pub.dev here, with that i can find the location of user but i cannot use the inbuilt method called ** distanceBetween()** which is used to calculate the distance between two latitudes and longitudes, it shows me a error whis says **The method 'distanceBetween' isn't defined for the type '_RegisterState'. ** i have used the method as shown in the documentation here

    here is my code:

    import 'dart:html;
    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';
    import 'package:staffattendence05/Usermodel.dart';
    import 'package:staffattendence05/add_user.dart';
    import 'package:staffattendence05/authenticate.dart';
    import 'package:staffattendence05/fauth.dart';
    import 'package:staffattendence05/home.dart';
    import 'package:staffattendence05/styling.dart';
    import 'package:flutter_spinkit/flutter_spinkit.dart';
    import 'package:staffattendence05/loading.dart';
    import 'package:geolocator/geolocator.dart';
    import 'Login_ins.dart';
    
    class Register extends StatefulWidget {
      @override
      _RegisterState createState() => _RegisterState();
    }
    
    class _RegisterState extends State<Register> {
      @override
      final _formkey = GlobalKey<FormState>();
    
      String email = '';
    
      String error = '';
    
      String password = '';
    
      bool loading = false;
    
      final Authservice _auth = Authservice();
    
      Widget build(BuildContext context) {
        return loading
            ? Loading()
            : Scaffold(
                backgroundColor: Colors.teal,
                appBar: AppBar(
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(5),
                  ),
                  title: Text(
                    "Register your institute",
                    style:
                        TextStyle(fontWeight: FontWeight.bold, color: Colors.white),
                  ),
                  actions: <Widget>[
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: FlatButton.icon(
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(10)),
                        onPressed: () {
                          Navigator.push(
                            context,
                            MaterialPageRoute(builder: (context) => Loginins()),
                          );
                        },
                        icon: Icon(Icons.perm_identity),
                        label: Text("institute Login"),
                        color: Colors.teal,
                      ),
                    )
                  ],
                  backgroundColor: Colors.green[400],
                ),
                body: Padding(
                  padding: const EdgeInsets.all(36.0),
                  child: Form(
                    key: _formkey,
                    child: Column(
                      children: <Widget>[
                        SizedBox(
                          height: 120.0,
                        ),
                        TextFormField(
                          decoration: styling.copyWith(hintText: "Admin email"),
                          validator: (val) {
                            return val.isEmpty
                                ? "please enter an valid email id"
                                : null;
                          },
                          onChanged: (val) {
                            email = val;
                          },
                        ),
                        SizedBox(
                          height: 20.0,
                        ),
                        TextFormField(
                          obscureText: true,
                          decoration: styling.copyWith(hintText: "Admin password"),
                          validator: (val) => val.length < 6
                              ? "a password should contain atleast 6 characters"
                              : null,
                          onChanged: (val) => password = val,
                        ),
                        SizedBox(
                          height: 25.0,
                        ),
                        RaisedButton(
                          shape: RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(7)),
                          color: Colors.green[400],
                          child: Text(
                            "Register",
                            style: TextStyle(fontWeight: FontWeight.bold),
                          ),
                          onPressed: () async {
                            if (_formkey.currentState.validate()) {
                              setState(() {
                                loading = true;
                              });
                              Position Insposition = await getCurrentPosition(
                                  desiredAccuracy: LocationAccuracy.best);
                              dynamic result =
                                  await _auth.Signupwithemailandpassword(
                                      email, password, Insposition);
                              final String adminname = email;
                              double distanceInMeters = distanceBetween(
                                  52.2165157, 6.9437819, 52.3546274, 4.8285838);
                              print("1111111111111$adminname");
                              print(Insposition);
                              if (result == null) {
                                setState(() {
                                  loading = false;
                                  error = 'Please enter a valid email address!';
                                });
                              } else {
                                Navigator.push(
                                  context,
                                  MaterialPageRoute(
                                      builder: (context) => Home(
                                            adminname: adminname,
                                          )),
                                );
                              }
                            }
                          },
                        ),
                        SizedBox(height: 20.0),
                        Text(
                          error,
                          style: TextStyle(
                              color: Colors.red[400],
                              fontWeight: FontWeight.bold,
                              fontSize: 14),
                        )
                      ],
                    ),
                  ),
                ),
              );
      }
    }
    

    `it would be appreciable if someone point the mistake i did. thank you in advance.