tplmapsflutterplugin 1.5.8 copy "tplmapsflutterplugin: ^1.5.8" to clipboard
tplmapsflutterplugin: ^1.5.8 copied to clipboard

TPL Maps Flutter Plugin.

example/lib/main.dart

import 'dart:async';
import 'dart:convert';
import 'dart:developer';

import 'package:flutter/material.dart';

import 'package:flutter/services.dart';
import 'package:flutter/foundation.dart';

import 'package:flutter/rendering.dart';
import 'package:tplmapsflutterplugin/TplMapsView.dart';

import 'package:http/http.dart' as http;
import 'package:tplmapsflutterplugin_example/second.dart';
import 'package:tplmapsflutterplugin_example/third.dart';

void main() {
  runApp(TestApp());
}

class MyApp2 extends StatelessWidget {
  const MyApp2({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: TestApp(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

late TplMapsViewController _controller;
double zoomLevel = 8;

class _MyAppState extends State<MyHomePage> {
  String textValue = "";
  Timer timeHandle = Timer(Duration(seconds: 3), () {});

  void textChanged(String val) {
    textValue = val;
    if (timeHandle != null) {
      timeHandle.cancel();
    }
    timeHandle = Timer(Duration(seconds: 3), () {
      if (textValue != "") {
        print("Calling API Here: $textValue");
      }
    });
  }

  @override
  void dispose() {
    super.dispose();
    timeHandle.cancel();
  }

  // Initial Selected Value
  String dropdownvalue = 'Item 1';

  String address = ''; // Initial text value

  // List of items in our dropdown menu
  var items = [
    'Item 1',
    'Item 2',
    'Item 3',
    'Item 4',
    'Item 5',
  ];

  Widget build(BuildContext context) {
    // This is used in the platform side to register the view.
    const String viewType = 'map';
    // Pass parameters to the platform side.
    const Map<String, dynamic> creationParams = <String, dynamic>{};

    return Scaffold(
      appBar: AppBar(
        title: Text("App Bar 1"),
      ),
      body: Stack(
        children: [
          Container(
            child: TplMapsView(
              isShowBuildings: true,
              isZoomEnabled: true,
              showZoomControls: false,
              isTrafficEnabled: true,
              longClickMarkerEnable: false,
              mapMode: MapMode.NIGHT,
              enablePOIs: false,
              setMyLocationEnabled: true,
              myLocationButtonEnabled: true,
              showsCompass: true,
              allGesturesEnabled: true,
              tplMapsViewCreatedCallback: _callback,
              tPlMapsViewMarkerCallBack: _markerCallback,
            ),
          ),
          GestureDetector(
            onTap: () {
              zoomLevel += 1;
              _controller.setZoomFixedCenter(zoomLevel);
            },
            child: Center(
              child: Container(
                child: Image.asset(
                  'assets/droppin.png',
                  width: 30,
                  height: 30,
                ),
              ),
            ),
          ),
          Column(
            children: [
              Container(
                child: Card(
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(10.0),
                  ),
                  elevation: 5,
                  child: Container(
                    padding: EdgeInsets.all(16.0),
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          'Address: ',
                          style: TextStyle(
                            fontWeight: FontWeight.bold,
                          ),
                        ),
                        SizedBox(width: 8.0), // Adding some space between texts
                        Expanded(
                          child: Text(
                            address,
                            style: TextStyle(
                                // Your style for the address text goes here
                                ),
                          ),
                        ),
                      ],
                    ),
                  ),
                ),
              ),
              SizedBox(height: 10.0),
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 10.0),
                child: TextField(
                  onSubmitted: (String value) {
                    getSearchItemsbyName(value);
                  },
                  decoration: InputDecoration(
                    labelText: 'Search',
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(10.0),
                    ),
                    filled: true,
                    fillColor: Colors.white,
                  ),
                ),
              ),
              // Bottom right aligned icons
            ],
          ),
          Align(
            alignment: Alignment.bottomRight,
            child: Padding(
              padding: const EdgeInsets.all(1.0),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.end,
                crossAxisAlignment: CrossAxisAlignment.end,
                mainAxisSize: MainAxisSize.min,
                children: [
                  GestureDetector(
                    onTap: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => SecondRoute()),
                      );
                    },
                    child: Image.asset(
                      'assets/zoomin.png',
                      width: 70,
                      height: 70,
                    ),
                  ),
                  Image.asset(
                    'assets/zoomout.png',
                    width: 70,
                    height: 70,
                  ), // Replace with your icon/image
                  Image.asset(
                    'assets/mylocation.png',
                    width: 70,
                    height: 70,
                  ), // Replace with your icon/image
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }



  void _markerCallback(String callback) {
    print(callback);

    // Find the index of "LatLng:"
    int latLngIndex = callback.indexOf("LatLng:");

    if (latLngIndex != -1) {
      // Extract substring after "LatLng:"
      String latLngSubstring =
          callback.substring(latLngIndex + "LatLng:".length).trim();

      // Split the substring to get the values
      List<String> values = latLngSubstring.split(',');

      // Assuming the first value is latitude and the second value is longitude
      if (values.length >= 2) {
        String latitude = values[0].trim();
        String longitude = values[1].trim();

        print("Latitude: $latitude, Longitude: $longitude");

        postData(latitude + ";" + longitude.split("}")[0]);
      }
    }
  }

