Translation Track Driver, enhancement, initial camera

merge-requests/290/head
Zohaib Iqbal Kambrani 5 years ago
parent 63663f1b24
commit 15ec3ec9b9

@ -379,6 +379,8 @@ const Map localizedValues = {
"OrderNo": {"en": "Order No", "ar": "رقم الطلب"}, "OrderNo": {"en": "Order No", "ar": "رقم الطلب"},
"OrderDetails": {"en": "Order Details", "ar": "تفاصيل الطلب"}, "OrderDetails": {"en": "Order Details", "ar": "تفاصيل الطلب"},
"DeliveryDriverTrack": {"en": "Driver Tracking", "ar": "تتبع السائق"}, "DeliveryDriverTrack": {"en": "Driver Tracking", "ar": "تتبع السائق"},
"DeliveryLocation": {"en": "Delivery Location", "ar": "موقع التسليم"},
"Driver": {"en": "Driver", "ar": "السائق"},
"VitalSign": {"en": "Vital Sign", "ar": "العلامة حيوية"}, "VitalSign": {"en": "Vital Sign", "ar": "العلامة حيوية"},
"MonthlyReports": {"en": "Monthly Reports", "ar": "تقارير شهرية"}, "MonthlyReports": {"en": "Monthly Reports", "ar": "تقارير شهرية"},
"km": {"en": "KMs:", "ar": "كم"}, "km": {"en": "KMs:", "ar": "كم"},

@ -7,6 +7,7 @@ import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_model.dart';
import 'package:diplomaticquarterapp/core/service/parmacyModule/order-preview-service.dart'; import 'package:diplomaticquarterapp/core/service/parmacyModule/order-preview-service.dart';
import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -59,6 +60,7 @@ class _TrackDriverState extends State<TrackDriver> {
@override @override
void initState() { void initState() {
super.initState();
_order = widget.order; _order = widget.order;
DEST_LOCATION = _order.shippingAddress.getLocation(); DEST_LOCATION = _order.shippingAddress.getLocation();
@ -69,7 +71,6 @@ class _TrackDriverState extends State<TrackDriver> {
initMarkerUpdateStream(); initMarkerUpdateStream();
startUpdatingDriverLocation(); startUpdatingDriverLocation();
super.initState();
} }
@override @override
@ -98,6 +99,7 @@ class _TrackDriverState extends State<TrackDriver> {
delta.from.latitude, delta.from.latitude,
delta.from.longitude, delta.from.longitude,
), ),
onTap: onSourceMarkerTap
); );
_markers.removeWhere((m) => m.markerId.value == 'sourcePin'); _markers.removeWhere((m) => m.markerId.value == 'sourcePin');
@ -121,10 +123,10 @@ class _TrackDriverState extends State<TrackDriver> {
markers: _markers, markers: _markers,
polylines: _polylines, polylines: _polylines,
mapType: MapType.normal, mapType: MapType.normal,
initialCameraPosition: _orderDeliveryLocationCamera(), initialCameraPosition: CameraPosition(target: DEST_LOCATION, zoom: 4),
onMapCreated: (GoogleMapController controller) { onMapCreated: (GoogleMapController controller) {
_controller.complete(controller); _controller.complete(controller);
showPinsOnMap(); // showPinsOnMap();
}, },
), ),
// floatingActionButton: FloatingActionButton.extended( // floatingActionButton: FloatingActionButton.extended(
@ -144,22 +146,27 @@ class _TrackDriverState extends State<TrackDriver> {
} }
CameraPosition _orderDeliveryLocationCamera(){ CameraPosition _orderDeliveryLocationCamera(){
if(DEST_LOCATION != null){
final CameraPosition orderDeliveryLocCamera = CameraPosition( final CameraPosition orderDeliveryLocCamera = CameraPosition(
bearing: CAMERA_BEARING, bearing: CAMERA_BEARING,
target: DEST_LOCATION, target: DEST_LOCATION,
tilt: CAMERA_TILT, tilt: CAMERA_TILT,
zoom: CAMERA_ZOOM); zoom: CAMERA_ZOOM);
return orderDeliveryLocCamera; return orderDeliveryLocCamera;
}
return null;
} }
CameraPosition _driverLocationCamera(){ CameraPosition _driverLocationCamera(){
final CameraPosition driverLocCamera = CameraPosition( if(DEST_LOCATION != null) {
bearing: CAMERA_BEARING, final CameraPosition driverLocCamera = CameraPosition(
target: SOURCE_LOCATION, bearing: CAMERA_BEARING,
tilt: CAMERA_TILT, target: SOURCE_LOCATION,
zoom: CAMERA_ZOOM); tilt: CAMERA_TILT,
return driverLocCamera; zoom: CAMERA_ZOOM);
return driverLocCamera;
}
return null;
} }
@ -176,16 +183,6 @@ class _TrackDriverState extends State<TrackDriver> {
} }
Future<void> _fitCameraBetweenBothPoints() async {
final GoogleMapController controller = await _controller.future;
final CameraPosition driverLocCamera = CameraPosition(
bearing: CAMERA_BEARING,
target: SOURCE_LOCATION,
tilt: CAMERA_TILT,
zoom: CAMERA_ZOOM);
controller.animateCamera(CameraUpdate.newCameraPosition(driverLocCamera));
}
void showPinsOnMap() { void showPinsOnMap() {
// source pin // source pin
if(SOURCE_LOCATION != null){ if(SOURCE_LOCATION != null){
@ -195,7 +192,9 @@ class _TrackDriverState extends State<TrackDriver> {
_markers.add(Marker( _markers.add(Marker(
markerId: MarkerId('sourcePin'), markerId: MarkerId('sourcePin'),
position: pinPosition, position: pinPosition,
icon: sourceIcon icon: sourceIcon,
infoWindow: InfoWindow(title: TranslationBase.of(context).driver),
onTap: onSourceMarkerTap
)); ));
}); });
} }
@ -208,7 +207,9 @@ class _TrackDriverState extends State<TrackDriver> {
_markers.add(Marker( _markers.add(Marker(
markerId: MarkerId('destPin'), markerId: MarkerId('destPin'),
position: destPosition, position: destPosition,
icon: destinationIcon icon: destinationIcon,
infoWindow: InfoWindow(title: TranslationBase.of(context).deliveryLocation),
onTap: onDestinationMarkerTap
)); ));
}); });
} }
@ -218,36 +219,7 @@ class _TrackDriverState extends State<TrackDriver> {
} }
void updatePinOnMap() async { void updatePinOnMap() async {
// create a new CameraPosition instance
// every time the location changes, so the camera
// follows the pin as it moves with an animation
CameraPosition cPosition = CameraPosition(
zoom: CAMERA_ZOOM,
tilt: CAMERA_TILT,
bearing: CAMERA_BEARING,
target: SOURCE_LOCATION,
);
final GoogleMapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(cPosition));
_latLngStream.addLatLng(LatLngInfo(SOURCE_LOCATION.latitude, SOURCE_LOCATION.longitude, "sourcePin")); _latLngStream.addLatLng(LatLngInfo(SOURCE_LOCATION.latitude, SOURCE_LOCATION.longitude, "sourcePin"));
// do this inside the setState() so Flutter gets notified
// that a widget update is due
// setState(() {
// // updated position
// var pinPosition = SOURCE_LOCATION;
//
// // the trick is to remove the marker (by id)
// // and add it again at the updated location
// _markers.removeWhere((m) => m.markerId.value == 'sourcePin');
// _markers.add(Marker(
// markerId: MarkerId('sourcePin'),
// position: pinPosition, // updated position
// icon: sourceIcon
// ));
// });
drawRoute(); drawRoute();
} }
@ -283,9 +255,14 @@ class _TrackDriverState extends State<TrackDriver> {
int driverId = int.tryParse(_order.driverID); int driverId = int.tryParse(_order.driverID);
Future.doWhile(() async{ Future.doWhile(() async{
await Future.delayed(Duration(seconds: frequencyInSeconds));
if(isLocationUpdating){ if(isLocationUpdating){
await Future.delayed(Duration(seconds: frequencyInSeconds));
showLoading();
LatLng driverLocation = (await _orderServices.getDriverLocation(driverId)); LatLng driverLocation = (await _orderServices.getDriverLocation(driverId));
hideLoading();
if(driverLocation != null){ if(driverLocation != null){
if(SOURCE_LOCATION == null || DEST_LOCATION == null){ if(SOURCE_LOCATION == null || DEST_LOCATION == null){
SOURCE_LOCATION = driverLocation; SOURCE_LOCATION = driverLocation;
@ -294,12 +271,26 @@ class _TrackDriverState extends State<TrackDriver> {
} }
SOURCE_LOCATION = driverLocation; SOURCE_LOCATION = driverLocation;
updatePinOnMap(); updatePinOnMap();
updateMapCamera();
}else{
GifLoaderDialogUtils.hideDialog(context);
} }
} }
return isLocationUpdating; return isLocationUpdating;
}); });
}
showLoading(){
if(SOURCE_LOCATION == null){
GifLoaderDialogUtils.showMyDialog(context);
}
}
hideLoading(){
if(SOURCE_LOCATION == null){
GifLoaderDialogUtils.hideDialog(context);
}
} }
stopUpdatingDriverLocation(){ stopUpdatingDriverLocation(){
@ -316,4 +307,37 @@ class _TrackDriverState extends State<TrackDriver> {
int getMarkerIconSize(){ int getMarkerIconSize(){
return 140; return 140;
} }
updateMapCamera() async{
if(SOURCE_LOCATION != null && DEST_LOCATION != null){
// 'package:google_maps_flutter_platform_interface/src/types/location.dart': Failed assertion: line 72 pos 16: 'southwest.latitude <= northeast.latitude': is not true.
LatLngBounds bound;
if(SOURCE_LOCATION.latitude <= DEST_LOCATION.latitude){
bound = LatLngBounds(southwest: SOURCE_LOCATION, northeast: DEST_LOCATION);
}else{
bound = LatLngBounds(southwest: DEST_LOCATION, northeast: SOURCE_LOCATION);
}
if(bound == null)
return;
CameraUpdate camera = CameraUpdate.newLatLngBounds(bound, 50);
final GoogleMapController controller = await _controller.future;
controller.animateCamera(camera);
}
}
bool showSrcMarkerTitle = false;
onSourceMarkerTap() async{
// showSrcMarkerTitle = !showSrcMarkerTitle;
}
bool showDestMarkerTitle = false;
onDestinationMarkerTap() async{
// showDestMarkerTitle = !showDestMarkerTitle;
// Marker m = _markers.firstWhere((m) => m.markerId.value == 'destPin');
// if(showDestMarkerTitle){
// }
}
} }

@ -563,6 +563,8 @@ class TranslationBase {
String get shippedMethod => localizedValues['shippedMethod'][locale.languageCode]; String get shippedMethod => localizedValues['shippedMethod'][locale.languageCode];
String get orderDetail => localizedValues['orderDetail'][locale.languageCode]; String get orderDetail => localizedValues['orderDetail'][locale.languageCode];
String get deliveryDriverTrack => localizedValues['DeliveryDriverTrack'][locale.languageCode]; String get deliveryDriverTrack => localizedValues['DeliveryDriverTrack'][locale.languageCode];
String get deliveryLocation => localizedValues['DeliveryLocation'][locale.languageCode];
String get driver => localizedValues['Driver'][locale.languageCode];
String get subtotal => localizedValues['subtotal'][locale.languageCode]; String get subtotal => localizedValues['subtotal'][locale.languageCode];
String get shipping => localizedValues['shipping'][locale.languageCode]; String get shipping => localizedValues['shipping'][locale.languageCode];
String get shipBy => localizedValues['shipBy'][locale.languageCode]; String get shipBy => localizedValues['shipBy'][locale.languageCode];

Loading…
Cancel
Save