Flutter 谷歌地图:更新地图上的圆圈

时间:2021-02-09 06:08:51

标签: flutter google-maps dart

我正在尝试开发一个集成了谷歌地图的 Flutter 应用程序。谷歌地图在颤动屏幕中完美显示。该圆圈还在预定义的经纬度期间显示,但是一旦我使用用户的当前位置,该圆圈就不会显示在显示用户当前位置的地图中。

以下是我的代码:

class Get_address extends StatefulWidget{

  @override
  _Get_addressState createState() => _Get_addressState();
}

class _Get_addressState extends State<Get_address> {

  GoogleMapController googleMapController;
  double zoomVal=5.0;
  Completer<GoogleMapController> _controller = Completer();
  Position _currentPosition;
  double latitude = 40.712776;
  double longitude = -74.005974;

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: Column(
          children: [
            Text(
              'Choose a location to see what\'s available',
              textAlign: TextAlign.center,
              style: TextStyle(
                color: Colors.lightBlue[900],
                fontWeight: FontWeight.bold,
                fontSize: 30,
              ),
            ),
            SizedBox(
              height: 20,
            ),
            Stack(
              children: [
                _buildGoogleMap(context),
                _zoomminusfunction(),
                _zoomplusfunction(),
              ],
            ),
            SizedBox(
              height: 20,
            ),
            RaisedButton(
                onPressed: getCurrentLoaction,
              child: Text('Press'),
            )
          ],
        ),
      ),
    );
  }

  Widget _zoomminusfunction() {

    return Align(
      alignment: Alignment.topLeft,
      child: IconButton(
          icon: Icon(FontAwesomeIcons.searchMinus,color:Color(0xff6200ee)),
          onPressed: () {
            zoomVal--;
            _minus( zoomVal);
          }),
    );
  }
  Widget _zoomplusfunction() {

    return Align(
      alignment: Alignment.topRight,
      child: IconButton(
          icon: Icon(FontAwesomeIcons.searchPlus,color:Color(0xff6200ee)),
          onPressed: () {
            zoomVal++;
            _plus(zoomVal);
          }),
    );
  }

  Widget _buildGoogleMap(BuildContext context) {
    return Container(
      height: 425,
      width: MediaQuery.of(context).size.width,
      child: GoogleMap(
        mapType: MapType.normal,
        initialCameraPosition:  CameraPosition(target: LatLng(40.712776, -74.005974), zoom: 12),
        onMapCreated: (GoogleMapController controller) {
          _controller.complete(controller);
        },
        myLocationButtonEnabled: true,
        circles: _myCircles(latitude,longitude),
      ),
    );
  }

  Future<void> _minus(double zoomVal) async {
    final GoogleMapController controller = await _controller.future;
    controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(target: LatLng(40.712776, -74.005974), zoom: zoomVal)));
  }
  Future<void> _plus(double zoomVal) async {
    final GoogleMapController controller = await _controller.future;
    controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(target: LatLng(40.712776, -74.005974), zoom: zoomVal)));
  }

  void getCurrentLoaction() async{
    Geolocator
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
        .then((Position position) {
      setState(() async {
        _currentPosition = position;
        PermissionStatus permission;
        permission = await LocationPermissions().requestPermissions();
        final GoogleMapController controller = await _controller.future;
        controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(target: LatLng(_currentPosition.latitude,_currentPosition.longitude), zoom: 15,tilt: 50.0,
            bearing: 45.0,)));
        latitude = _currentPosition.latitude;
        longitude = _currentPosition.longitude;
      });

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

  Set<Circle> _myCircles(double latitude1, double longitude1) {
    return Set.from([Circle(
      circleId: CircleId('1'),
      center: LatLng(latitude1, longitude1),
      radius: 4000,
    )]);
  }
}

如果用户使用当前位置,有人可以帮助我如何在地图上显示圆圈吗?

0 个答案:

没有答案