  void _callback(TplMapsViewController controller) {
    controller.setZoomEnabled(false);
    controller.showBuildings(false);
    controller.showBuildings(false);
    // controller.setZoomEnabled(false);
    controller.setTrafficEnabled(false);
    controller.enablePOIs(false);
    controller.setMyLocationEnabled(true);
    controller.myLocationButtonEnabled(true);
    controller.showsCompass(false);

    controller.setCameraPositionAnimated(
        33.698047971892045, 73.06930062598059, 14.0);

     controller.addMarker(33.698047971892045, 73.06930062598059);

    controller.addCustomMarkerBase64(
        24.820697, 67.125736 , "data:image/png;base64,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" , 50, 50);

    // controller.addMarkerCustomMarker(33.698047972345, 73.0693006876459, 50 , 50);
    // controller.addMarkerCustomMarker(33.6980479712357878, 73.06930098543452, 50 , 50);
    // controller.addMarkerCustomMarker(33.698047971652341, 73.069300687988, 50 , 50);
    // controller.addMarkerCustomMarker(33.69804797667524235, 73.06930062855673, 50 , 50);
    // controller.addMarkerCustomMarker(0, 0, 50 , 50);
    // controller.addMarkerCustomMarker(24.826295, 67.1236449, 50 , 50);

    // controller.addMarker(33.705349, 73.069788);

    // controller.allGesturesEnabled(false);
    controller.setMapMode(MapMode.DEFAULT);
    bool isBuildingsEnabled = controller.isBuildingEnabled;
    print("isBuildingsEnabled: $isBuildingsEnabled");
    bool isTrafficEnabled = controller.isTrafficEnabled;
    print("isTrafficEnabled: $isTrafficEnabled");
    bool isPOIsEnabled = controller.isPOIsEnabled;
    print("isPOIsEnabled: $isPOIsEnabled");
    //mapMode: MapMode.DEFAULT,

    _controller = controller;

    _controller.removeAllMarker();

    _controller.animateToZoom(14.0);
  }

  void addPolyline() {
    _controller.addPolyLine(23.23, 23.23, 23.23, 123.123);
  }

  void addCircle() {
    _controller.addCircle(
      23.23,
      23.23,
      23.23,
    );
  }

  void removePolyLine() {
    _controller.removePolyline();
  }

  void removeCircles() {
    _controller.removeAllCircles();
  }

  void getSearchItemsbyName(String text) {
    TPlSearchViewController tPlSearchViewController = TPlSearchViewController(
      text,
      24.8607,
      67.0011,
      (retrieveItemsCallback) {
        print(retrieveItemsCallback);

        List<dynamic> decodedResponse = json.decode(retrieveItemsCallback);

        // Access the first element of the array and then the "responseData" key
        var responseData = decodedResponse[0]['compound_address_parents'];

        // Access the "compound_address_parents" key from "responseData"
        // String compoundAddressParents =
        // responseData['1']['compound_address_parents'];

        print(decodedResponse[0]['lat']);
        print(decodedResponse[0]['lng']);

        setState(() {
          address = responseData;
          _controller.setCameraPositionAnimated(24.8260624, 67.1245394, 14.0);
        });
      },
    );

    tPlSearchViewController.getSearchItems();
  }

  Future<void> postData(String latlng) async {
    final apiUrl = 'https://api1.tplmaps.com:8888/search/rgeocodebulk?addressCount=1&apikey=';
    List<Map<String, dynamic>> dataArray = [
      {
        'point': latlng
      },
    ];
    try {
      final response = await http.post(
        Uri.parse(apiUrl),
        headers: <String, String>{
          'Content-Type': 'application/json; charset=UTF-8',
        },
        body: jsonEncode(dataArray),
      );

      if (response.statusCode == 200) {
        // Parse the JSON response
        List<dynamic> decodedResponse = json.decode(response.body);

        // Access the first element of the array and then the "responseData" key
        var responseData = decodedResponse[0]['responseData'];

        // Access the "compound_address_parents" key from "responseData"
        String compoundAddressParents = responseData['1']['compound_address_parents'];

        setState(() {
          address = compoundAddressParents;
        });
      } else {
        // Request failed
        print('Failed to post data: ${response.statusCode}');
        print('Response: ${response.body}');
      }
    } catch (error) {
      // Error in making the request
      print('Error: $error');
    }
  }

//
// void getRouting(){
//   TPLRoutingViewController tplRoutingViewController =
//   TPLRoutingViewController(24.820159, 67.123933, 24.830831, 67.080857 , (tplRoutingCallBack) {
//     log(tplRoutingCallBack);
//     _controller.setUpPolyLine();
//   },);
//
//   tplRoutingViewController.getSearchItems();
//
// }

}