Flutter geolocator插件Geolocator()。placemarkFromAddress()和Geolocator()。placemarkFromCoordinates()不起作用

时间:2020-03-13 07:28:19

标签: flutter dart geolocation

我正在尝试搜索地址,然后尝试通过Geolocator获取该位置的位置,然后尝试将相机位置设置为该位置,但是它不起作用。

我发现了Geolocator的两种方法的一些例外。 Geolodator的所有其他方法对我来说都很好:

1。 Geolocator()。placemarkFromAddress()显示:

PlatformException(ERROR_GEOCODING_ADDRESS,服务不可用,空)

2。 Geolocator()。placemarkFromCoordinates()显示:

PlatformException(ERROR_GEOCODING_COORDINATES,服务不可用,空)


此处是我正在尝试的代码:

try {
  List<Placemark> placemark = await Geolocator().placemarkFromAddress(searchAddress);
  Placemark newPlace = placemark[0];
  controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
     target: LatLng(newPlace.position.latitude,newPlace.position.longitude),
     zoom: 15.0,
  )));
}catch(e){
   print(e);
}

4 个答案:

答案 0 :(得分:2)

placemarkFromCoordinates已从插件“ geolocator”移至“ geocoding”,只需在pubspec.yaml和用户placemarkFromCoordinates中添加插件“ geocoding”

答案 1 :(得分:1)

我从here中找到了该问题的解决方案。

我只是重新加载手机/设备,对我来说一切正常。

Tap here for more

答案 2 :(得分:0)

现在已移至 https://pub.dev/packages/geocoding

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geocoding/geocoding.dart';

class MapScreen02 extends StatefulWidget {
  @override
  _MapScreen02State createState() => _MapScreen02State();
}

class _MapScreen02State extends State<MapScreen02> {
  GoogleMapController mapController;
  String searchAdd;
  // List<Location> locations = await locationFromAddress("Gronausestraat 710, Enschede");
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: [
          GoogleMap(
            onMapCreated: onMapCreated,
            initialCameraPosition:
                CameraPosition(target: LatLng(40.7128, -74.0060), zoom: 10.0),
          ),
          Positioned(
            top: 30,
            right: 15,
            left: 15,
            child: Container(
              height: 50,
              width: double.infinity,
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(10),
                color: Colors.white,
              ),
              child: TextField(
                decoration: InputDecoration(
                  hintText: 'Enter Address',
                  border: InputBorder.none,
                  contentPadding: EdgeInsets.only(
                    left: 15,
                    top: 15,
                  ),
                  suffixIcon: IconButton(
                    icon: Icon(Icons.search),
                    onPressed: searchnavigate,
                    iconSize: 30,
                  ),
                ),
                onChanged: (val) {
                  setState(() {
                    searchAdd = val;
                  });
                },
              ),
            ),
          ),
        ],
      ),
    );
  }

  searchnavigate() {
    locationFromAddress(searchAdd).then((result) {
      mapController.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
        target: LatLng(result[0].latitude, result[0].longitude),
        zoom: 10,
      )));
    });
  }

  void onMapCreated(controller) {
    setState(() {
      mapController = controller;
    });
  }
}

答案 3 :(得分:0)

改用 GeoCoding 包。