标记在热重装后显示,但在我按下按钮时不显示。 (Flutter-Google地图)

时间:2020-02-18 04:59:48

标签: flutter

当我尝试在Google地图中放置标记时,直到单击“热重载”后,标记才会显示。我在某处缺少setState()吗?

我的问题是我不知道在哪里。该软件包的文档确实令人迷惑,因为Google Maps Controller自推出以来就已进行了更新和更改。许多指南根本无济于事,因为代码已更改。

import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter/material.dart';
import 'package:mobile_app_dev/UI/base_widget.dart';
import 'package:mobile_app_dev/UI/widgets.dart';

import '../main.dart';

class myMapScreen extends StatefulWidget {
  @override
  myMapState createState() => myMapState();

}

class myMapState extends State<myMapScreen> {

  PageController _pageController;
  GoogleMapController mapController;
  LatLng center = const LatLng(37.352727, -122.034227);
//  Location location = new Location();
  Position currentLocation;

  final Set<Marker> _markers = {};

  void _getLocation() async {
    var currentLocation = await Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.best);

    setState(() {
      _markers.clear();
      final marker = Marker(
        markerId: MarkerId("curr_loc"),
        position: LatLng(currentLocation.latitude, currentLocation.longitude),
        infoWindow: InfoWindow(title: 'Your Location'),
        icon: BitmapDescriptor.defaultMarker
      );
      _markers.add(marker);
    });

    currentLocation = currentLocation;
  }


  void _onMapCreated(GoogleMapController controller) {
    mapController = controller;
  }

  @override
  void initState() {
    _markers.clear();
    super.initState();
    _pageController = PageController();
    _getLocation();
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return BaseWidget(builder: (context, sizingInformation) {
      return Scaffold(
        backgroundColor: MyApp.backgroundColor,
        appBar: AppBar(
          automaticallyImplyLeading: true,
          backgroundColor: MyApp.appBarColor,
          title: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[

              Text(
                'Map View',
                style: TextStyle(
                    color: MyApp.whiteNoChangeColor,
                    fontSize: 25.0,
                    fontWeight: FontWeight.bold
                ),
              ),
            ],
          ),
          centerTitle: true,
          actions: <Widget>[
            Padding(
                padding: EdgeInsets.only(right: 20.0),
                child: GestureDetector(
                  onTap: () async {
                    _getLocation();

                  },
                  child: Icon(
                    Icons.search,
                    size: 26.0,
                  ),
                )
            )
          ],
        ),
        body: Container(
          height: sizingInformation.myScreenSize.height,
          width: sizingInformation.myScreenSize.width,
          child: Stack(
            children: <Widget>[
              GoogleMap(
                onMapCreated: _onMapCreated,
                initialCameraPosition: CameraPosition(
                  target: center,
                  zoom: 15.0,
                ),
                myLocationEnabled: true,
                mapType: MapType.hybrid,
                compassEnabled: true,
                markers: _markers,
          ),
              Positioned(
                child: FlatButton(
                  color: Colors.green,
                  child: Text("button"),
                  onPressed: (){
                    final marker = Marker(
                      markerId: MarkerId("curr_loc"),
                      position: center,
                      infoWindow: InfoWindow(title: 'Your Location'),
                      icon: BitmapDescriptor.defaultMarker
                    );
                    _markers.add(marker);
//                    _getLocation();
                  },
                ),
              )


            ],
          ),
        ),
      );
    },
    );
  }
}

3 个答案:

答案 0 :(得分:1)

只需创建一个标记列表,首先必须清除该列表,然后在该列表上添加标记

  var markers = Set<Marker>();


 addMarker(double lat, double lng, String id) {
    var marker = Marker(
      markerId: MarkerId(id),
      position: LatLng(
        lat,
        lng,
      ),
      infoWindow: InfoWindow(title: locationName),
      onTap: () {},
    );

    markers.clear();
    markers.add(marker);
  }

答案 1 :(得分:0)

**只需在onPressed中添加setState方法,请检查下面的示例**

     onPressed: (){
                final marker = Marker(
                  markerId: MarkerId("curr_loc"),
                  position: center,
                  infoWindow: InfoWindow(title: 'Your Location'),
                  icon: BitmapDescriptor.defaultMarker
                );
             setState((){
                        _markers.add(marker);
                       });
              },

答案 2 :(得分:0)

我遇到了完全相同的问题。
我发现解决此问题的唯一方法是将getLocation()移至Google Maps小部件的 onTap 选项中。