Flutter - Google Maps, более чем один другой пользовательский маркер изображения одновременно? - PullRequest
0 голосов
/ 02 апреля 2020

Я использую Flutter и API Карт Google. Мне удалось иметь собственный маркер, который отображается при открытии карты. Есть ли способ иметь несколько разных пользовательских маркеров изображений одновременно на одной карте?

Я не могу найти способ сделать это. Любые идеи или ссылки приветствуются:)

class Neighborhood extends StatefulWidget {
  const Neighborhood({Key key}) : super(key: key);
  @override
  _NeighborhoodState createState() => _NeighborhoodState();
}

class _NeighborhoodState extends State<Neighborhood> {
  Location _location = Location();
  GoogleMapController _controller;
  List<Marker> allMarkers = [];
  PageController _pageController;
  int prevPage;
  int bottomSelectedIndex = 0;
//initialising the custom pinIcon
  BitmapDescriptor pinIcon;

  @override
  void initState() {
    super.initState();
//calling the the function that will await the pinIcon and have it ready with initState();
    setCustomMapPin();

    _pageController = PageController(initialPage: 1, viewportFraction: 0.8)
      ..addListener(_onScroll);
  }

  void _onScroll() {...

  _myPlacesList(index) {...

Затем я создал карту Google



            child: GoogleMap(
              initialCameraPosition: CameraPosition(
                target: LatLng(40.505757, 22.846576),
                zoom: 12.0,
              ),
              onMapCreated: mapCreated,
              myLocationEnabled: true,
              myLocationButtonEnabled: true,
              mapToolbarEnabled: false,
              markers: Set.from(allMarkers),
            ),
          ),

  }
void setCustomMapPin() async {
    pinIcon = await BitmapDescriptor.fromAssetImage(
        ImageConfiguration(devicePixelRatio: 2.5), 'assets/images/iconMap.png');
  }

  void mapCreated(controller) {
    setState(() {
      _controller = controller;
      _location.getLocation();
//Adding markers to the screen.Calling the markers from different file.
      myPlaces.forEach((e) {
        allMarkers.add(Marker(
          markerId: MarkerId(e.name),
          draggable: false,
          icon: pinIcon,
          infoWindow: InfoWindow(
            title: e.name,
            snippet: e.address,
          ),
          position: e.locationCoords,
          onTap: () {
            _pageController.animateToPage(myPlaces.indexOf(e),
                duration: Duration(milliseconds: 300), curve: Curves.ease);
          },
        ));
      });
    });
  }
//moves the camera to pin location
  void moveCamera() {...
}

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете сделать это с помощью чего-то вроде

_markers.add(Marker(
      consumeTapEvents: true,
      position: _center,
      infoWindow: InfoWindow(
          title: 'New Marker',
          snippet: '',
      ),
      icon: markerImage, //you custom marker, instance of BitmapDescriptor
)

, а затем создать карту с помощью:

GoogleMap(
    onMapCreated: (GoogleMapController controller) {
        mapController = controller;
    },
    myLocationEnabled: locationEnable,
    initialCameraPosition: CameraPosition(
         target: _center,
         zoom: 10.0,
    ),
    mapType: MapType.normal,
    markers: _markers,
)


 var markerImage = await BitmapDescriptor.fromAssetImage(
          ImageConfiguration(size: Size(96, 96)),
          'assets/image/marker_image.png');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...