Flutter: Geolocator возвращает метод «CompareTo», который был вызван в null - PullRequest
0 голосов
/ 26 января 2020

Привет, я пытаюсь получить местоположение пользователя на моей домашней странице, и я не знаю, почему, но когда пользователь переходит на главную страницу после нажатия кнопки, появляется ошибка:

Метод 'CompareTo' был вызван на ноль. Получатель: null Пробный вызов: compareTo (-90.0)

(я думаю, это потому, что _latitude && _longitude не определены в данный момент, но что не так и почему?)

home.dart :

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:geolocator/geolocator.dart';
import 'package:latlong/latlong.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => new _HomePageState();
}

class _HomePageState extends State<HomePage> {

  Geolocator geolocator = Geolocator();

  double _latitude;
  double _longitude;

  @override
  void initState() {
    super.initState();
    getLocation();
  }

  getLocation() async {
    Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    try {
      setState(() {
        _latitude = position.latitude;
        _longitude = position.longitude;
      });
    } on PlatformException catch (e) {
      print(e);
    }
    print('Current location lat long ' + position.latitude.toString() + " - " + position.longitude.toString());
    List<Placemark> placeMark = await Geolocator().placemarkFromCoordinates(position.latitude, position.longitude);
    print('City name ' + placeMark[0].locality);
    print('Country name ' + placeMark[0].country);
    print('Postal Code ' + placeMark[0].postalCode);
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        body: new FlutterMap(
            options: new MapOptions(
                center: new LatLng(_latitude,_longitude), minZoom: 5.0),
            layers: [
              new TileLayerOptions(
                  urlTemplate:
                  "https://api.mapbox.com/styles/v1/morraycage/ck5rzbzpa50mk1ioal9gjbavp/tiles/256/{z}/{x}/{y}@2x?access_token=XXXX",
                  additionalOptions: {
                    'accessToken': 'XXXX',
                    'id': 'mapbox.mapbox-streets-v7'
                  }),
            ])
    );
  }
}

Спасибо за ваши ответы: D

1 Ответ

1 голос
/ 26 января 2020

я думаю, вы должны использовать флаг, чтобы узнать, когда заполнены широта и долгота

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => new _HomePageState();
}

class _HomePageState extends State<HomePage> {

  Geolocator geolocator = Geolocator();

  double _latitude;
  double _longitude;
  bool _isGettingLocation;

  @override
  void initState() {
    super.initState();
    _isGettingLocation = true;
    getLocation();
  }

  getLocation() async {
    Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    try {
      setState(() {
        _latitude = position.latitude;
        _longitude = position.longitude;
        _isGettingLocation = false;
      });
    } on PlatformException catch (e) {
      print(e);
    }
    print('Current location lat long ' + position.latitude.toString() + " - " + position.longitude.toString());
    List<Placemark> placeMark = await Geolocator().placemarkFromCoordinates(position.latitude, position.longitude);
    print('City name ' + placeMark[0].locality);
    print('Country name ' + placeMark[0].country);
    print('Postal Code ' + placeMark[0].postalCode);
  }

  @override
  Widget build(BuildContext context) {
    return _isGettingLocation ? Center(
            child : CircularProgressIndicator()
       ) : Scaffold(
            body: new FlutterMap(
                options: new MapOptions(
                    center: new LatLng(_latitude,_longitude), minZoom: 5.0),
                layers: [
                  new TileLayerOptions(
                      urlTemplate:
                      "https://api.mapbox.com/styles/v1/morraycage/ck5rzbzpa50mk1ioal9gjbavp/tiles/256/{z}/{x}/{y}@2x?access_token=XXXX",
                      additionalOptions: {
                        'accessToken': 'XXXX',
                        'id': 'mapbox.mapbox-streets-v7'
                      }),
                ])
        );
      }
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...