diff options
author | Aakash Solanki <tech2aks@gmail.com> | 2022-08-31 15:23:53 +0200 |
---|---|---|
committer | Aakash Solanki <tech2aks@gmail.com> | 2022-09-14 11:50:03 +0200 |
commit | e39f2a69fde316b4e260c151757fb739494fbd56 (patch) | |
tree | 3ea8a65eee101457264d0000b5bcf122d428b0b8 /lib/map/navigationHome.dart | |
parent | 5957cfa0609ff57adfafa4538fb151d00f3c72e3 (diff) |
Upload Flutter Instrument Cluster app
Instrument Cluster demo app which shows speedometer
tachometer guages, temperature and fuel bars and some
indicators like turn indicators, engine malfunction,
lights, cruise control, lane assist. KUKSA.VAL is the
data source for the widgets.
This app depends on several plugins and all the plugins
have an OSI-approved license.
Bug-AGL: SPEC-4543
Change-Id: I2698c66f9d8d824690ae7e567ca7c93ceeb17e08
Signed-off-by: Aakash Solanki <tech2aks@gmail.com>
Diffstat (limited to 'lib/map/navigationHome.dart')
-rw-r--r-- | lib/map/navigationHome.dart | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/lib/map/navigationHome.dart b/lib/map/navigationHome.dart new file mode 100644 index 0000000..5218de7 --- /dev/null +++ b/lib/map/navigationHome.dart @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: Apache-2.0 + +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter_cluster_dashboard/cluster_config.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_cluster_dashboard/map/networkPolyline.dart'; +import 'package:flutter_cluster_dashboard/provider.dart'; +import 'package:flutter_cluster_dashboard/vehicle_signal/vehicle_signal_provider.dart'; +import 'package:latlong2/latlong.dart'; + +class NavigationHome extends ConsumerStatefulWidget { + const NavigationHome({Key? key}) : super(key: key); + + @override + ConsumerState<NavigationHome> createState() => _NavigationHomeState(); +} + +class _NavigationHomeState extends ConsumerState<NavigationHome> { + late Timer timerCurrLocation; + Timer timerPolyline = Timer.periodic(const Duration(hours: 10), ((timer) {})); + double pathStroke = 5; + late MapController mapController; + // randomly initialization of the variable + LatLng src = LatLng(31.71, 76.95); + LatLng markerLocation = LatLng(31.71, 76.95); + + @override + void initState() { + super.initState(); + mapController = MapController(); + + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { + var vehicle = ref.read(vehicleSignalProvider); + var polylineDB = ref.read(polyLineStateProvider); + final polylineDBNotifier = ref.read(polyLineStateProvider.notifier); + final clusterConfig = ref.read(clusterConfigStateprovider); + // timer for updating map center and zoom + timerCurrLocation = Timer.periodic(const Duration(seconds: 2), (timer) { + polylineDB = ref.read(polyLineStateProvider); + + vehicle = ref.read(vehicleSignalProvider); + markerLocation = LatLng(vehicle.currLat, vehicle.currLng); + // move and center + mapController.move(LatLng(vehicle.currLat, vehicle.currLng), 15); + + // rotate + double rotationDegree = 0; + int n = polylineDB.currPolyLineList.length; + if (polylineDB.currPolyLineList.isNotEmpty && n > 1) { + rotationDegree = calcAngle( + polylineDB.currPolyLineList[0], polylineDB.currPolyLineList[1]); + + rotationDegree = (rotationDegree.isNaN) ? 0 : rotationDegree; + } + // print("Rotation:$rotationDegree"); + mapController.rotate(-1 * rotationDegree); + }); + + // update polyline in polyline db + if (polylineDB.currPolyLineList.isEmpty && clusterConfig.orsApiKey.isNotEmpty) { + timerPolyline.cancel(); + timerPolyline = + Timer.periodic(const Duration(seconds: 10), (timer) async { + List data = await getJsonData(ref, vehicle.currLat, vehicle.currLng, + vehicle.desLat, vehicle.desLng); + List<LatLng> currList = + data.map((element) => LatLng(element[1], element[0])).toList(); + polylineDBNotifier.update(currPolyLineList: currList); + }); + } + }); + } + + @override + void dispose() { + super.dispose(); + timerCurrLocation.cancel(); + timerPolyline.cancel(); + } + + double tempangle = 0; + @override + Widget build(BuildContext context) { + final currListProvider = ref.watch(polyLineStateProvider); + List<LatLng> currPolyLineList = currListProvider.currPolyLineList; + + return FlutterMap( + mapController: mapController, + options: MapOptions( + rotation: 0, + center: src, + minZoom: 12, + zoom: 12, + maxZoom: 22.0, + keepAlive: true, + ), + layers: [ + TileLayerOptions( + maxZoom: 22, + maxNativeZoom: 18, + subdomains: ["a", "b", "c"], + urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + userAgentPackageName: 'dev.fleaflet.flutter_map.example', + ), + if (currPolyLineList.isNotEmpty) + PolylineLayerOptions( + polylineCulling: false, + polylines: [ + if (currPolyLineList.isNotEmpty) + Polyline( + strokeWidth: pathStroke, + points: currPolyLineList, + color: Colors.blue, + ), + ], + ), + if (currPolyLineList.isNotEmpty) + MarkerLayerOptions( + rotate: true, + markers: [ + Marker( + point: markerLocation, + width: 70, + height: 70, + builder: (context) => Image.asset( + "images/car.png", + ), + ), + ], + ), + ], + ); + } +} |