woosmap_flutter 1.5.0 copy "woosmap_flutter: ^1.5.0" to clipboard
woosmap_flutter: ^1.5.0 copied to clipboard

Add Location Intelligence to your application with Woosmap Platform.

example/lib/main.dart

import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:woosmap_flutter/woosmap_flutter.dart';
import 'constants.dart';
import 'Screens/snippet_list.dart';

void main() {
  runApp(const AppConstants(
    child: MyApp(),
  ));
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  static const String _title = 'Code Sample';
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: _title,
      home: ListWoosmapPluginSample(),
    );
  }
}

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

  @override
  State<ExampleSnippet> createState() => _ExampleSnippetState();
}

class _ExampleSnippetState extends State<ExampleSnippet> {
  WoosmapController? _controller;
  TextEditingController? txtLogController;
  @override
  void initState() {
    super.initState();
    txtLogController = TextEditingController();
    if (_controller != null) {
      debugPrint("info ===> Indoor controller not initialize");
    }
  }

  @override
  void dispose() {
    txtLogController?.dispose();
    super.dispose();
  }

  Future<void> reloadMenu() async {
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Woosmap app (Events)'),
        actions: <Widget>[
          ExampleMenu(webViewController: _controller),
        ],
      ),
      body: SafeArea(
        child: Column(
          mainAxisSize: MainAxisSize.max,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Expanded(
                child: Align(
                    alignment: const AlignmentDirectional(-1, -1),
                    child: WoosmapMapViewWidget(
                      wooskey: Platform.isAndroid
                          ? AppConstants.of(context)?.privateKeyAndroid ?? ""
                          : AppConstants.of(context)?.privateKeyiOS ?? "",
                      onRef: (p0) async {
                        _controller = p0;
                        reloadMenu();
                      },
                      mapOptions: const {
                        "center": {"lat": 19.115932, "lng": 72.907852},
                        "zoom": 10
                      },
                      click: (message) {
                        txtLogController?.text =
                            "Click, ${txtLogController?.text}";
                      },
                      bounds_changed: () {
                        txtLogController?.text =
                            "bounds_changed, ${txtLogController?.text}";
                      },
                      center_changed: () {
                        txtLogController?.text =
                            "center_changed, ${txtLogController?.text}";
                      },
                      dblclick: (m) {
                        txtLogController?.text =
                            "dblclick, ${txtLogController?.text}";
                      },
                      drag: () {
                        txtLogController?.text =
                            "drag, ${txtLogController?.text}";
                      },
                      dragend: () {
                        txtLogController?.text =
                            "dragend, ${txtLogController?.text}";
                      },
                      dragstart: () {
                        txtLogController?.text =
                            "dragstart, ${txtLogController?.text}";
                      },
                      idle: () {
                        debugPrint("idle");
                        /*txtLogController?.text =
                            "idle, ${txtLogController?.text}";*/
                      },
                      mousemove: (x) {
                        txtLogController?.text =
                            "mousemove, ${txtLogController?.text}";
                      },
                      mouseout: (x) {
                        txtLogController?.text =
                            "mouseout, ${txtLogController?.text}";
                      },
                      mouseover: (x) {
                        txtLogController?.text =
                            "mouseover, ${txtLogController?.text}";
                      },
                      rightclick: (x) {
                        txtLogController?.text =
                            "rightclick, ${txtLogController?.text}";
                      },
                      zoom_changed: () {
                        txtLogController?.text =
                            "zoom_changed, ${txtLogController?.text}";
                      },
                    ))),
            Container(
                width: 100,
                height: 100,
                decoration: const BoxDecoration(
                  color: Color(0xFFDEE6E6),
                ),
                child: Column(mainAxisSize: MainAxisSize.max, children: [
                  Expanded(
                      child: Padding(
                    padding: const EdgeInsetsDirectional.fromSTEB(10, 5, 10, 5),
                    child: TextFormField(
                      controller: txtLogController,
                      minLines: null,
                      maxLines: null,
                      autofocus: true,
                      enabled: false,
                      obscureText: false,
                      decoration: const InputDecoration(
                        labelText: 'Events Log\n',
                        hintText: 'Event fired',
                        enabledBorder: UnderlineInputBorder(
                          borderSide: BorderSide(
                            color: Color(0x00000000),
                            width: 1,
                          ),
                          borderRadius: BorderRadius.only(
                            topLeft: Radius.circular(4.0),
                            topRight: Radius.circular(4.0),
                          ),
                        ),
                        focusedBorder: UnderlineInputBorder(
                          borderSide: BorderSide(
                            color: Color(0x00000000),
                            width: 1,
                          ),
                          borderRadius: BorderRadius.only(
                            topLeft: Radius.circular(4.0),
                            topRight: Radius.circular(4.0),
                          ),
                        ),
                        errorBorder: UnderlineInputBorder(
                          borderSide: BorderSide(
                            color: Color(0x00000000),
                            width: 1,
                          ),
                          borderRadius: BorderRadius.only(
                            topLeft: Radius.circular(4.0),
                            topRight: Radius.circular(4.0),
                          ),
                        ),
                        focusedErrorBorder: UnderlineInputBorder(
                          borderSide: BorderSide(
                            color: Color(0x00000000),
                            width: 1,
                          ),
                          borderRadius: BorderRadius.only(
                            topLeft: Radius.circular(4.0),
                            topRight: Radius.circular(4.0),
                          ),
                        ),
                      ),
                    ),
                  ))
                ]))
          ],
        ),
      ),
    );
  }
}

