dgis_map_kit 0.0.6 copy "dgis_map_kit: ^0.0.6" to clipboard
dgis_map_kit: ^0.0.6 copied to clipboard

2Gis Flutter plugin, that allows you to integrate 2Gis SDK for your applicatioon.

example/lib/main.dart

import 'dart:async';

import 'package:dgis_map_kit/dgis_map_kit.dart';
import 'package:dgis_map_kit_example/camera_control_buttons.dart';
import 'package:dgis_map_kit_example/map_navigation.dart';
import 'package:dgis_map_kit_example/theme_picker.dart';
import 'package:flutter/material.dart';
import 'dart:developer' as log;

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  static const Color primaryColor = Color(0xff11C775);

  DGisMapController? _controller;
  final Completer<bool> _isMapReadyCompleter = Completer();

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

  @override
  Widget build(BuildContext context) {
    log.log("starting example");

    return MaterialApp(
      home: Scaffold(
        body: Stack(
          alignment: Alignment.centerRight,
          children: [
            SizedBox(
              width: double.infinity,
              height: double.infinity,
              child: DGisMap(
                token: "505d338f-975b-49e0-b4df-04c17dfa0ac3",
                layers: [
                  MapLayer.withClustering(
                    builder: (markers) => MapClusterer(
                      icon: "assets/map_cluster_pin.png",
                      iconOptions: MapIconOptions(
                        text: markers.length.toString(),
                        textStyle: const MapIconTextStyle(
                          fontSize: 13.0,
                          color: primaryColor,
                          strokeColor: primaryColor,
                          textPlacement: MapIconTextPlacement.TOP_CENTER,
                          textOffset: -20.0,
                        ),
                      ),
                    ),
                    maxZoom: 20.0,
                    minDistance: 100.0,
                    onTap: (markers, _) async {
                      final cameraPosition = _controller?.currentCameraPosition;
                      if (cameraPosition != null) {
                        final landmark = markers.first;

                        _controller?.moveCamera(
                          CameraPosition(
                            position: landmark.position,
                            zoom: cameraPosition.zoom + 2,
                          ),
                          duration: const Duration(milliseconds: 300),
                          animationType: CameraAnimationType.DEFAULT,
                        );
                      }
                    },
                  ),
                ],
                theme: MapTheme.DARK,
                enableUserLocation: true,
                onUserLocationChanged: (position) {
                  log.log(
                    "User location changed: ${position.lat} ${position.long}",
                  );

                  return Marker(
                    position: position,
                    icon: "assets/user_location.png",
                    iconOptions: const MapIconOptions(size: 40.0),
                  );
                },
                initialCameraPosition: CameraPosition(
                  position: const Position(
                    lat: 51.169392,
                    long: 71.449074,
                  ),
                  zoom: 12,
                ),
                mapOnTap: (position) {
                  _controller?.moveCamera(
                    CameraPosition(position: position, zoom: 18.0),
                    duration: const Duration(milliseconds: 400),
                    animationType: CameraAnimationType.SHOW_BOTH_POSITIONS,
                  );

                  _controller?.markersController.addMarker(
                    Marker(
                      id: "user_marker",
                      position: position,
                      icon: "assets/map_pin.png",
                    ),
                    "user_markers",
                  );
                },
                markerOnTap: (marker, _) => _controller?.moveCamera(
                  CameraPosition(
                    position: marker.position,
                    zoom: 18,
                  ),
                  duration: const Duration(milliseconds: 600),
                ),
                mapOnReady: () {
                  _isMapReadyCompleter.complete(true);

                  _controller?.markersController.addMarkers(
                    const [
                      Marker(
                        id: "id",
                        icon: "assets/map_pin.png",
                        position: Position(
                          lat: 51.132905927930146,
                          long: 71.42752647399904,
                        ),
                        data: {"data": 2},
                      ),
                      Marker(
                        icon: "assets/map_pin.png",
                        position: Position(
                          lat: 51.13601624568085,
                          long: 71.43458604812623,
                        ),
                      ),
                      Marker(
                        icon: "assets/map_pin.png",
                        position: Position(
                          lat: 51.13601628568085,
                          long: 71.43659604812623,
                        ),
                      ),
                    ],
                  );

                  _controller
                      ?.addLayer(const MapLayer(layerId: "user_markers"));
                },
                mapOnCreated: (controller) {
                  _controller = controller;
                },
              ),
            ),
            FutureBuilder(
              future: _isMapReadyCompleter.future,
              builder: (context, snapshot) {
                if (snapshot.hasData &&
                    snapshot.data == true &&
                    _controller != null) {
                  return MapNavigation(mapController: _controller!);
                }
                return const SizedBox.shrink();
              },
            ),
            Positioned(
              bottom: 0,
              left: 0,
              right: 0,
              child: Column(
                mainAxisSize: MainAxisSize.min,
                crossAxisAlignment: CrossAxisAlignment.end,
                children: [
                  FutureBuilder(
                    future: _isMapReadyCompleter.future,
                    builder: (context, snapshot) {
                      if (snapshot.hasData &&
                          snapshot.data == true &&
                          _controller != null) {
                        return CameraControllButtons(
                            mapController: _controller!);
                      }
                      return const SizedBox.shrink();
                    },
                  ),
                  ThemePicker(
                    onThemeChange: (value) async {
                      if (await _isMapReadyCompleter.future) {
                        _controller!.setTheme(value);
                      }
                    },
                  )
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}
11
likes
140
pub points
55%
popularity

Publisher

unverified uploader

2Gis Flutter plugin, that allows you to integrate 2Gis SDK for your applicatioon.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

dgis_map_platform_interface, flutter, location

More

Packages that depend on dgis_map_kit