Skip to content

Commit

Permalink
Merge pull request #3 from amxDusT/testing
Browse files Browse the repository at this point in the history
v1.1.5
  • Loading branch information
amxDusT committed Mar 24, 2024
2 parents 7e27cbe + 3bfb3e7 commit 11292b4
Show file tree
Hide file tree
Showing 37 changed files with 1,475 additions and 503 deletions.
16 changes: 15 additions & 1 deletion lib/bindings/map_global_bindings.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import 'package:flutter_gtt/controllers/map/map_address.dart';
import 'package:flutter_gtt/controllers/map/map_animation.dart';
import 'package:flutter_gtt/controllers/map/map_global_controller.dart';
import 'package:flutter_gtt/controllers/map/map_travel_controller.dart';
import 'package:flutter_gtt/controllers/search/search_controller.dart';
import 'package:get/get.dart';

import '../controllers/map/map_location.dart';
Expand All @@ -7,6 +11,16 @@ class MapGlobalBindings extends Bindings {
@override
void dependencies() {
Get.put(MapLocation(), permanent: true);
Get.lazyPut<MapGlobalController>(() => MapGlobalController());
var globalController = MapGlobalController();
Get.put(
MapAnimation(
controller: globalController.mapController, vsync: globalController),
tag: 'globalAnimation',
);
Get.put(MapAddressController());
Get.put(MapSearchController());
Get.put(globalController);
Get.lazyPut(() => MapTravelController());
//Get.lazyPut(() => TravelAppBarController());
}
}
4 changes: 3 additions & 1 deletion lib/bindings/map_page_bindings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ class MapPageBindings extends Bindings {
void dependencies() {
var key =
Get.arguments['vehicles'].map((Route route) => route.gtfsId).join();

Get.put(MapLocation(), permanent: true);
Get.put(MapPageController(), tag: key);

Get.create(() => MapPageController(), tag: key);
}
}
12 changes: 12 additions & 0 deletions lib/controllers/home_controller.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_colorpicker/flutter_colorpicker.dart';
import 'package:flutter_gtt/controllers/settings_controller.dart';
import 'package:flutter_gtt/models/gtt/favorite_stop.dart';
import 'package:flutter_gtt/models/gtt/stop.dart';
import 'package:flutter_gtt/resources/database.dart';
import 'package:flutter_gtt/resources/globals.dart';
Expand Down Expand Up @@ -59,6 +60,17 @@ class HomeController extends GetxController {
getStops();
}

void updateFavorites() {
var date = DateTime.now();

fermate = fermate.map((fermata) {
date = date.add(const Duration(seconds: 1));
return fermata.copyWith(dateTime: date);
}).toList();
DatabaseCommands.updateAllStops(fermate);
update();
}