enum ExampleMenuOptions {
  fitBounds,
  getBounds,
  getCenter,
  getHeading,
  getTilt,
  getZoom,
  panBy,
  panTo,
  panToBounds,
  setCenter,
  setHeading,
  setTilt,
  setZoom,
}

class ExampleMenu extends StatelessWidget {
  const ExampleMenu({
    super.key,
    required this.webViewController,
  });

  final WoosmapController? webViewController;

  @override
  Widget build(BuildContext context) {
    return PopupMenuButton<ExampleMenuOptions>(
      key: const ValueKey<String>('ShowPopupMenu'),
      onSelected: (ExampleMenuOptions value) {
        switch (value) {
          case ExampleMenuOptions.fitBounds:
            _onFitBounds();
            break;
          case ExampleMenuOptions.getBounds:
            _onGetBounds().then((value) {
              if (value != null) {
                if (!context.mounted) return;
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text(jsonEncode(value.toJson()))),
                );
              }
            });
            break;
          case ExampleMenuOptions.getCenter:
            _onGetCenter().then((value) {
              if (value != null) {
                if (!context.mounted) return;
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text(jsonEncode(value.toJson()))),
                );
              }
            });
            break;
          case ExampleMenuOptions.getHeading:
            _onHeading().then((value) {
              if (!context.mounted) return;
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text(jsonEncode(value))),
              );
            });
            break;
          case ExampleMenuOptions.getTilt:
            _onTilt().then((value) {
              if (!context.mounted) return;
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text(jsonEncode(value))),
              );
            });
            break;
          case ExampleMenuOptions.getZoom:
            _onZoom().then((value) {
              if (!context.mounted) return;
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Zoom ${jsonEncode(value)}')),
              );
            });
            break;
          case ExampleMenuOptions.panBy:
            _onPanBy();
            break;
          case ExampleMenuOptions.panTo:
            _onPanTo();
            break;
          case ExampleMenuOptions.panToBounds:
            _onPanToBounds();
            break;
          case ExampleMenuOptions.setCenter:
            _onSetCenter();
            break;
          case ExampleMenuOptions.setHeading:
            _onSetHeading();
            break;
          case ExampleMenuOptions.setTilt:
            _onSetTilt();
            break;
          case ExampleMenuOptions.setZoom:
            _onSetZoom();
            break;
        }
      },
      itemBuilder: (BuildContext context) =>
          <PopupMenuItem<ExampleMenuOptions>>[
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.fitBounds,
          child: Text('fitBounds'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.getBounds,
          child: Text('getBounds'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.getCenter,
          child: Text('getCenter'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.getHeading,
          child: Text('getHeading'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.getTilt,
          child: Text('getTilt'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.getZoom,
          child: Text('getZoom'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.panBy,
          child: Text('panBy'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.panTo,
          child: Text('panTo'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.panToBounds,
          child: Text('panToBounds'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.setCenter,
          child: Text('setCenter'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.setHeading,
          child: Text('setHeading'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.setTilt,
          child: Text('setTilt'),
        ),
        const PopupMenuItem<ExampleMenuOptions>(
          value: ExampleMenuOptions.setZoom,
          child: Text('setZoom'),
        ),
      ],
    );
  }

  Future<void> _onFitBounds() async {
    await webViewController?.fitBounds(
        LatLngBounds.fromJson({
          "ne": {"lat": 48.844437932920535, "lng": 2.3743880269761393},
          "sw": {"lat": 48.854437932920535, "lng": 2.3843880269761393}
        }),
        WoosPadding.fromJson({"top": 2, "left": 2, "right": 3, "bottom": 3}));
    return;
  }

  Future<LatLng?> _onGetCenter() async {
    LatLng? result;
    result = await webViewController?.getCenter();
    return result;
  }

  Future<LatLngBounds?> _onGetBounds() async {
    LatLngBounds? result;
    result = await webViewController?.getBounds(
        WoosPadding.fromJson({"top": 2, "left": 2, "right": 3, "bottom": 3}));
    return result;
  }

  Future<double> _onHeading() async {
    double result;
    result = (await webViewController?.getHeading()) as double;
    return result;
  }

  Future<double> _onTilt() async {
    double result;
    result = (await webViewController?.getTilt()) as double;
    return result;
  }

  Future<double> _onZoom() async {
    double result;
    result = (await webViewController?.getZoom()) as double;
    return result;
  }

  Future<void> _onPanBy() async {
    await webViewController?.panBy(20, 10);
    return;
  }

  Future<void> _onPanTo() async {
    await webViewController?.panTo(
        LatLng.fromJson({"lat": 48.844437932920535, "lng": 2.3743880269761393}),
        WoosPadding.fromJson({"top": 2, "left": 2, "right": 3, "bottom": 3}));
    return;
  }

  Future<void> _onPanToBounds() async {
    await webViewController?.panToBounds(
        LatLngBounds.fromJson({
          "ne": {"lat": 48.844437932920535, "lng": 2.3743880269761393},
          "sw": {"lat": 48.854437932920535, "lng": 2.3843880269761393}
        }),
        WoosPadding.fromJson({"top": 2, "left": 2, "right": 3, "bottom": 3}));
    return;
  }

  Future<void> _onSetCenter() async {
    await webViewController?.setCenter(
        LatLng.fromJson({"lat": 48.844437932920535, "lng": 2.3743880269761393}),
        WoosPadding.fromJson({"top": 2, "left": 2, "right": 3, "bottom": 3}));
    return;
  }

  Future<void> _onSetHeading() async {
    await webViewController?.setHeading(20);
    return;
  }

  Future<void> _onSetTilt() async {
    await webViewController?.setTilt(5);
    return;
  }

  Future<void> _onSetZoom() async {
    await webViewController?.setZoom(20);
    return;
  }
}
7
likes
160
points
397
downloads

Publisher

verified publisherwoosmap.com

Weekly Downloads

Add Location Intelligence to your application with Woosmap Platform.

Homepage

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, http, plugin_platform_interface, webview_flutter, webview_flutter_android, webview_flutter_wkwebview

More

Packages that depend on woosmap_flutter