mapbox_maps_flutter_draw 0.0.1 copy "mapbox_maps_flutter_draw: ^0.0.1" to clipboard
mapbox_maps_flutter_draw: ^0.0.1 copied to clipboard

A Flutter package to draw, edit, and delete polygons using the mapbox_maps_flutter library.

example/lib/main.dart

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:mapbox_maps_flutter/mapbox_maps_flutter.dart';
import 'package:mapbox_maps_flutter_draw/mapbox_maps_flutter_draw.dart';
import 'package:provider/provider.dart';

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

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
        providers: [
          ChangeNotifierProvider(
            create: (_) => MapboxDrawController(),
          ),
        ],
        child: MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,
          ),
          home: const MyHomePage(),
        ));
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late MapboxDrawController _mapboxDrawController;

  @override
  Widget build(BuildContext context) {
    _mapboxDrawController = Provider.of<MapboxDrawController>(context);

    MapboxOptions.setAccessToken("YOUR_MAPBOX_ACCESS_TOKEN");

    return Scaffold(
      appBar: AppBar(
        title: const Text('Mapbox Draw'),
      ),
      body: Stack(
        children: [
          MapWidget(
            styleUri: MapboxStyles.STANDARD,
            onMapCreated: (mapInstance) async {
              await _mapboxDrawController.initialize(mapInstance);

              final polygonString = [
                '{"type":"Polygon","bbox":null,"coordinates":[[[-18.930236903430682,65.54258945880892],[-41.305603332322534,56.12495372403541],[-23.143507455464942,47.51318115957886],[-13.42744079577011,50.491865810367415]]]}',
                '{"type":"Polygon","bbox":null,"coordinates":[[[19.172957996449043,49.30508658266342],[12.380430916160435,33.47371340190411],[-2.592100951914972,35.36674553163404],[0.04248170102297877,51.60826115068258]]]}'
              ];

              _mapboxDrawController.add(
                polygonString
                    .map((e) => Polygon.fromJson(jsonDecode(e)))
                    .toList(),
              );
            },
          ),
          Positioned(
            right: 8,
            top: 64,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.end,
              children: [
                Row(
                  children: [
                    if (_mapboxDrawController.editingMode ==
                        EditingMode.DRAW_POLYGON)
                      IconButton.filled(
                        icon: const Icon(Icons.undo),
                        onPressed: (_mapboxDrawController.polygonPoints.isEmpty)
                            ? null
                            : () => _mapboxDrawController.undoLastPoint(),
                      ),
                    _mapboxDrawController.editingMode ==
                            EditingMode.DRAW_POLYGON
                        ? IconButton.filled(
                            icon: _mapboxDrawController.editingMode ==
                                    EditingMode.DRAW_POLYGON
                                ? const Icon(Icons.done)
                                : const Icon(Icons.add),
                            onPressed: () =>
                                _mapboxDrawController.toggleEditing(),
                          )
                        : IconButton.outlined(
                            icon: _mapboxDrawController.editingMode ==
                                    EditingMode.DRAW_POLYGON
                                ? const Icon(Icons.done)
                                : const Icon(Icons.add),
                            onPressed: () =>
                                _mapboxDrawController.toggleEditing(),
                          ),
                  ],
                ),
                _mapboxDrawController.editingMode == EditingMode.DELETE
                    ? IconButton.filled(
                        icon: const Icon(Icons.delete),
                        onPressed: () {
                          _mapboxDrawController.toggleDeleteMode();
                        },
                      )
                    : IconButton.outlined(
                        icon: const Icon(Icons.delete),
                        onPressed: () {
                          _mapboxDrawController.toggleDeleteMode();
                        },
                      )
              ],
            ),
          ),
        ],
      ),
    );
  }
}
4
likes
0
points
70
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package to draw, edit, and delete polygons using the mapbox_maps_flutter library.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, mapbox_maps_flutter

More

Packages that depend on mapbox_maps_flutter_draw