void switchAddDeleteFermata(Stop stop) async {
if (fermate.contains(stop)) {
DatabaseCommands.deleteStop(stop);
Expand Down
55 changes: 14 additions & 41 deletions lib/controllers/map/map_address.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,20 @@ import 'package:latlong2/latlong.dart';

import '../../resources/utils/utils.dart';

class MapAddressController {
class MapAddressController extends GetxController {
final RxList<Marker> markerSelected = <Marker>[].obs;
RxList<Address> lastAddress = <Address>[].obs;
RxList<AddressWithDetails> lastAddress = <AddressWithDetails>[].obs;
RxBool isLoadingAddress = false.obs;
final PopupController popupController;
final PopupController popupController = PopupController();
final mapLocation = Get.put(MapLocation(), permanent: true);
final MapAnimation mapAnimation;
MapAddressController({
required this.popupController,
required this.mapAnimation,
});
final MapAnimation mapAnimation = Get.find(tag: 'globalAnimation');

void onMapLongPress(TapPosition tapPosition, LatLng location) {
getAddress(location);
setMarker(location);
}

void setAddress(Address address) {
void setAddress(AddressWithDetails address) {
if (!address.isValid) {
Utils.showSnackBar('Indirizzo non valido');

Expand Down Expand Up @@ -59,10 +55,9 @@ class MapAddressController {
var jsonResult = await GeocoderApi.getAddressFromPosition(
position.latitude, position.longitude);

print(jsonResult);
Address address = Address.empty();
AddressWithDetails address = AddressWithDetails.empty();
if (jsonResult['features'] != null && jsonResult['features'].isNotEmpty) {
address = Address.fromJson(jsonResult['features'][0]);
address = AddressWithDetails.fromJson(jsonResult['features'][0]);
}

if (address.isValid) {
Expand All @@ -80,17 +75,17 @@ class MapAddressController {
if (markerSelected.isNotEmpty && markerSelected.first.point == position) {
addressReset();
}
lastAddress.value = [Address.empty()];
lastAddress.value = [AddressWithDetails.empty()];
Utils.showSnackBar('Indirizzo non valido');
}
//print(jsonResult['features'][0]);

isLoadingAddress.value = false;
}

FutureOr<List<Address>?> getSuggestions(String value) async {
FutureOr<List<AddressWithDetails>?> getSuggestions(String value) async {
if (value.isEmpty) {
return null;
value = 'Torino';
}
double? lat, lon;

Expand All @@ -100,40 +95,18 @@ class MapAddressController {
}
var jsonResult =
await GeocoderApi.getAddressFromString(value, lat: lat, lon: lon);
Set<Address> suggestions = {};
Address address;
Set<AddressWithDetails> suggestions = {};
AddressWithDetails address;
for (var json in jsonResult['features']) {
address = Address.fromJson(json);
address = AddressWithDetails.fromJson(json);
if (address.isValid) suggestions.add(address);
}

return suggestions.toList();
}

void onSearch(String value) async {
List<Address>? suggestions = await getSuggestions(value);
if (suggestions != null && suggestions.isNotEmpty) {
Address address = suggestions.first;

onSelected(address);
//print(address);
} else {
Utils.showSnackBar(
'Nessun indirizzo trovato',
snackPosition: SnackPosition.BOTTOM,
closePrevious: true,
);
}
}

void onSelected(Address address) {
void onSelected(AddressWithDetails address) {
setAddress(address);
mapAnimation.animate(address.position, zoom: 15);
}

void dispose() {
markerSelected.close();
lastAddress.close();
isLoadingAddress.close();
}
}
52 changes: 34 additions & 18 deletions lib/controllers/map/map_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,22 @@ class MapPageController extends GetxController
final List<AnimationController> _activeAnimations = [];

late RxList<FermataMarker> allStops;
RxMap<int, Stop> stopsMap = <int, Stop>{}.obs;
final RxMap<int, VehicleMarker> allVehicles = <int, VehicleMarker>{}.obs;
final RxMap<String, gtt.RouteWithDetails> routes =
<String, gtt.RouteWithDetails>{}.obs;

final Map<String, int> routeIndex = {};
final RxList<gtt.Pattern> routePatterns = <gtt.Pattern>[].obs;

//live bus
late final MqttController _mqttController;
final MqttController _mqttController = MqttController();

final RxMap<String, RxMap<int, MqttVehicle>> mqttInformation =
<String, RxMap<int, MqttVehicle>>{}.obs;

Marker? lastOpenedMarker;

late Timer _timer;
final MapLocation userLocation = Get.find();
final RxBool isLocationLoading = false.obs;

Expand All @@ -77,11 +79,11 @@ class MapPageController extends GetxController
.where(
(vehicle) =>
vehicle.mqttData.direction ==
routes[vehicle.mqttData.shortName]?.pattern.directionId,
routes[vehicle.mqttData.gtfsId]?.pattern.directionId,
)
.toList()
.obs;

late final Route<dynamic>? currentRoute;
double get offsetVal {
int len = routes.length;
switch (len) {
Expand All @@ -101,11 +103,13 @@ class MapPageController extends GetxController
for (var element in _activeAnimations) {
element.dispose();
}
_timer.cancel();
await _mqttController.dispose();
_mapAnimation.dispose();
mapController.dispose();
popupController.dispose();
userLocation.onMapDispose();

super.onClose();
}

Expand Down Expand Up @@ -137,22 +141,28 @@ class MapPageController extends GetxController
List<FermataMarker> list = allStops
.map((marker) => marker.copyWith(zoom: mapEvent.camera.zoom))
.toList();
allStops.clear();
allStops.addAll(list);
// TODO: check if works.
allStops.value = list;
allStops.refresh();
/* allStops.clear();
allStops.addAll(list); */
}
}

@override
void onInit() {
super.onInit();
currentRoute = Get.rawRoute;
_mapAnimation = MapAnimation(controller: mapController, vsync: this);
//onMapReady();
_onMapReady();
}

void onMapReady() async {
Timer.periodic(const Duration(minutes: 1), (timer) {
void _onMapReady() async {
_timer = Timer.periodic(const Duration(minutes: 1), (timer) {
_removeOldVehicles();
});
_mqttController = MqttController();
//_mqttController = MqttController();
List<gtt.Route> routeValues = Get.arguments['vehicles'];
final Stop? initialStop = Get.arguments['fermata'];

Expand Down Expand Up @@ -186,8 +196,7 @@ class MapPageController extends GetxController
!Storage.isRouteWithoutPassagesShowing &&
(route as gtt.RouteWithDetails).stoptimes.isEmpty) continue;

_mqttController
.addSubscription((route as gtt.RouteWithDetails).shortName);
_mqttController.addSubscription((route as gtt.RouteWithDetails).gtfsId);
stops.addAll(await DatabaseCommands.getStopsFromPattern(route.pattern));

/*for (var stop in stops) {
Expand All @@ -199,12 +208,12 @@ class MapPageController extends GetxController

// stopsTemp.addAll(await DatabaseCommands.getStopsFromPattern(route.pattern));

routes.putIfAbsent(route.shortName.replaceAll(' ', ''), () => route);
routeIndex.putIfAbsent(
route.shortName.replaceAll(' ', ''), () => routeIndex.length);
routes.putIfAbsent(route.gtfsId, () => route);
routeIndex.putIfAbsent(route.gtfsId, () => routeIndex.length);

if (++routeCount >= maxRoutesInMap) break;
}
stopsMap = {for (var stop in stops) stop.code: stop}.obs;
allStops = stops.map((stop) => FermataMarker(fermata: stop)).toList().obs;
/*allStops =
uniqueStops.map((stop) => FermataMarker(fermata: stop)).toList().obs;
Expand All @@ -217,6 +226,13 @@ class MapPageController extends GetxController
centerBounds();
}

void onMapReady() async {
if (routes.values.isNotEmpty) {
lastView = _getCenterBounds();
centerBounds();
}
}

void centerBounds() {
final constrained = _getCenterBounds();

Expand Down Expand Up @@ -294,6 +310,7 @@ class MapPageController extends GetxController
popupController.showPopupsOnlyFor([VehicleMarker(mqttData: payload)]);
lastOpenedMarker = VehicleMarker(mqttData: payload);
}
//follow vehicle
if (followVehicle.value == payload.vehicleNum) {
_mapAnimation.animate(payload.position, zoom: mapController.camera.zoom);
}
Expand All @@ -312,10 +329,9 @@ class MapPageController extends GetxController
color: routes.length == 1
? null
: Utils.darken(
colors[
(routeIndex[payload.shortName] ?? 0) % colors.length],
colors[(routeIndex[payload.gtfsId] ?? 0) % colors.length],
30),
internalColor: routes[payload.shortName]?.type == 0 &&
internalColor: routes[payload.gtfsId]?.type == 0 &&
!MapUtils.isTram(payload.vehicleNum)
? Colors.white
: null,
Expand All @@ -334,7 +350,7 @@ class MapPageController extends GetxController
allStops.clear();
List<Stop> stopTemp =
await DatabaseCommands.getStopsFromPattern(newPattern);

stopsMap = {for (var stop in stopTemp) stop.code: stop}.obs;
allStops.addAll(stopTemp.map((stop) => FermataMarker(fermata: stop)));
routes.update(routes.keys.first,
(value) => routes.values.first.copyWith(pattern: newPattern));
Expand Down
1 change: 0 additions & 1 deletion lib/controllers/map/map_geolocator_controller.dart

This file was deleted.

Loading

0 comments on commit 11292b4

Please sign in to comment.