dencity_map_plugin 0.0.9 copy "dencity_map_plugin: ^0.0.9" to clipboard
dencity_map_plugin: ^0.0.9 copied to clipboard

PlatformAndroid

An Android Native Plugin Support for Dencitylite Android Applications

dencity_map_plugin #

An Android Native Plugin Support for Dencitylite Android Applications

Pub Dev

👋 Get started #

This is a plugin for Dencitylite Android Applications. This plugin is used to show the map in the Dencitylite Android Applications.

Prerequisites #

Add the following dependencies in your project level android/app/src/main/res/strings.xml file.

    <string name="google_maps_key">GOOGLE_MAPS_API_KEY</string>
package com.dencity.dencity_map_plugin_example

import com.dencity.dencity_map_plugin.NativeViewFactory
import com.dencity.dencity_map_plugin.SearchScreenViewFactory
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel


class MainActivity : FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)

        flutterEngine
            .platformViewsController
            .registry
            .registerViewFactory(
                "com.dencity.dencity_map_plugin/map_view",
                NativeViewFactory(this)
            )
        flutterEngine
            .platformViewsController
            .registry
            .registerViewFactory(
                "com.dencity.dencity_map_plugin/search_screen_view",
                SearchScreenViewFactory(this)
            )
        val CHANNEL = "com.dencity.dencity_map_plugin/search_screen_distance"
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
            .setMethodCallHandler { call: MethodCall, result: MethodChannel.Result ->
                if (call.method == "getDistance") {
                    val distance = call.argument<String>("key")
                    if (distance != null) {
                        // Use the distance value here
                        println("Received distance: $distance")
                        result.success(null)
                    } else {
                        result.error("UNAVAILABLE", "Distance not available", null)
                    }
                } else {
                    result.notImplemented()
                }
            }
    }
}

🚀 Installation #

Add dependency #

Add the plugin to your pubspec.yaml file

dependencies:
  dencity_map_plugin: <latest_version>

The latest version is: Pub The latest version including pre-releases is: Pub

Usage #

Main Screen View with all the markers within 500m radius #

@override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: PlatformViewLink(
          viewType: 'com.dencity.dencity_map_plugin/map_view',
          surfaceFactory: (context, controller) {
            return AndroidViewSurface(
              controller: controller as AndroidViewController,
              gestureRecognizers: const <Factory<
                  OneSequenceGestureRecognizer>>{},
              hitTestBehavior: PlatformViewHitTestBehavior.opaque,
            );
          },
          onCreatePlatformView: (params) {
            return PlatformViewsService.initSurfaceAndroidView(
              id: params.id,
              viewType: 'com.dencity.dencity_map_plugin/map_view',
              layoutDirection: TextDirection.ltr,
              creationParams: const <String, dynamic>{},
              creationParamsCodec: const StandardMessageCodec(),
              onFocus: () {
                params.onFocusChanged(true);
              },
            )
              ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
              ..create();
          },
        ),
      ),
    );
  }

Search Screen View with multiple polylines and also the markers within 500m radius and a platform channel for distance calculation #


import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';

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

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

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

class _MyAppState extends State<MyApp> {

  String distanceCallResponse = "Not Avaiable";
  static const distanceCallChannel = const MethodChannel(
      'com.dencity.dencity_map_plugin/search_screen_distance');

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

  Future<void> requestLocationPermission() async {
    PermissionStatus status = await Permission.location.request();

    if (status.isGranted) {
      // The location permission is granted. You can now access the user's location.
    } else if (status.isDenied) {
      // The location permission is denied. You can't access the user's location.
    } else if (status.isPermanentlyDenied) {
      // The location permission is permanently denied. The user needs to enable it in the settings.
    }
  }

  Future<void> getPlatformVersion() async {
    try {
      distanceCallChannel.setMethodCallHandler((call) async {
        switch (call.method) {
          case 'getDistance':
            setState(() {
              distanceCallResponse = call.arguments['key'];
            });
            print('Distance call received ${call.arguments['key']}');
            return Future.value('Distance call received');
          default:
            throw MissingPluginException();
        }
      });
    } on PlatformException {
      setState(() {
        distanceCallResponse = 'Failed to get distance.';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text(distanceCallResponse),
        ),
        body: PlatformViewLink(
          viewType: 'com.dencity.dencity_map_plugin/map_view',
          surfaceFactory: (context, controller) {
            return AndroidViewSurface(
              controller: controller as AndroidViewController,
              gestureRecognizers: const <Factory<
                  OneSequenceGestureRecognizer>>{},
              hitTestBehavior: PlatformViewHitTestBehavior.opaque,
            );
          },
          onCreatePlatformView: (params) {
            return PlatformViewsService.initSurfaceAndroidView(
              id: params.id,
              viewType: 'com.dencity.dencity_map_plugin/search_screen_view',
              layoutDirection: TextDirection.ltr,
              creationParams: const <String, dynamic>{
                "origin": "48.8566, 2.3522",
                "destination": "48.8606, 2.3376",
                "apiKey": "GOOGLE_MAPS_API_KEY",
                "parkingLotsURL":
                    "API_FOR_PARKING_LOTS",
              },
              creationParamsCodec: const StandardMessageCodec(),
              onFocus: () {
                params.onFocusChanged(true);
              },
            )
              ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated)
              ..create();
          },
        ),
      ),
    );
  }
}

🔑 Generate App key #

  1. Go to the Google Maps Platform > Credentials page.
  2. On the Credentials page, click Create credentials > API key. The API key created dialog displays your newly created API key.
  3. Click Close.The new API key is listed on the Credentials page under API keys.(Remember to restrict the API key before using it in production.)

👨‍💻 Developer Details #

GitHub Icon LinkedIn Icon

1
likes
150
points
43
downloads

Publisher

unverified uploader

Weekly Downloads

An Android Native Plugin Support for Dencitylite Android Applications

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on dencity_map_plugin