diff --git a/RELEASE/app-release_version_2_1_2.aab b/RELEASE/app-release_version_2_1_2.aab new file mode 100644 index 0000000..715a030 Binary files /dev/null and b/RELEASE/app-release_version_2_1_2.aab differ diff --git a/lib/Screens/Configuration/config_view.dart b/lib/Screens/Configuration/config_view.dart index 0ff5e2e..aeeba39 100644 --- a/lib/Screens/Configuration/config_view.dart +++ b/lib/Screens/Configuration/config_view.dart @@ -34,7 +34,7 @@ class ConfigViewWidget extends StatefulWidget { class _ConfigViewWidget extends State { Size sizeScreen = new Size(1080.0, 1920.0); // Tablet resolution - String url = "https://api.mymuseum.be"; //DEV "http://192.168.31.96" http://192.168.31.140:8089 // PROD MDLF "http://192.168.1.19" + String url = "https://api.myinfomate.be"; //DEV "http://192.168.31.96" http://192.168.31.140:8089 // PROD MDLF "http://192.168.1.19" int? pinCode; bool configOk = false; diff --git a/lib/Screens/Map/flutter_map_view.dart b/lib/Screens/Map/flutter_map_view.dart index b7e1959..a35dc5e 100644 --- a/lib/Screens/Map/flutter_map_view.dart +++ b/lib/Screens/Map/flutter_map_view.dart @@ -57,7 +57,7 @@ class _FlutterMapViewState extends State { mapContext.setSelectedPoint(point); mapContext.setSelectedPointForNavigate(point);*/ mapContext.setSelectedPoint(point); - mapContext.setSelectedPointForNavigate(point); + //mapContext.setSelectedPointForNavigate(point); }, child: widget.icons.firstWhere((i) => i['id'] == point.categorieId, orElse: () => widget.icons.first)['icon'] != null ? Image.memory(widget.icons.firstWhere((i) => i['id'] == point.categorieId, orElse: () => widget.icons.first)['icon']) : Icon(Icons.pin_drop, color: Colors.red),//widget.icons.firstWhere((i) => i['id'] == point.categorieId, orElse: () => widget.icons.first)['icon'], ) @@ -122,7 +122,7 @@ class _FlutterMapViewState extends State { var geoPoint = mapContext.getSelectedPointForNavigate() as GeoPointDTO?; if (geoPoint != null && mapController != null) { print("COUCOU IL FAUT NAVIGATE FLUTTER MAP"); - mapController!.move(LatLng(double.tryParse(geoPoint.latitude!)!, double.tryParse(geoPoint.longitude!)!), 16); + mapController!.move(LatLng(double.tryParse(geoPoint.latitude!)!, double.tryParse(geoPoint.longitude!)!), mapController!.camera.zoom/*, widget.mapDTO!.zoom != null ? widget.mapDTO!.zoom!.toDouble() : 16*/); // keep actual zoom } return SizedBox(); }, diff --git a/lib/Screens/Map/geo_point_filter.dart b/lib/Screens/Map/geo_point_filter.dart index 4e4df20..e52e910 100644 --- a/lib/Screens/Map/geo_point_filter.dart +++ b/lib/Screens/Map/geo_point_filter.dart @@ -154,16 +154,49 @@ class _GeoPointFilterState extends State { if (node.children.isNotEmpty) { for (var childNode in node.children) { if (childNode.checked) { - checkedGeoPoints.add(widget.geoPoints.firstWhere((point) => int.parse( - (point.latitude ?? '').substring(0, min(point.latitude!.length, 10)).replaceAll(".", "").replaceAll("-", "") + (point.longitude ?? '').substring(0, min(point.longitude!.length, 10)).replaceAll(".", "").replaceAll("-", "") - ) == childNode.id)); + var point = widget.geoPoints.firstWhere( + (point) { + String latitudePart = (point.latitude ?? '') + .substring(0, min(point.latitude!.length, 10)) + .replaceAll(".", "") + .replaceAll("-", ""); + String longitudePart = (point.longitude ?? '') + .substring(0, min(point.longitude!.length, 10)) + .replaceAll(".", "") + .replaceAll("-", ""); + int combinedValue = int.parse(latitudePart + longitudePart); + + return combinedValue == node.id; + }, + orElse: () => GeoPointDTO(id: -1), + ); + + if (point.id != -1) { + checkedGeoPoints.add(point); + } } } } else { if(node.checked) { - checkedGeoPoints.add(widget.geoPoints.firstWhere((point) => int.parse( - (point.latitude ?? '').substring(0, min(point.latitude!.length, 10)).replaceAll(".", "").replaceAll("-", "") + (point.longitude ?? '').substring(0, min(point.longitude!.length, 10)).replaceAll(".", "").replaceAll("-", "") - ) == node.id)); + var point = widget.geoPoints.firstWhere( + (point) { + String latitudePart = (point.latitude ?? '') + .substring(0, min(point.latitude!.length, 10)) + .replaceAll(".", "") + .replaceAll("-", ""); + String longitudePart = (point.longitude ?? '') + .substring(0, min(point.longitude!.length, 10)) + .replaceAll(".", "") + .replaceAll("-", ""); + int combinedValue = int.parse(latitudePart + longitudePart); + return combinedValue == node.id; + }, + orElse: () => GeoPointDTO(id: -1), + ); + + if (point.id != -1) { + checkedGeoPoints.add(point); + } } } } @@ -305,11 +338,29 @@ class _GeoPointFilterState extends State { sendFilteredGeoPoint(); }, onClicked: (node, commonID) { - print("its clicked ! " + commonID.toString()); - var selectedNode = widget.geoPoints.firstWhere((point) => int.parse( - (point.latitude ?? '').substring(0, min(point.latitude!.length, 10)).replaceAll(".", "").replaceAll("-", "") + (point.longitude ?? '').substring(0, min(point.longitude!.length, 10)).replaceAll(".", "").replaceAll("-", "") - ) == commonID); - mapContext.setSelectedPointForNavigate(selectedNode); + var selectedNode = widget.geoPoints.firstWhere( + (point) { + String latitudePart = (point.latitude ?? '') + .substring(0, min(point.latitude!.length, 10)) + .replaceAll(".", "") + .replaceAll("-", ""); + String longitudePart = (point.longitude ?? '') + .substring(0, min(point.longitude!.length, 10)) + .replaceAll(".", "") + .replaceAll("-", ""); + + int combinedValue = int.parse(latitudePart + longitudePart); + + return combinedValue == commonID; + }, + orElse: () => GeoPointDTO(id: -1), + ); + + if (selectedNode.id != -1) { + mapContext.setSelectedPointForNavigate(selectedNode); + } else { + print('Aucun point correspondant trouvé.'); + } }, checkBoxColor: primaryColor, childrenPadding: EdgeInsets.only(left: 20, top: 10, right: 0, bottom: 10), diff --git a/lib/Screens/Map/google_map_view.dart b/lib/Screens/Map/google_map_view.dart index 48f0af4..e690026 100644 --- a/lib/Screens/Map/google_map_view.dart +++ b/lib/Screens/Map/google_map_view.dart @@ -67,7 +67,7 @@ class _GoogleMapViewState extends State { onTap: () { //setState(() { mapContext.setSelectedPoint(point); - mapContext.setSelectedPointForNavigate(point); + //mapContext.setSelectedPointForNavigate(point); //}); }, infoWindow: InfoWindow.noText)); @@ -170,14 +170,18 @@ class _GoogleMapViewState extends State { var geopoint = mapContext.getSelectedPointForNavigate() as GeoPointDTO?; if (geopoint != null && _GoogleMapcontroller != null) { print("COUCOU IL FAUT NAVUGATE"); - _GoogleMapcontroller!.animateCamera(CameraUpdate.newCameraPosition( - CameraPosition( - target: LatLng(double.tryParse(geopoint.latitude!)!, double.tryParse(geopoint.longitude!)!), - tilt: 0.0, - bearing: 0.0, - zoom: 16.0 - ) - )); + // TODO Handle zoomDetail + _GoogleMapcontroller!.getZoomLevel().then((actualZoom) { + _GoogleMapcontroller!.animateCamera(CameraUpdate.newCameraPosition( + CameraPosition( + target: LatLng(double.tryParse(geopoint.latitude!)!, double.tryParse(geopoint.longitude!)!), + tilt: 0.0, + bearing: 0.0, + zoom: actualZoom + //zoom: widget.mapDTO.zoom != null ? widget.mapDTO.zoom!.toDouble() : 16 + ) + )); + }); } return SizedBox(); }, diff --git a/lib/Screens/Map/map_box_view.dart b/lib/Screens/Map/map_box_view.dart index a00da71..a49fadb 100644 --- a/lib/Screens/Map/map_box_view.dart +++ b/lib/Screens/Map/map_box_view.dart @@ -42,7 +42,7 @@ class AnnotationClickListener extends mapBox.OnPointAnnotationClickListener { try{ var markerToShow = markersList.firstWhere((ml) => "${parse(ml.title!.first.value).documentElement!.text}${ml.latitude}${ml.longitude}" == annotation.textField); mapContext.setSelectedPoint(markerToShow); - mapContext.setSelectedPointForNavigate(markerToShow); + //mapContext.setSelectedPointForNavigate(markerToShow); } catch(e) { print("ISSSUE setSelectedMarker"); print(e); @@ -198,6 +198,7 @@ class _MapBoxViewState extends State { var geoPoint = mapContext.getSelectedPointForNavigate() as GeoPointDTO?; if (geoPoint != null && mapboxMap != null) { print("COUCOU IL FAUT NAVUGATE MAPBOX"); + // TODO Handle zoomDetail mapboxMap?.easeTo( mapBox.CameraOptions( center: mapBox.Point(coordinates: mapBox.Position(double.tryParse(geoPoint.longitude!)!, double.tryParse(geoPoint.latitude!)!)), //.toJson() diff --git a/lib/main.dart b/lib/main.dart index 545d5ee..0d1c0d6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -111,7 +111,7 @@ class _MyAppState extends State { create: (_) => AppContext(widget.tabletAppContext), child: MaterialApp( debugShowCheckedModeBanner: false, - title: 'Tablet App Demo', + title: 'MyInfoMate Tablet App', initialRoute: widget.initialRoute, /*supportedLocales: [ const Locale('en', 'US'), diff --git a/manager_api/lib/api.dart b/manager_api/lib/api.dart index 078b45c..8e2d73c 100644 --- a/manager_api/lib/api.dart +++ b/manager_api/lib/api.dart @@ -17,6 +17,8 @@ import 'dart:io'; import 'package:http/http.dart'; import 'package:intl/intl.dart'; import 'package:meta/meta.dart'; +import 'package:http/http.dart' as http; +import 'package:http/io_client.dart'; part 'api_client.dart'; part 'api_helper.dart'; diff --git a/manager_api/lib/api_client.dart b/manager_api/lib/api_client.dart index 2fb099d..4634079 100644 --- a/manager_api/lib/api_client.dart +++ b/manager_api/lib/api_client.dart @@ -11,21 +11,23 @@ part of openapi.api; class ApiClient { - ApiClient({this.basePath = 'https://api.myinfomate.be', this.authentication,}); + ApiClient({this.basePath = 'https://api.myinfomate.be', this.authentication,}) { + _client = createIOClient(); + } final String basePath; final Authentication? authentication; - var _client = Client(); + late http.Client _client; final _defaultHeaderMap = {}; /// Returns the current HTTP [Client] instance to use in this class. /// /// The return value is guaranteed to never be null. - Client get client => _client; + http.Client get client => _client; /// Requests to use a new HTTP [Client] in this class. - set client(Client newClient) { + set client(http.Client newClient) { _client = newClient; } @@ -35,6 +37,27 @@ class ApiClient { _defaultHeaderMap[key] = value; } + HttpClient createHttpClient() { + SecurityContext context = SecurityContext.defaultContext; + + try { + // Assumes that the certificate is in PEM format and located in the assets + context.setTrustedCertificates('/storage/emulated/0/Download/isrgrootx1.pem'); // Hardcoded for MDLF + } on TlsException catch (e) { + print('Error loading certificate: $e'); + } on Exception catch (error) { + print('I guess not found, but nevermind for other than MDLF'); + } + + return HttpClient(context: context); + //..badCertificateCallback = (X509Certificate cert, String host, int port) => true; + } + + IOClient createIOClient() { + HttpClient httpClient = createHttpClient(); + return IOClient(httpClient); + } + // We don't use a Map for queryParams. // If collectionFormat is 'multi', a key might appear multiple times. Future invokeAPI(