generic_map 0.8.3 copy "generic_map: ^0.8.3" to clipboard
generic_map: ^0.8.3 copied to clipboard

A generic maps api supporting Google Maps, Mapbox, OpenStreetMaps and MapLibre

example/lib/main.dart

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:latlong2/latlong.dart';
import 'package:maplibre_gl/maplibre_gl.dart' as maplibre;
import 'package:widgetbook/widgetbook.dart';
import 'package:widgetbook/next.dart' as next;
import 'package:widgetbook_annotation/widgetbook_annotation.dart' as widgetbook;
import 'package:generic_map/generic_map.dart';

import 'main.directories.g.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  maplibre.MapLibreMap.useHybridComposition = true;
  // await Geolocator.requestPermission();
  await dotenv.load();
  runApp(
    const WidgetbookApp(),
  );
  // runApp(const FullScreenMap());
}

@widgetbook.App()
class WidgetbookApp extends StatelessWidget {
  const WidgetbookApp({super.key});

  @override
  Widget build(BuildContext context) {
    return Widgetbook.material(
      directories: [
        ...directories,
      ],
      themeMode: ThemeMode.system,
      addons: [
        InspectorAddon(),
        next.DeviceFrameAddon(
          Devices.all,
        ),
        next.AlignmentAddon(
          Alignment.center,
        ),
      ],
    );
  }
}

class FullScreenMap extends StatelessWidget {
  const FullScreenMap({super.key});

  @override
  Widget build(BuildContext context) {
    final isDark = true;
    return MaterialApp(
      title: 'Basic Material App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      debugShowCheckedModeBanner: false,
      home: SizedBox(
        width: MediaQuery.sizeOf(context).width,
        height: MediaQuery.sizeOf(context).height,
        child: GenericMap(
          interactive: true,
          onMapMoved: (p0, zoom) {
            if (kDebugMode) {
              print("Map moved to: $p0 with zoom: $zoom");
            }
          },
          addressResolver: (p0, p1) async {
            return Place(
              p1,
              'San Francisco, CA',
              'San Francisco',
            );
          },
          platformMapProviderSettings: PlatformMapProviderSettings(
            defaultProvider: MapProviderEnum.mapBoxSDK,
          ),
          googleMapOptions: GoogleMapsOptions(),
          mapLibreOptions: MapLibreOptions(
            apiKey: dotenv.maybeGet('MAPLIBRE_API_KEY') ?? "",
            styleUrl: isDark
                ? dotenv.maybeGet('MAPLIBRE_STYLE_DARK_URL')
                : dotenv.maybeGet('MAPLIBRE_STYLE_URL'),
          ),
          mapboxOptions: MapboxOptions(
            accessToken: dotenv.maybeGet('MAPBOX_ACCESS_TOKEN') ?? "",
            styleTileSetId: 'navigation-night-v1',
          ),
          mapboxSdkOptions: MapboxSdkOptions(
              accessToken: dotenv.maybeGet('MAPBOX_ACCESS_TOKEN') ?? "",
              style: MapboxSdkStyle.standard),
          initialZoom: 19,
          initialLocation: const Place(
            LatLng(37.791714, -122.392249),
            'San Francisco, CA',
            'San Francisco',
          ),
        ),
      ),
    );
  }
}