Общие настройки сохранить адрес местоположения из геолокатора - PullRequest
0 голосов
/ 06 мая 2020

Мне удалось получить текущее местоположение с помощью геолокатора, но я хочу кэшировать и восстановить строковый адрес без использования lastKnownLocation в геолокаторе. Я использую общие настройки, но не могу заставить их работать. Я использовал общие предпочтения несколько раз в других своих кодах, но с геолокатором это было сложно. и я супер новичок в flutter / dart

code:

  final Geolocator geolocator = Geolocator()..forceAndroidLocationManager;
  Position _currentPosition;
  String _currentAddress;
  String _locationCache;
  String key = "location_cache";

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


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text("current location = " + _currentAddress),
            Text("last location = " + __locationCache) // HERE GET STORED DATA ISNT WORKING
          ],
        ),
      ),
    );
  }

  _getCurrentLocation() {
    geolocator
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
        .then((Position position) {
      setState(() {
        _currentPosition = position;
      });

      _getAddressFromLatLng();
    }).catchError((e) {
      print(e);
    });
  }

  _getAddressFromLatLng() async {
    try {
      List<Placemark> p = await geolocator.placemarkFromCoordinates(
          _currentPosition.latitude, _currentPosition.longitude);

      Placemark place = p[0];

      setState(() {
        _currentAddress = "${place.country}";
      });

      saveAddress();
    } catch (e) {
      print(e);
    }
  }

  Future<bool> saveAddress() async { 
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return await prefs.setString(key, _currentAddress);
  }

  Future<String> retrieveAddress() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    //Return String
    return prefs.getString(key) ?? "";
  }

  loadAddress() {
    retrieveAddress().then((value) {
      setState(() {
        _locationCache = value;
      });
    });
  }
}

вот рабочий код без _locationCache:

image

Спасибо за ваше время

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

нашел решение. просто замените функцию loadAddress() на

void save() {
    String address = _currentAddress;
    saveAddress(address);
  }

void _updateName(String address) {
  setState(() {
    this.locationCache = address;
  });
}

, а затем введите retrieveAddress().then(updateName) внутри initState()

0 голосов
/ 06 мая 2020

Если я вас правильно понял, вы хотите sh сохранить последний пойманный адрес и получить его, если у вас не активен GPS.
Для этого вы можете использовать SharedPreferences или SQLite , просто проверьте документацию о том, как их использовать.

...