diff --git a/assets/icons/marker.png b/assets/icons/marker.png new file mode 100644 index 0000000..0ef8e10 Binary files /dev/null and b/assets/icons/marker.png differ diff --git a/lib/Screens/Agenda/agenda_view.dart b/lib/Screens/Agenda/agenda_view.dart index 8a38364..8caaf44 100644 --- a/lib/Screens/Agenda/agenda_view.dart +++ b/lib/Screens/Agenda/agenda_view.dart @@ -7,7 +7,6 @@ import 'dart:ui' as ui; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:manager_api/api.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:tablet_app/Components/loading_common.dart'; import 'package:tablet_app/Models/agenda.dart'; @@ -135,7 +134,7 @@ class _AgendaView extends State { showDialog( context: context, builder: (BuildContext context) { - return EventPopup(eventAgenda: eventAgenda); + return EventPopup(eventAgenda: eventAgenda, mapProvider: agendaDTO.mapProvider ?? MapProvider.Google); }, ); }, diff --git a/lib/Screens/Agenda/event_popup.dart b/lib/Screens/Agenda/event_popup.dart index 61633ad..6158c21 100644 --- a/lib/Screens/Agenda/event_popup.dart +++ b/lib/Screens/Agenda/event_popup.dart @@ -1,22 +1,28 @@ import 'dart:async'; +import 'dart:typed_data'; import 'package:auto_size_text/auto_size_text.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:mapbox_maps_flutter/mapbox_maps_flutter.dart' as mapBox; +import 'package:manager_api/api.dart'; import 'package:tablet_app/Components/loading_common.dart'; import 'package:tablet_app/Components/video_viewer_youtube.dart'; import 'package:tablet_app/Models/agenda.dart'; // Assurez-vous d'importer votre modèle d'agenda import 'package:intl/intl.dart'; import 'package:tablet_app/constants.dart'; +import 'dart:ui' as ui; class EventPopup extends StatefulWidget { final EventAgenda eventAgenda; + final MapProvider mapProvider; - EventPopup({Key? key, required this.eventAgenda}) : super(key: key); + EventPopup({Key? key, required this.eventAgenda, required this.mapProvider}) : super(key: key); @override State createState() => _EventPopupState(); @@ -28,6 +34,9 @@ class _EventPopupState extends State { Set markers = {}; bool init = false; + mapBox.MapboxMap? mapboxMap; + mapBox.PointAnnotationManager? pointAnnotationManager; + Set getMarkers() { markers = {}; @@ -46,6 +55,51 @@ class _EventPopupState extends State { return markers; } + _onMapCreated(mapBox.MapboxMap mapboxMap, Uint8List icon) { + this.mapboxMap = mapboxMap; + + mapboxMap.annotations.createPointAnnotationManager().then((pointAnnotationManager) async { + this.pointAnnotationManager = pointAnnotationManager; + pointAnnotationManager.createMulti(createPoints(LatLng(widget.eventAgenda.address!.lat, widget.eventAgenda.address!.lng), icon)); + init = true; + }); + } + + createPoints(LatLng position, Uint8List icon) { + var options = []; + options.add(mapBox.PointAnnotationOptions( + geometry: mapBox.Point( + coordinates: mapBox.Position( + position.longitude, + position.latitude, + )).toJson(), + iconSize: 1.3, + iconOffset: [0.0, 0.0], + symbolSortKey: 10, + iconColor: 0, + iconImage: null, + image: icon, //widget.selectedMarkerIcon, + )); + print(options.length); + + return options; + } + + getByteIcon() async { + final ByteData bytes = await rootBundle.load('assets/icons/marker.png'); + var icon = await getBytesFromAsset(bytes, 25); + return icon; + } + + Future getBytesFromAsset(ByteData data, int width) async { + //ByteData data = await rootBundle.load(path); + ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(), + targetWidth: width); + ui.FrameInfo fi = await codec.getNextFrame(); + return (await fi.image.toByteData(format: ui.ImageByteFormat.png)) + !.buffer + .asUint8List(); + } @override Widget build(BuildContext context) { @@ -235,7 +289,8 @@ class _EventPopupState extends State { SizedBox( width: size.width * 0.28, height: size.height * 0.2, - child: GoogleMap( + child: widget.mapProvider == MapProvider.Google ? + GoogleMap( mapToolbarEnabled: false, initialCameraPosition: CameraPosition( target: LatLng(double.parse(widget.eventAgenda.address!.lat!.toString()), double.parse(widget.eventAgenda.address!.lng!.toString())), @@ -245,6 +300,33 @@ class _EventPopupState extends State { _controller.complete(controller); }, markers: markers, + ) : + FutureBuilder( + future: getByteIcon(), + builder: (context, AsyncSnapshot snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + Uint8List icon = snapshot.data!; + return mapBox.MapWidget( + key: ValueKey("mapBoxWidget"), + styleUri: mapBox.MapboxStyles.STANDARD, + onMapCreated: (maBoxMap) { + _onMapCreated(maBoxMap, icon); + }, + cameraOptions: mapBox.CameraOptions( + center: mapBox.Point(coordinates: mapBox.Position(double.parse(widget.eventAgenda.address!.lng!.toString()), double.parse(widget.eventAgenda.address!.lat!.toString()))).toJson(), + zoom: 14 + ), + ); + } else if (snapshot.connectionState == ConnectionState.none) { + return Text("No data"); + } else { + return Center( + child: Container( + child: LoadingCommon() + ) + ); + } + } ), ): SizedBox(), SizedBox( diff --git a/lib/Screens/Configuration/config_view.dart b/lib/Screens/Configuration/config_view.dart index b085c60..5e2bfbc 100644 --- a/lib/Screens/Configuration/config_view.dart +++ b/lib/Screens/Configuration/config_view.dart @@ -18,7 +18,7 @@ import 'package:tablet_app/Helpers/DeviceInfoHelper.dart'; import 'package:tablet_app/Helpers/ImageCustomProvider.dart'; import 'package:tablet_app/Helpers/MQTTHelper.dart'; import 'package:tablet_app/Models/tabletContext.dart'; -import 'package:tablet_app/Screens/MainView/dropDown_configuration.dart'; +import 'package:tablet_app/Screens/Configuration/dropDown_configuration.dart'; import 'package:tablet_app/Screens/MainView/main_view.dart'; import 'package:tablet_app/app_context.dart'; import 'package:tablet_app/client.dart'; diff --git a/lib/Screens/MainView/dropDown_configuration.dart b/lib/Screens/Configuration/dropDown_configuration.dart similarity index 100% rename from lib/Screens/MainView/dropDown_configuration.dart rename to lib/Screens/Configuration/dropDown_configuration.dart diff --git a/lib/Screens/Map/map_box_view.dart b/lib/Screens/Map/map_box_view.dart index 6d3d65e..4e9a5fe 100644 --- a/lib/Screens/Map/map_box_view.dart +++ b/lib/Screens/Map/map_box_view.dart @@ -54,90 +54,49 @@ class _MapBoxViewState extends State { late mapBox.MapboxMap? mapboxMap; late mapBox.PointAnnotationManager? pointAnnotationManager; + createPoints() { + var options = []; + pointsToShow!.forEach((point) { + var textSansHTML = parse(point.title!.firstWhere((translation) => translation.language == widget.language).value); + var mapMarker = new MapMarker( + id: point.id, + title: parse(textSansHTML.body!.text).documentElement!.text, + description: point.description!.firstWhere((translation) => translation.language == widget.language).value, + longitude: point.longitude, + latitude: point.latitude, + contents: point.contents + ); + markersList.add(mapMarker); + print(widget.selectedMarkerIcon); + options.add(mapBox.PointAnnotationOptions( + geometry: mapBox.Point( + coordinates: mapBox.Position( + double.tryParse(mapMarker.longitude!)!, + double.tryParse(mapMarker.latitude!)!, + )).toJson(), + iconSize: 1.3, + textField: mapMarker.id.toString(), + textOpacity: 0.0, + iconOffset: [0.0, 0.0], + symbolSortKey: 10, + iconColor: 0, + iconImage: null, + image: widget.selectedMarkerIcon, //widget.selectedMarkerIcon, + )); // , + }); + print(options.length); + + return options; + } + _onMapCreated(mapBox.MapboxMap mapboxMap, MapContext mapContext) { this.mapboxMap = mapboxMap; mapboxMap.annotations.createPointAnnotationManager().then((pointAnnotationManager) async { this.pointAnnotationManager = pointAnnotationManager; - - var options = []; - pointsToShow!.forEach((point) { - var textSansHTML = parse(point.title!.firstWhere((translation) => translation.language == widget.language).value); - var mapMarker = new MapMarker( - id: point.id, - title: parse(textSansHTML.body!.text).documentElement!.text, - description: point.description!.firstWhere((translation) => translation.language == widget.language).value, - longitude: point.longitude, - latitude: point.latitude, - contents: point.contents - ); - markersList.add(mapMarker); - if (mapMarker.latitude != null && mapMarker.longitude != null) { - /*markers.add(Marker( - draggable: false, - markerId: MarkerId(mapMarker.latitude! + mapMarker.longitude!), - position: LatLng( - double.tryParse(mapMarker.latitude!)!, - double.tryParse(mapMarker.longitude!)!, - ), - icon: widget.selectedMarkerIcon != null ? BitmapDescriptor.fromBytes(widget.selectedMarkerIcon!) : BitmapDescriptor.defaultMarker, - /*icon: BitmapDescriptor.defaultMarkerWithHue( - BitmapDescriptor.hueYellow, - ),*/ - onTap: () { - //setState(() { - print("coucou tapped"); - /*mapContext.setSelectedMarker( - new MapMarker( - title: mapMarker.title, - contents: mapMarker.contents, - description: mapMarker.description, - longitude: mapMarker.longitude, - latitude: mapMarker.latitude, - ) - );*/ - //}); - }, - infoWindow: InfoWindow.noText));*/ - } - print("ADD POINT TO MAPPPPPPPPPPPP"); - print(widget.selectedMarkerIcon); - options.add(mapBox.PointAnnotationOptions( - geometry: mapBox.Point( - coordinates: mapBox.Position( - double.tryParse(mapMarker.longitude!)!, - double.tryParse(mapMarker.latitude!)!, - )).toJson(), - iconSize: 1.3, - textField: mapMarker.id.toString(), - textOpacity: 0.0, - iconOffset: [0.0, 0.0], - symbolSortKey: 10, - iconColor: 0, - iconImage: widget.selectedMarkerIcon == null ? "car-15": null, - image: widget.selectedMarkerIcon, //widget.selectedMarkerIcon, - )); // , - }); - /*options.add(mapBox.PointAnnotationOptions( - geometry: mapBox.Point( - coordinates: mapBox.Position( - 0.381457, - 6.687337, - )).toJson(), image: widget.selectedMarkerIcon));*/ - print(options.length); - pointAnnotationManager.createMulti(options); - - /*var carOptions = []; - for (var i = 0; i < 20; i++) { - carOptions.add(mapBox.PointAnnotationOptions( - geometry: mapBox.Point( - coordinates: mapBox.Position( - double.tryParse(mapMarker.longitude!)!, - double.tryParse(mapMarker.latitude!)!, - )).toJson(), iconImage: "car-15")); - }*/ - //pointAnnotationManager.createMulti(carOptions); + pointAnnotationManager.createMulti(createPoints()); pointAnnotationManager.addOnPointAnnotationClickListener(AnnotationClickListener(mapContext: mapContext, markersList: markersList)); + init = true; }); } @@ -148,50 +107,6 @@ class _MapBoxViewState extends State { List? selectedCategories = []; bool init = false; - /*Set getMarkers(language, mapContext) { - markers = {}; - - pointsToShow!.forEach((point) { - var textSansHTML = parse(point.title!.firstWhere((translation) => translation.language == language).value); - var mapMarker = new MapMarker( - id: point.id, - title: parse(textSansHTML.body!.text).documentElement!.text, - description: point.description!.firstWhere((translation) => translation.language == language).value, - longitude: point.longitude, - latitude: point.latitude, - contents: point.contents - ); - if (mapMarker.latitude != null && mapMarker.longitude != null) { - markers.add(Marker( - draggable: false, - markerId: MarkerId(mapMarker.latitude! + mapMarker.longitude!), - position: LatLng( - double.tryParse(mapMarker.latitude!)!, - double.tryParse(mapMarker.longitude!)!, - ), - icon: widget.selectedMarkerIcon != null ? BitmapDescriptor.fromBytes(widget.selectedMarkerIcon!) : BitmapDescriptor.defaultMarker, - /*icon: BitmapDescriptor.defaultMarkerWithHue( - BitmapDescriptor.hueYellow, - ),*/ - onTap: () { - //setState(() { - mapContext.setSelectedMarker( - new MapMarker( - title: mapMarker.title, - contents: mapMarker.contents, - description: mapMarker.description, - longitude: mapMarker.longitude, - latitude: mapMarker.latitude, - ) - ); - //}); - }, - infoWindow: InfoWindow.noText)); - } - }); - return markers; - }*/ - @override void initState() { pointsToShow = widget.mapDTO!.points; @@ -210,49 +125,38 @@ class _MapBoxViewState extends State { final mapContext = Provider.of(context); Size size = MediaQuery.of(context).size; - if(!init) { - print("getmarkers in build"); - //getMarkers(widget.language, mapContext); - init = true; - } - //MapTypeApp? mapTypeApp = MapTypeApp.fromJson(widget.mapDTO!.mapType!.value); - //print(mapTypeApp.toString()); - - MapType type = MapType.hybrid; - //if(kIsWeb) { - if(widget.mapDTO!.mapType != null) { - switch(widget.mapDTO!.mapType!.value) { - case 0: - type = MapType.none; - break; - case 1: - type = MapType.normal; - break; - case 2: - type = MapType.satellite; - break; - case 3: - type = MapType.terrain; - break; - case 4: - type = MapType.hybrid; - break; - } + var type = mapBox.MapboxStyles.STANDARD; + if(widget.mapDTO!.mapTypeMapbox != null) { + switch(widget.mapDTO!.mapTypeMapbox!) { + case MapTypeMapBox.standard: + type = mapBox.MapboxStyles.STANDARD; + break; + case MapTypeMapBox.streets: + type = mapBox.MapboxStyles.MAPBOX_STREETS; + break; + case MapTypeMapBox.outdoors: + type = mapBox.MapboxStyles.OUTDOORS; + break; + case MapTypeMapBox.light: + type = mapBox.MapboxStyles.LIGHT; + break; + case MapTypeMapBox.dark: + type = mapBox.MapboxStyles.DARK; + break; + case MapTypeMapBox.satellite: + type = mapBox.MapboxStyles.SATELLITE; + break; + case MapTypeMapBox.satellite_streets: + type = mapBox.MapboxStyles.SATELLITE_STREETS; + break; } - - /*} else { - print("is OTHEER"); - type = EnumToString.fromString(MapType.values, widget.mapDTO!.mapType.toString()) != null ? EnumToString.fromString(MapType.values, widget.mapDTO!.mapType.toString())! : MapType.hybrid; - }*/ - - - //MapType type = EnumToString.fromString(MapType.values, widget.mapDTO!.mapType.toString()) != null ? EnumToString.fromString(MapType.values, widget.mapDTO!.mapType.toString())! : MapType.hybrid; + } return Stack( children: [ Center( child: mapBox.MapWidget( - key: ValueKey("mapWidget"), - styleUri: mapBox.MapboxStyles.STANDARD, // TODO update // widget.mapDTO!.mapType != null ? EnumToString.fromString(MapType.values, widget.mapDTO!.mapType.toString())!: MapType.hybrid, + key: ValueKey("mapBoxWidget"), + styleUri: type, onMapCreated: (maBoxMap) { _onMapCreated(maBoxMap, mapContext); }, @@ -285,6 +189,7 @@ class _MapBoxViewState extends State { pointsToShow = widget.mapDTO!.points!.where((point) => tempOutput.any((tps) => point.categorie?.label?.firstWhere((lab) => lab.language == widget.language).value == tps) || point.categorie == null).toList(); //markers = getMarkers(widget.language, mapContext); pointAnnotationManager!.deleteAll(); + pointAnnotationManager!.createMulti(createPoints()); mapContext.notifyListeners(); }); } diff --git a/lib/Screens/Map/map_view.dart b/lib/Screens/Map/map_view.dart index 107857b..97e517a 100644 --- a/lib/Screens/Map/map_view.dart +++ b/lib/Screens/Map/map_view.dart @@ -12,6 +12,7 @@ import 'package:tablet_app/Components/loading_common.dart'; import 'package:tablet_app/Models/map-marker.dart'; import 'dart:ui' as ui; import 'package:flutter/widgets.dart'; +import 'package:tablet_app/Screens/Map/map_box_view.dart'; import 'package:tablet_app/Screens/Map/marker_view.dart'; import 'package:http/http.dart' as http; @@ -19,7 +20,7 @@ import '../../app_context.dart'; import 'google_map_view.dart'; import 'package:image/image.dart' as IMG; -Set markers = {}; +//Set markers = {}; List markersList = []; class MapViewWidget extends StatefulWidget { @@ -76,7 +77,17 @@ class _MapViewWidget extends State { print("snapshot"); print(snapshot.data); print(selectedMarkerIcon); - return GoogleMapView(language: appContext.getContext().language, mapDTO: mapDTO, selectedMarkerIcon: selectedMarkerIcon); + + switch(mapDTO!.mapProvider) { + case MapProvider.Google: + return GoogleMapView(language: appContext.getContext().language, mapDTO: mapDTO, selectedMarkerIcon: selectedMarkerIcon); + case MapProvider.MapBox: + return MapBoxView(language: appContext.getContext().language, mapDTO: mapDTO, selectedMarkerIcon: selectedMarkerIcon); + default: + // By default google + return GoogleMapView(language: appContext.getContext().language, mapDTO: mapDTO, selectedMarkerIcon: selectedMarkerIcon); + } + } else if (snapshot.connectionState == ConnectionState.none) { return Text("No data"); } else { @@ -107,6 +118,10 @@ class _MapViewWidget extends State { final ByteData imageData = await NetworkAssetBundle(Uri.parse(source)).load(""); selectedMarkerIcon = await getBytesFromAsset(imageData, 50); } + } else { + // default icon + final ByteData bytes = await rootBundle.load('assets/icons/marker.png'); + selectedMarkerIcon = await getBytesFromAsset(bytes, 25); } } diff --git a/lib/Screens/PDF/pdf_filter.dart b/lib/Screens/PDF/pdf_filter.dart new file mode 100644 index 0000000..b62ce21 --- /dev/null +++ b/lib/Screens/PDF/pdf_filter.dart @@ -0,0 +1,66 @@ +import 'dart:ffi'; + +import 'package:flutter/material.dart'; +import 'package:flutter_widget_from_html/flutter_widget_from_html.dart'; +import 'package:manager_api/api.dart'; +import 'package:provider/provider.dart'; +import 'package:tablet_app/Models/tabletContext.dart'; +import 'package:tablet_app/app_context.dart'; +import 'package:tablet_app/constants.dart'; + +class PdfFilter extends StatefulWidget { + final List pdfsList; + final Function(int?) onPDFSelected; + + PdfFilter({required this.pdfsList, required this.onPDFSelected}); + + @override + _PdfFilterState createState() => _PdfFilterState(); +} + +class _PdfFilterState extends State { + int _selectedOrderPdf = 0; + + @override + Widget build(BuildContext context) { + final appContext = Provider.of(context); + TabletAppContext tabletAppContext = appContext.getContext(); + var currentLanguage = tabletAppContext.language; + + return ListView.builder( + itemCount: widget.pdfsList.length, + itemBuilder: (context, index) { + if (widget.pdfsList.isNotEmpty) { + return ListTile( + title: HtmlWidget( + '${widget.pdfsList[index].pdfFilesAndTitles!.firstWhere((pfat) => pfat.language == currentLanguage).value}', + textStyle: TextStyle( + fontSize: 15.0, + fontWeight: _selectedOrderPdf == widget.pdfsList[index].order ? FontWeight.bold : FontWeight.normal, + color: _selectedOrderPdf == widget.pdfsList[index].order ? kTestSecondColor : null, + ), + ), + /*Text( + '${widget.pdfsList[index].pdfFilesAndTitles!.firstWhere((pfat) => pfat.language == currentLanguage).value}', + style: TextStyle( + fontSize: 15.0, + fontWeight: _selectedOrderPdf == widget.pdfsList[index].order ? FontWeight.bold : FontWeight.normal, + color: _selectedOrderPdf == widget.pdfsList[index].order ? kTestSecondColor : null, + ), + ),*/ + onTap: () { + setState(() { + _selectedOrderPdf = widget.pdfsList[index].order!; + }); + widget.onPDFSelected(_selectedOrderPdf); + }, + tileColor: _selectedOrderPdf == widget.pdfsList[index].order ? kTestSecondColor : null, + ); + } else { + // Si nbrEvents est 0, ne retourne pas de widget + return SizedBox.shrink(); + } + }, + ); + } +} diff --git a/lib/Screens/PDF/pdf_view.dart b/lib/Screens/PDF/pdf_view.dart index 92cfa52..41c26bb 100644 --- a/lib/Screens/PDF/pdf_view.dart +++ b/lib/Screens/PDF/pdf_view.dart @@ -12,6 +12,7 @@ import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:tablet_app/Components/loading_common.dart'; import 'package:tablet_app/Models/tabletContext.dart'; +import 'package:tablet_app/Screens/PDF/pdf_filter.dart'; import 'package:tablet_app/app_context.dart'; import 'package:tablet_app/constants.dart'; @@ -32,6 +33,7 @@ class _PDFViewWidget extends State { int? currentPage = 0; bool isReady = false; String errorMessage = ''; + late ValueNotifier selectedPdf = ValueNotifier(pdfDTO.pdfs!.first); ValueNotifier> currentState = ValueNotifier>({'page': 0, 'total': 1}); @override @@ -50,34 +52,38 @@ class _PDFViewWidget extends State { });*/ } - Future createFileOfPdfUrl(TabletAppContext tabletAppContext, PdfDTO pdfDTO) async { - Completer completer = Completer(); + Future createFileOfPdfUrl(TabletAppContext tabletAppContext, PDFFileDTO pdfFileDTO) async { + Completer completer = Completer(); - var file = await _checkIfLocalResourceExists(tabletAppContext, pdfDTO.resourceId!); - - if(file == null) { - print("Start download file from internet!"); - try { - // "https://berlin2017.droidcon.cod.newthinking.net/sites/global.droidcon.cod.newthinking.net/files/media/documents/Flutter%20-%2060FPS%20UI%20of%20the%20future%20%20-%20DroidconDE%2017.pdf"; - // final url = "https://pdfkit.org/docs/guide.pdf"; - final url = pdfDTO.resourceUrl!; - final filename = url.substring(url.lastIndexOf("/") + 1); - var request = await HttpClient().getUrl(Uri.parse(url)); - var response = await request.close(); - var bytes = await consolidateHttpClientResponseBytes(response); - var dir = await getApplicationDocumentsDirectory(); - print("Download files"); - print("${dir.path}/$filename"); - File file = File("${dir.path}/$filename"); - - await file.writeAsBytes(bytes, flush: true); - completer.complete(file); - } catch (e) { - throw Exception('Error parsing asset file!'); - } + if(pdfFileDTO.pdfFilesAndTitles!.firstWhere((pfat) => pfat.language == tabletAppContext.language).resourceId == null) { + completer.complete(null); } else { - print("FOUND FILE PDF"); - completer.complete(file); + var file = await _checkIfLocalResourceExists(tabletAppContext, pdfFileDTO.pdfFilesAndTitles!.firstWhere((pfat) => pfat.language == tabletAppContext.language).resourceId!); + + if(file == null) { + print("Start download file from internet!"); + try { + // "https://berlin2017.droidcon.cod.newthinking.net/sites/global.droidcon.cod.newthinking.net/files/media/documents/Flutter%20-%2060FPS%20UI%20of%20the%20future%20%20-%20DroidconDE%2017.pdf"; + // final url = "https://pdfkit.org/docs/guide.pdf"; + final url = pdfFileDTO.pdfFilesAndTitles!.firstWhere((pfat) => pfat.language == tabletAppContext.language).resourceUrl!; + final filename = url.substring(url.lastIndexOf("/") + 1); + var request = await HttpClient().getUrl(Uri.parse(url)); + var response = await request.close(); + var bytes = await consolidateHttpClientResponseBytes(response); + var dir = await getApplicationDocumentsDirectory(); + print("Download files"); + print("${dir.path}/$filename"); + File file = File("${dir.path}/$filename"); + + await file.writeAsBytes(bytes, flush: true); + completer.complete(file); + } catch (e) { + throw Exception('Error parsing asset file!'); + } + } else { + print("FOUND FILE PDF"); + completer.complete(file); + } } return completer.future; @@ -94,74 +100,121 @@ class _PDFViewWidget extends State { final appContext = Provider.of(context); TabletAppContext tabletAppContext = appContext.getContext(); - return pdfDTO.resourceUrl != null && pdfDTO.resourceUrl!.length > 0 ? - Padding( - padding: const EdgeInsets.all(12.5), - child: FutureBuilder( - future: createFileOfPdfUrl(tabletAppContext, pdfDTO), - builder: (context, AsyncSnapshot snapshot) { - print("snapshot.data"); - print(snapshot.data); - if (snapshot.connectionState == ConnectionState.done) { - return Stack( - children: [ - PDFView( - filePath: snapshot.data.path, - enableSwipe: true, - swipeHorizontal: true, - autoSpacing: true, - pageFling: true, - fitPolicy: FitPolicy.HEIGHT, - onRender: (_pages) { - //setState(() { - pages = _pages; - isReady = true; - //}); - }, - onError: (error) { - print(error.toString()); - }, - onPageError: (page, error) { - print('$page: ${error.toString()}'); - }, - onViewCreated: (PDFViewController pdfViewController) { - //_controller.complete(pdfViewController); - }, - onPageChanged: (int? page, int? total) { - currentPage = page; - pages = total; - currentState.value = {'page': page!, 'total': total!}; + pdfDTO.pdfs!.sort((a, b) => a.order!.compareTo(b.order!)); - print('page change: $page/$total'); - }, + return pdfDTO.pdfs != null && pdfDTO.pdfs!.length > 0 ? + Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex: 1, + child: Container( + decoration: BoxDecoration( + color: kBackgroundColor, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + bottomLeft: Radius.circular(30.0), ), - Positioned( - bottom: 20, - right: 20, - child: ValueListenableBuilder>( - valueListenable: currentState, - builder: (context, value, _) { - return Container( - //color: Colors.blueAccent, - child: Text("${value["page"]!+1}/${value["total"]!}", - style: TextStyle(color: Colors.black, fontSize: 30)) + ), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: PdfFilter( + pdfsList: pdfDTO.pdfs!, + onPDFSelected: (selectedOrder) { + selectedPdf.value = pdfDTO.pdfs!.firstWhere((pdf) => pdf.order == selectedOrder); + }), + ), + ), + ), + Expanded( + flex: 4, + child: Padding( + padding: const EdgeInsets.only(left: 8.0), + child: ValueListenableBuilder( + valueListenable: selectedPdf, + builder: (context, value, _) { + return FutureBuilder( + future: createFileOfPdfUrl(tabletAppContext, value!), + builder: (context, AsyncSnapshot snapshot) { + print("snapshot.data"); + print(snapshot.data); + if (snapshot.connectionState == ConnectionState.done) { + if(snapshot.data == null) { + return Center(child: Text("Aucun fichier à afficher")); + } else { + return Stack( + children: [ + PDFView( + filePath: snapshot.data.path, + enableSwipe: true, + swipeHorizontal: true, + autoSpacing: true, + pageFling: true, + fitPolicy: FitPolicy.HEIGHT, + onRender: (_pages) { + //setState(() { + pages = _pages; + isReady = true; + //}); + }, + onError: (error) { + print(error.toString()); + }, + onPageError: (page, error) { + print('$page: ${error.toString()}'); + }, + onViewCreated: (PDFViewController pdfViewController) { + //_controller.complete(pdfViewController); + }, + onPageChanged: (int? page, int? total) { + currentPage = page; + pages = total; + currentState.value = {'page': page!, 'total': total!}; + + print('page change: $page/$total'); + }, + ), + Positioned( + bottom: 20, + right: 20, + child: ValueListenableBuilder>( + valueListenable: currentState, + builder: (context, value, _) { + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(30.0)), + color: kTestSecondColor + ), + child: Padding( + padding: const EdgeInsets.all(6.0), + child: Text("${value["page"]!+1}/${value["total"]!}", + style: TextStyle(color: Colors.white, fontSize: 20)), + ) + ); + }, + ), + ), + ], + ); + } + } else { + return Center( + child: Container( + child: LoadingCommon() + ) ); - }, - ), - ), - ], - ); - } else { - return Center( - child: Container( - child: LoadingCommon() - ) - ); - } - } + } + } + ); + } + ), + ), + ), + ], ), ) : - Center(child: Text("Le PDF ne peut pas être affiché, il n'existe pas", style: TextStyle(fontSize: kNoneInfoOrIncorrect))); + Center(child: Text("Aucun pdf à afficher", style: TextStyle(fontSize: kNoneInfoOrIncorrect))); } } //_webView diff --git a/lib/api/swagger.yaml b/lib/api/swagger.yaml index ffda81a..c6fe041 100644 --- a/lib/api/swagger.yaml +++ b/lib/api/swagger.yaml @@ -2099,7 +2099,17 @@ components: type: integer format: int32 mapType: - $ref: '#/components/schemas/MapTypeApp' + nullable: true + oneOf: + - $ref: '#/components/schemas/MapTypeApp' + mapTypeMapbox: + nullable: true + oneOf: + - $ref: '#/components/schemas/MapTypeMapBox' + mapProvider: + nullable: true + oneOf: + - $ref: '#/components/schemas/MapProvider' points: type: array nullable: true @@ -2136,6 +2146,43 @@ components: - 2 - 3 - 4 + MapTypeMapBox: + type: integer + description: |- + 0 = standard + 1 = streets + 2 = outdoors + 3 = light + 4 = dark + 5 = satellite + 6 = satellite_streets + x-enumNames: + - standard + - streets + - outdoors + - light + - dark + - satellite + - satellite_streets + enum: + - 0 + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + MapProvider: + type: integer + description: |- + 0 = Google + 1 = MapBox + x-enumNames: + - Google + - MapBox + enum: + - 0 + - 1 GeoPointDTO: type: object additionalProperties: false @@ -2143,6 +2190,7 @@ components: id: type: integer format: int32 + nullable: true title: type: array nullable: true @@ -2313,7 +2361,9 @@ components: type: string nullable: true imageBackgroundResourceType: - $ref: '#/components/schemas/ResourceType' + nullable: true + oneOf: + - $ref: '#/components/schemas/ResourceType' imageBackgroundResourceUrl: type: string nullable: true @@ -2390,11 +2440,23 @@ components: type: object additionalProperties: false properties: - resourceId: - type: string + pdfs: + type: array nullable: true - resourceUrl: - type: string + items: + $ref: '#/components/schemas/PDFFileDTO' + PDFFileDTO: + type: object + additionalProperties: false + properties: + pdfFilesAndTitles: + type: array + nullable: true + items: + $ref: '#/components/schemas/TranslationAndResourceDTO' + order: + type: integer + format: int32 nullable: true PuzzleDTO: type: object @@ -2429,6 +2491,10 @@ components: nullable: true items: $ref: '#/components/schemas/TranslationDTO' + mapProvider: + nullable: true + oneOf: + - $ref: '#/components/schemas/MapProvider' User: type: object additionalProperties: false diff --git a/macos/Flutter/ephemeral/flutter_export_environment.sh b/macos/Flutter/ephemeral/flutter_export_environment.sh old mode 100755 new mode 100644 diff --git a/manager_api/.openapi-generator/FILES b/manager_api/.openapi-generator/FILES index 091da7e..7d78126 100644 --- a/manager_api/.openapi-generator/FILES +++ b/manager_api/.openapi-generator/FILES @@ -24,8 +24,14 @@ doc/InstanceDTO.md doc/LevelDTO.md doc/LoginDTO.md doc/MapDTO.md +doc/MapDTOMapProvider.md +doc/MapDTOMapType.md +doc/MapDTOMapTypeMapbox.md +doc/MapProvider.md doc/MapTypeApp.md +doc/MapTypeMapBox.md doc/MenuDTO.md +doc/PDFFileDTO.md doc/PdfDTO.md doc/PlayerMessageDTO.md doc/PuzzleDTO.md @@ -84,9 +90,15 @@ lib/model/instance_dto.dart lib/model/level_dto.dart lib/model/login_dto.dart lib/model/map_dto.dart +lib/model/map_dto_map_provider.dart +lib/model/map_dto_map_type.dart +lib/model/map_dto_map_type_mapbox.dart +lib/model/map_provider.dart lib/model/map_type_app.dart +lib/model/map_type_map_box.dart lib/model/menu_dto.dart lib/model/pdf_dto.dart +lib/model/pdf_file_dto.dart lib/model/player_message_dto.dart lib/model/puzzle_dto.dart lib/model/puzzle_dto_image.dart @@ -107,3 +119,4 @@ lib/model/user_detail_dto.dart lib/model/video_dto.dart lib/model/web_dto.dart pubspec.yaml +test/pdf_file_dto_test.dart diff --git a/manager_api/README.md b/manager_api/README.md index 601fac2..bb3bee1 100644 --- a/manager_api/README.md +++ b/manager_api/README.md @@ -60,7 +60,7 @@ try { ## Documentation for API Endpoints -All URIs are relative to *https://api.myinfomate.be* +All URIs are relative to *https://localhost:5001* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- @@ -141,8 +141,14 @@ Class | Method | HTTP request | Description - [LevelDTO](doc\/LevelDTO.md) - [LoginDTO](doc\/LoginDTO.md) - [MapDTO](doc\/MapDTO.md) + - [MapDTOMapProvider](doc\/MapDTOMapProvider.md) + - [MapDTOMapType](doc\/MapDTOMapType.md) + - [MapDTOMapTypeMapbox](doc\/MapDTOMapTypeMapbox.md) + - [MapProvider](doc\/MapProvider.md) - [MapTypeApp](doc\/MapTypeApp.md) + - [MapTypeMapBox](doc\/MapTypeMapBox.md) - [MenuDTO](doc\/MenuDTO.md) + - [PDFFileDTO](doc\/PDFFileDTO.md) - [PdfDTO](doc\/PdfDTO.md) - [PlayerMessageDTO](doc\/PlayerMessageDTO.md) - [PuzzleDTO](doc\/PuzzleDTO.md) diff --git a/manager_api/doc/AgendaDTO.md b/manager_api/doc/AgendaDTO.md index a28df03..b341661 100644 --- a/manager_api/doc/AgendaDTO.md +++ b/manager_api/doc/AgendaDTO.md @@ -9,6 +9,7 @@ import 'package:manager_api/api.dart'; Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **resourceIds** | [**List**](TranslationDTO.md) | | [optional] [default to const []] +**mapProvider** | [**MapDTOMapProvider**](MapDTOMapProvider.md) | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/manager_api/doc/MapDTO.md b/manager_api/doc/MapDTO.md index b066539..f7f5f50 100644 --- a/manager_api/doc/MapDTO.md +++ b/manager_api/doc/MapDTO.md @@ -9,7 +9,9 @@ import 'package:manager_api/api.dart'; Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **zoom** | **int** | | [optional] -**mapType** | [**MapTypeApp**](MapTypeApp.md) | | [optional] +**mapType** | [**MapDTOMapType**](MapDTOMapType.md) | | [optional] +**mapTypeMapbox** | [**MapDTOMapTypeMapbox**](MapDTOMapTypeMapbox.md) | | [optional] +**mapProvider** | [**MapDTOMapProvider**](MapDTOMapProvider.md) | | [optional] **points** | [**List**](GeoPointDTO.md) | | [optional] [default to const []] **iconResourceId** | **String** | | [optional] **iconSource** | **String** | | [optional] diff --git a/manager_api/doc/MapDTOMapProvider.md b/manager_api/doc/MapDTOMapProvider.md new file mode 100644 index 0000000..882195a --- /dev/null +++ b/manager_api/doc/MapDTOMapProvider.md @@ -0,0 +1,14 @@ +# manager_api.model.MapDTOMapProvider + +## Load the model package +```dart +import 'package:manager_api/api.dart'; +``` + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/manager_api/doc/MapDTOMapType.md b/manager_api/doc/MapDTOMapType.md new file mode 100644 index 0000000..118e848 --- /dev/null +++ b/manager_api/doc/MapDTOMapType.md @@ -0,0 +1,14 @@ +# manager_api.model.MapDTOMapType + +## Load the model package +```dart +import 'package:manager_api/api.dart'; +``` + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/manager_api/doc/MapDTOMapTypeMapbox.md b/manager_api/doc/MapDTOMapTypeMapbox.md new file mode 100644 index 0000000..d3937ca --- /dev/null +++ b/manager_api/doc/MapDTOMapTypeMapbox.md @@ -0,0 +1,14 @@ +# manager_api.model.MapDTOMapTypeMapbox + +## Load the model package +```dart +import 'package:manager_api/api.dart'; +``` + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/manager_api/doc/MapProvider.md b/manager_api/doc/MapProvider.md new file mode 100644 index 0000000..f600a20 --- /dev/null +++ b/manager_api/doc/MapProvider.md @@ -0,0 +1,14 @@ +# manager_api.model.MapProvider + +## Load the model package +```dart +import 'package:manager_api/api.dart'; +``` + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/manager_api/doc/MapTypeMapBox.md b/manager_api/doc/MapTypeMapBox.md new file mode 100644 index 0000000..99b9232 --- /dev/null +++ b/manager_api/doc/MapTypeMapBox.md @@ -0,0 +1,14 @@ +# manager_api.model.MapTypeMapBox + +## Load the model package +```dart +import 'package:manager_api/api.dart'; +``` + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/manager_api/doc/PDFFileDTO.md b/manager_api/doc/PDFFileDTO.md new file mode 100644 index 0000000..4d2432a --- /dev/null +++ b/manager_api/doc/PDFFileDTO.md @@ -0,0 +1,16 @@ +# manager_api.model.PDFFileDTO + +## Load the model package +```dart +import 'package:manager_api/api.dart'; +``` + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pdfFilesAndTitles** | [**List**](TranslationAndResourceDTO.md) | | [optional] [default to const []] +**order** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/manager_api/doc/PdfDTO.md b/manager_api/doc/PdfDTO.md index 11d011a..1caaab8 100644 --- a/manager_api/doc/PdfDTO.md +++ b/manager_api/doc/PdfDTO.md @@ -8,8 +8,7 @@ import 'package:manager_api/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**resourceId** | **String** | | [optional] -**resourceUrl** | **String** | | [optional] +**pdfs** | [**List**](PDFFileDTO.md) | | [optional] [default to const []] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/manager_api/lib/api.dart b/manager_api/lib/api.dart index 3a2761d..f8ec430 100644 --- a/manager_api/lib/api.dart +++ b/manager_api/lib/api.dart @@ -53,8 +53,14 @@ part 'model/instance_dto.dart'; part 'model/level_dto.dart'; part 'model/login_dto.dart'; part 'model/map_dto.dart'; +part 'model/map_dto_map_provider.dart'; +part 'model/map_dto_map_type.dart'; +part 'model/map_dto_map_type_mapbox.dart'; +part 'model/map_provider.dart'; part 'model/map_type_app.dart'; +part 'model/map_type_map_box.dart'; part 'model/menu_dto.dart'; +part 'model/pdf_file_dto.dart'; part 'model/pdf_dto.dart'; part 'model/player_message_dto.dart'; part 'model/puzzle_dto.dart'; diff --git a/manager_api/lib/api_client.dart b/manager_api/lib/api_client.dart index fa3fc94..caa5476 100644 --- a/manager_api/lib/api_client.dart +++ b/manager_api/lib/api_client.dart @@ -11,7 +11,7 @@ part of openapi.api; class ApiClient { - ApiClient({this.basePath = 'https://api.myinfomate.be', this.authentication,}); + ApiClient({this.basePath = 'https://localhost:5001', this.authentication,}); final String basePath; final Authentication? authentication; @@ -217,10 +217,22 @@ class ApiClient { return LoginDTO.fromJson(value); case 'MapDTO': return MapDTO.fromJson(value); + case 'MapDTOMapProvider': + return MapDTOMapProvider.fromJson(value); + case 'MapDTOMapType': + return MapDTOMapType.fromJson(value); + case 'MapDTOMapTypeMapbox': + return MapDTOMapTypeMapbox.fromJson(value); + case 'MapProvider': + return MapProviderTypeTransformer().decode(value); case 'MapTypeApp': return MapTypeAppTypeTransformer().decode(value); + case 'MapTypeMapBox': + return MapTypeMapBoxTypeTransformer().decode(value); case 'MenuDTO': return MenuDTO.fromJson(value); + case 'PDFFileDTO': + return PDFFileDTO.fromJson(value); case 'PdfDTO': return PdfDTO.fromJson(value); case 'PlayerMessageDTO': diff --git a/manager_api/lib/api_helper.dart b/manager_api/lib/api_helper.dart index fbfe3c5..d13d9d7 100644 --- a/manager_api/lib/api_helper.dart +++ b/manager_api/lib/api_helper.dart @@ -55,9 +55,15 @@ String parameterToString(dynamic value) { if (value is DateTime) { return value.toUtc().toIso8601String(); } + if (value is MapProvider) { + return MapProviderTypeTransformer().encode(value).toString(); + } if (value is MapTypeApp) { return MapTypeAppTypeTransformer().encode(value).toString(); } + if (value is MapTypeMapBox) { + return MapTypeMapBoxTypeTransformer().encode(value).toString(); + } if (value is ResourceType) { return ResourceTypeTypeTransformer().encode(value).toString(); } diff --git a/manager_api/lib/model/agenda_dto.dart b/manager_api/lib/model/agenda_dto.dart index e3cac18..27e2e1b 100644 --- a/manager_api/lib/model/agenda_dto.dart +++ b/manager_api/lib/model/agenda_dto.dart @@ -14,21 +14,26 @@ class AgendaDTO { /// Returns a new [AgendaDTO] instance. AgendaDTO({ this.resourceIds = const [], + this.mapProvider, }); List? resourceIds; + MapProvider? mapProvider; + @override bool operator ==(Object other) => identical(this, other) || other is AgendaDTO && - other.resourceIds == resourceIds; + other.resourceIds == resourceIds && + other.mapProvider == mapProvider; @override int get hashCode => // ignore: unnecessary_parenthesis - (resourceIds == null ? 0 : resourceIds!.hashCode); + (resourceIds == null ? 0 : resourceIds!.hashCode) + + (mapProvider == null ? 0 : mapProvider!.hashCode); @override - String toString() => 'AgendaDTO[resourceIds=$resourceIds]'; + String toString() => 'AgendaDTO[resourceIds=$resourceIds, mapProvider=$mapProvider]'; Map toJson() { final json = {}; @@ -37,6 +42,11 @@ class AgendaDTO { } else { json[r'resourceIds'] = null; } + if (this.mapProvider != null) { + json[r'mapProvider'] = this.mapProvider; + } else { + json[r'mapProvider'] = null; + } return json; } @@ -60,6 +70,7 @@ class AgendaDTO { return AgendaDTO( resourceIds: TranslationDTO.listFromJson(json[r'resourceIds']), + mapProvider: MapProvider.fromJson(json[r'mapProvider']), ); } return null; diff --git a/manager_api/lib/model/geo_point_dto.dart b/manager_api/lib/model/geo_point_dto.dart index 0055667..e221c40 100644 --- a/manager_api/lib/model/geo_point_dto.dart +++ b/manager_api/lib/model/geo_point_dto.dart @@ -22,12 +22,6 @@ class GeoPointDTO { this.longitude, }); - /// - /// Please note: This property should have been non-nullable! Since the specification file - /// does not include a default value (using the "default:" property), however, the generated - /// source code must fall back to having a nullable type. - /// Consider adding a "default:" property in the specification file to hide this note. - /// int? id; List? title; diff --git a/manager_api/lib/model/map_dto.dart b/manager_api/lib/model/map_dto.dart index c9614c2..5fae0e3 100644 --- a/manager_api/lib/model/map_dto.dart +++ b/manager_api/lib/model/map_dto.dart @@ -15,6 +15,8 @@ class MapDTO { MapDTO({ this.zoom, this.mapType, + this.mapTypeMapbox, + this.mapProvider, this.points = const [], this.iconResourceId, this.iconSource, @@ -29,14 +31,12 @@ class MapDTO { /// int? zoom; - /// - /// Please note: This property should have been non-nullable! Since the specification file - /// does not include a default value (using the "default:" property), however, the generated - /// source code must fall back to having a nullable type. - /// Consider adding a "default:" property in the specification file to hide this note. - /// MapTypeApp? mapType; + MapTypeMapBox? mapTypeMapbox; + + MapProvider? mapProvider; + List? points; String? iconResourceId; @@ -49,6 +49,8 @@ class MapDTO { bool operator ==(Object other) => identical(this, other) || other is MapDTO && other.zoom == zoom && other.mapType == mapType && + other.mapTypeMapbox == mapTypeMapbox && + other.mapProvider == mapProvider && other.points == points && other.iconResourceId == iconResourceId && other.iconSource == iconSource && @@ -59,13 +61,15 @@ class MapDTO { // ignore: unnecessary_parenthesis (zoom == null ? 0 : zoom!.hashCode) + (mapType == null ? 0 : mapType!.hashCode) + + (mapTypeMapbox == null ? 0 : mapTypeMapbox!.hashCode) + + (mapProvider == null ? 0 : mapProvider!.hashCode) + (points == null ? 0 : points!.hashCode) + (iconResourceId == null ? 0 : iconResourceId!.hashCode) + (iconSource == null ? 0 : iconSource!.hashCode) + (categories == null ? 0 : categories!.hashCode); @override - String toString() => 'MapDTO[zoom=$zoom, mapType=$mapType, points=$points, iconResourceId=$iconResourceId, iconSource=$iconSource, categories=$categories]'; + String toString() => 'MapDTO[zoom=$zoom, mapType=$mapType, mapTypeMapbox=$mapTypeMapbox, mapProvider=$mapProvider, points=$points, iconResourceId=$iconResourceId, iconSource=$iconSource, categories=$categories]'; Map toJson() { final json = {}; @@ -79,6 +83,16 @@ class MapDTO { } else { json[r'mapType'] = null; } + if (this.mapTypeMapbox != null) { + json[r'mapTypeMapbox'] = this.mapTypeMapbox; + } else { + json[r'mapTypeMapbox'] = null; + } + if (this.mapProvider != null) { + json[r'mapProvider'] = this.mapProvider; + } else { + json[r'mapProvider'] = null; + } if (this.points != null) { json[r'points'] = this.points; } else { @@ -123,6 +137,8 @@ class MapDTO { return MapDTO( zoom: mapValueOfType(json, r'zoom'), mapType: MapTypeApp.fromJson(json[r'mapType']), + mapTypeMapbox: MapTypeMapBox.fromJson(json[r'mapTypeMapbox']), + mapProvider: MapProvider.fromJson(json[r'mapProvider']), points: GeoPointDTO.listFromJson(json[r'points']), iconResourceId: mapValueOfType(json, r'iconResourceId'), iconSource: mapValueOfType(json, r'iconSource'), diff --git a/manager_api/lib/model/map_dto_map_provider.dart b/manager_api/lib/model/map_dto_map_provider.dart new file mode 100644 index 0000000..2ab6869 --- /dev/null +++ b/manager_api/lib/model/map_dto_map_provider.dart @@ -0,0 +1,96 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +class MapDTOMapProvider { + /// Returns a new [MapDTOMapProvider] instance. + MapDTOMapProvider(); + + @override + bool operator ==(Object other) => identical(this, other) || other is MapDTOMapProvider; + + @override + String toString() => 'MapDTOMapProvider[]'; + + Map toJson() { + final json = {}; + return json; + } + + /// Returns a new [MapDTOMapProvider] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static MapDTOMapProvider? fromJson(dynamic value) { + if (value is Map) { + final json = value.cast(); + + // Ensure that the map contains the required keys. + // Note 1: the values aren't checked for validity beyond being non-null. + // Note 2: this code is stripped in release mode! + assert(() { + requiredKeys.forEach((key) { + assert(json.containsKey(key), 'Required key "MapDTOMapProvider[$key]" is missing from JSON.'); + assert(json[key] != null, 'Required key "MapDTOMapProvider[$key]" has a null value in JSON.'); + }); + return true; + }()); + + return MapDTOMapProvider( + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = MapDTOMapProvider.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = MapDTOMapProvider.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of MapDTOMapProvider-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = MapDTOMapProvider.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + }; +} + diff --git a/manager_api/lib/model/map_dto_map_type.dart b/manager_api/lib/model/map_dto_map_type.dart new file mode 100644 index 0000000..8b78f37 --- /dev/null +++ b/manager_api/lib/model/map_dto_map_type.dart @@ -0,0 +1,96 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +class MapDTOMapType { + /// Returns a new [MapDTOMapType] instance. + MapDTOMapType(); + + @override + bool operator ==(Object other) => identical(this, other) || other is MapDTOMapType; + + @override + String toString() => 'MapDTOMapType[]'; + + Map toJson() { + final json = {}; + return json; + } + + /// Returns a new [MapDTOMapType] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static MapDTOMapType? fromJson(dynamic value) { + if (value is Map) { + final json = value.cast(); + + // Ensure that the map contains the required keys. + // Note 1: the values aren't checked for validity beyond being non-null. + // Note 2: this code is stripped in release mode! + assert(() { + requiredKeys.forEach((key) { + assert(json.containsKey(key), 'Required key "MapDTOMapType[$key]" is missing from JSON.'); + assert(json[key] != null, 'Required key "MapDTOMapType[$key]" has a null value in JSON.'); + }); + return true; + }()); + + return MapDTOMapType( + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = MapDTOMapType.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = MapDTOMapType.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of MapDTOMapType-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = MapDTOMapType.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + }; +} + diff --git a/manager_api/lib/model/map_dto_map_type_mapbox.dart b/manager_api/lib/model/map_dto_map_type_mapbox.dart new file mode 100644 index 0000000..2c164f5 --- /dev/null +++ b/manager_api/lib/model/map_dto_map_type_mapbox.dart @@ -0,0 +1,96 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +class MapDTOMapTypeMapbox { + /// Returns a new [MapDTOMapTypeMapbox] instance. + MapDTOMapTypeMapbox(); + + @override + bool operator ==(Object other) => identical(this, other) || other is MapDTOMapTypeMapbox; + + @override + String toString() => 'MapDTOMapTypeMapbox[]'; + + Map toJson() { + final json = {}; + return json; + } + + /// Returns a new [MapDTOMapTypeMapbox] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static MapDTOMapTypeMapbox? fromJson(dynamic value) { + if (value is Map) { + final json = value.cast(); + + // Ensure that the map contains the required keys. + // Note 1: the values aren't checked for validity beyond being non-null. + // Note 2: this code is stripped in release mode! + assert(() { + requiredKeys.forEach((key) { + assert(json.containsKey(key), 'Required key "MapDTOMapTypeMapbox[$key]" is missing from JSON.'); + assert(json[key] != null, 'Required key "MapDTOMapTypeMapbox[$key]" has a null value in JSON.'); + }); + return true; + }()); + + return MapDTOMapTypeMapbox( + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = MapDTOMapTypeMapbox.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = MapDTOMapTypeMapbox.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of MapDTOMapTypeMapbox-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = MapDTOMapTypeMapbox.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + }; +} + diff --git a/manager_api/lib/model/map_provider.dart b/manager_api/lib/model/map_provider.dart new file mode 100644 index 0000000..c017c9b --- /dev/null +++ b/manager_api/lib/model/map_provider.dart @@ -0,0 +1,98 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +/// 0 = Google 1 = MapBox +class MapProvider { + /// Instantiate a new enum with the provided [value]. + const MapProvider._(this.value); + + /// The underlying value of this enum member. + final int value; + + @override + String toString() => value.toString(); + + int toJson() => value; + + static const Google = MapProvider._(0); + static const MapBox = MapProvider._(1); + + /// List of all possible values in this [enum][MapProvider]. + static const values = [ + Google, + MapBox, + ]; + + static MapProvider? fromJson(dynamic value) => MapProviderTypeTransformer().decode(value); + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = MapProvider.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } +} + +/// Transformation class that can [encode] an instance of [MapProvider] to int, +/// and [decode] dynamic data back to [MapProvider]. +class MapProviderTypeTransformer { + factory MapProviderTypeTransformer() => _instance ??= const MapProviderTypeTransformer._(); + + const MapProviderTypeTransformer._(); + + int encode(MapProvider data) => data.value; + + /// Decodes a [dynamic value][data] to a MapProvider. + /// + /// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully, + /// then null is returned. However, if [allowNull] is false and the [dynamic value][data] + /// cannot be decoded successfully, then an [UnimplementedError] is thrown. + /// + /// The [allowNull] is very handy when an API changes and a new enum value is added or removed, + /// and users are still using an old app with the old code. + MapProvider? decode(dynamic data, {bool allowNull = true}) { + if (data != null) { + if(data.runtimeType == String) { + switch (data.toString().toLowerCase()) { + case r'google': return MapProvider.Google; + case r'mapbox': return MapProvider.MapBox; + default: + if (!allowNull) { + throw ArgumentError('Unknown enum value to decode: $data'); + } + } + } else { + if(data.runtimeType == int) { + switch (data) { + case 0: return MapProvider.Google; + case 1: return MapProvider.MapBox; + default: + if (!allowNull) { + throw ArgumentError('Unknown enum value to decode: $data'); + } + } + } + } + } + return null; + } + + /// Singleton [MapProviderTypeTransformer] instance. + static MapProviderTypeTransformer? _instance; +} + diff --git a/manager_api/lib/model/map_type_app.dart b/manager_api/lib/model/map_type_app.dart index 735acb9..174ce99 100644 --- a/manager_api/lib/model/map_type_app.dart +++ b/manager_api/lib/model/map_type_app.dart @@ -72,7 +72,7 @@ class MapTypeAppTypeTransformer { /// The [allowNull] is very handy when an API changes and a new enum value is added or removed, /// and users are still using an old app with the old code. MapTypeApp? decode(dynamic data, {bool allowNull = true}) { - if (data != null) { + /*if (data != null) { switch (data.toString()) { case r'None': return MapTypeApp.none; case r'Normal': return MapTypeApp.normal; @@ -84,7 +84,7 @@ class MapTypeAppTypeTransformer { throw ArgumentError('Unknown enum value to decode: $data'); } } - } + }*/ if (data != null) { if(data.runtimeType == String) { switch (data.toString()) { @@ -113,7 +113,6 @@ class MapTypeAppTypeTransformer { } } } - } return null; } diff --git a/manager_api/lib/model/map_type_map_box.dart b/manager_api/lib/model/map_type_map_box.dart new file mode 100644 index 0000000..7aaad20 --- /dev/null +++ b/manager_api/lib/model/map_type_map_box.dart @@ -0,0 +1,119 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +/// 0 = standard 1 = streets 2 = outdoors 3 = light 4 = dark 5 = satellite 6 = satellite_streets +class MapTypeMapBox { + /// Instantiate a new enum with the provided [value]. + const MapTypeMapBox._(this.value); + + /// The underlying value of this enum member. + final int value; + + @override + String toString() => value.toString(); + + int toJson() => value; + + static const standard = MapTypeMapBox._(0); + static const streets = MapTypeMapBox._(1); + static const outdoors = MapTypeMapBox._(2); + static const light = MapTypeMapBox._(3); + static const dark = MapTypeMapBox._(4); + static const satellite = MapTypeMapBox._(5); + static const satellite_streets = MapTypeMapBox._(6); + + /// List of all possible values in this [enum][MapTypeMapBox]. + static const values = [ + standard, + streets, + outdoors, + light, + dark, + satellite, + satellite_streets, + ]; + + static MapTypeMapBox? fromJson(dynamic value) => MapTypeMapBoxTypeTransformer().decode(value); + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = MapTypeMapBox.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } +} + +/// Transformation class that can [encode] an instance of [MapTypeMapBox] to int, +/// and [decode] dynamic data back to [MapTypeMapBox]. +class MapTypeMapBoxTypeTransformer { + factory MapTypeMapBoxTypeTransformer() => _instance ??= const MapTypeMapBoxTypeTransformer._(); + + const MapTypeMapBoxTypeTransformer._(); + + int encode(MapTypeMapBox data) => data.value; + + /// Decodes a [dynamic value][data] to a MapTypeMapBox. + /// + /// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully, + /// then null is returned. However, if [allowNull] is false and the [dynamic value][data] + /// cannot be decoded successfully, then an [UnimplementedError] is thrown. + /// + /// The [allowNull] is very handy when an API changes and a new enum value is added or removed, + /// and users are still using an old app with the old code. + MapTypeMapBox? decode(dynamic data, {bool allowNull = true}) { + if (data != null) { + if(data.runtimeType == String) { + switch (data.toString().toLowerCase()) { + case r'standard': return MapTypeMapBox.standard; + case r'streets': return MapTypeMapBox.streets; + case r'outdoors': return MapTypeMapBox.outdoors; + case r'light': return MapTypeMapBox.light; + case r'dark': return MapTypeMapBox.dark; + case r'satellite': return MapTypeMapBox.satellite; + case r'satellite_streets': return MapTypeMapBox.satellite_streets; + default: + if (!allowNull) { + throw ArgumentError('Unknown enum value to decode: $data'); + } + } + } else { + if(data.runtimeType == int) { + switch (data) { + case 0: return MapTypeMapBox.standard; + case 1: return MapTypeMapBox.streets; + case 2: return MapTypeMapBox.outdoors; + case 3: return MapTypeMapBox.light; + case 4: return MapTypeMapBox.dark; + case 5: return MapTypeMapBox.satellite; + case 6: return MapTypeMapBox.satellite_streets; + default: + if (!allowNull) { + throw ArgumentError('Unknown enum value to decode: $data'); + } + } + } + } + + } + return null; + } + + /// Singleton [MapTypeMapBoxTypeTransformer] instance. + static MapTypeMapBoxTypeTransformer? _instance; +} + diff --git a/manager_api/lib/model/pdf_dto.dart b/manager_api/lib/model/pdf_dto.dart index a6242cc..53cb445 100644 --- a/manager_api/lib/model/pdf_dto.dart +++ b/manager_api/lib/model/pdf_dto.dart @@ -13,39 +13,29 @@ part of openapi.api; class PdfDTO { /// Returns a new [PdfDTO] instance. PdfDTO({ - this.resourceId, - this.resourceUrl, + this.pdfs = const [], }); - String? resourceId; - - String? resourceUrl; + List? pdfs; @override bool operator ==(Object other) => identical(this, other) || other is PdfDTO && - other.resourceId == resourceId && - other.resourceUrl == resourceUrl; + other.pdfs == pdfs; @override int get hashCode => // ignore: unnecessary_parenthesis - (resourceId == null ? 0 : resourceId!.hashCode) + - (resourceUrl == null ? 0 : resourceUrl!.hashCode); + (pdfs == null ? 0 : pdfs!.hashCode); @override - String toString() => 'PdfDTO[resourceId=$resourceId, resourceUrl=$resourceUrl]'; + String toString() => 'PdfDTO[pdfs=$pdfs]'; Map toJson() { final json = {}; - if (this.resourceId != null) { - json[r'resourceId'] = this.resourceId; + if (this.pdfs != null) { + json[r'pdfs'] = this.pdfs; } else { - json[r'resourceId'] = null; - } - if (this.resourceUrl != null) { - json[r'resourceUrl'] = this.resourceUrl; - } else { - json[r'resourceUrl'] = null; + json[r'pdfs'] = null; } return json; } @@ -69,8 +59,7 @@ class PdfDTO { }()); return PdfDTO( - resourceId: mapValueOfType(json, r'resourceId'), - resourceUrl: mapValueOfType(json, r'resourceUrl'), + pdfs: PDFFileDTO.listFromJson(json[r'pdfs']), ); } return null; diff --git a/manager_api/lib/model/pdf_file_dto.dart b/manager_api/lib/model/pdf_file_dto.dart new file mode 100644 index 0000000..fbe682e --- /dev/null +++ b/manager_api/lib/model/pdf_file_dto.dart @@ -0,0 +1,123 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +part of openapi.api; + +class PDFFileDTO { + /// Returns a new [PDFFileDTO] instance. + PDFFileDTO({ + this.pdfFilesAndTitles = const [], + this.order, + }); + + List? pdfFilesAndTitles; + + int? order; + + @override + bool operator ==(Object other) => identical(this, other) || other is PDFFileDTO && + other.pdfFilesAndTitles == pdfFilesAndTitles && + other.order == order; + + @override + int get hashCode => + // ignore: unnecessary_parenthesis + (pdfFilesAndTitles == null ? 0 : pdfFilesAndTitles!.hashCode) + + (order == null ? 0 : order!.hashCode); + + @override + String toString() => 'PDFFileDTO[pdfFilesAndTitles=$pdfFilesAndTitles, order=$order]'; + + Map toJson() { + final json = {}; + if (this.pdfFilesAndTitles != null) { + json[r'pdfFilesAndTitles'] = this.pdfFilesAndTitles; + } else { + json[r'pdfFilesAndTitles'] = null; + } + if (this.order != null) { + json[r'order'] = this.order; + } else { + json[r'order'] = null; + } + return json; + } + + /// Returns a new [PDFFileDTO] instance and imports its values from + /// [value] if it's a [Map], null otherwise. + // ignore: prefer_constructors_over_static_methods + static PDFFileDTO? fromJson(dynamic value) { + if (value is Map) { + final json = value.cast(); + + // Ensure that the map contains the required keys. + // Note 1: the values aren't checked for validity beyond being non-null. + // Note 2: this code is stripped in release mode! + assert(() { + requiredKeys.forEach((key) { + assert(json.containsKey(key), 'Required key "PDFFileDTO[$key]" is missing from JSON.'); + assert(json[key] != null, 'Required key "PDFFileDTO[$key]" has a null value in JSON.'); + }); + return true; + }()); + + return PDFFileDTO( + pdfFilesAndTitles: TranslationAndResourceDTO.listFromJson(json[r'pdfFilesAndTitles']), + order: mapValueOfType(json, r'order'), + ); + } + return null; + } + + static List listFromJson(dynamic json, {bool growable = false,}) { + final result = []; + if (json is List && json.isNotEmpty) { + for (final row in json) { + final value = PDFFileDTO.fromJson(row); + if (value != null) { + result.add(value); + } + } + } + return result.toList(growable: growable); + } + + static Map mapFromJson(dynamic json) { + final map = {}; + if (json is Map && json.isNotEmpty) { + json = json.cast(); // ignore: parameter_assignments + for (final entry in json.entries) { + final value = PDFFileDTO.fromJson(entry.value); + if (value != null) { + map[entry.key] = value; + } + } + } + return map; + } + + // maps a json object with a list of PDFFileDTO-objects as value to a dart map + static Map> mapListFromJson(dynamic json, {bool growable = false,}) { + final map = >{}; + if (json is Map && json.isNotEmpty) { + // ignore: parameter_assignments + json = json.cast(); + for (final entry in json.entries) { + map[entry.key] = PDFFileDTO.listFromJson(entry.value, growable: growable,); + } + } + return map; + } + + /// The list of required keys that must be present in a JSON. + static const requiredKeys = { + }; +} + diff --git a/manager_api/test/map_dto_map_provider_test.dart b/manager_api/test/map_dto_map_provider_test.dart new file mode 100644 index 0000000..59fba41 --- /dev/null +++ b/manager_api/test/map_dto_map_provider_test.dart @@ -0,0 +1,22 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +import 'package:manager_api/api.dart'; +import 'package:test/test.dart'; + +// tests for MapDTOMapProvider +void main() { + // final instance = MapDTOMapProvider(); + + group('test MapDTOMapProvider', () { + + }); + +} diff --git a/manager_api/test/map_dto_map_type_mapbox_test.dart b/manager_api/test/map_dto_map_type_mapbox_test.dart new file mode 100644 index 0000000..163b689 --- /dev/null +++ b/manager_api/test/map_dto_map_type_mapbox_test.dart @@ -0,0 +1,22 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +import 'package:manager_api/api.dart'; +import 'package:test/test.dart'; + +// tests for MapDTOMapTypeMapbox +void main() { + // final instance = MapDTOMapTypeMapbox(); + + group('test MapDTOMapTypeMapbox', () { + + }); + +} diff --git a/manager_api/test/map_dto_map_type_test.dart b/manager_api/test/map_dto_map_type_test.dart new file mode 100644 index 0000000..2856e00 --- /dev/null +++ b/manager_api/test/map_dto_map_type_test.dart @@ -0,0 +1,22 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +import 'package:manager_api/api.dart'; +import 'package:test/test.dart'; + +// tests for MapDTOMapType +void main() { + // final instance = MapDTOMapType(); + + group('test MapDTOMapType', () { + + }); + +} diff --git a/manager_api/test/map_provider_test.dart b/manager_api/test/map_provider_test.dart new file mode 100644 index 0000000..3dac549 --- /dev/null +++ b/manager_api/test/map_provider_test.dart @@ -0,0 +1,21 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +import 'package:manager_api/api.dart'; +import 'package:test/test.dart'; + +// tests for MapProvider +void main() { + + group('test MapProvider', () { + + }); + +} diff --git a/manager_api/test/map_type_map_box_test.dart b/manager_api/test/map_type_map_box_test.dart new file mode 100644 index 0000000..b2ce7e4 --- /dev/null +++ b/manager_api/test/map_type_map_box_test.dart @@ -0,0 +1,21 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +import 'package:manager_api/api.dart'; +import 'package:test/test.dart'; + +// tests for MapTypeMapBox +void main() { + + group('test MapTypeMapBox', () { + + }); + +} diff --git a/manager_api/test/pdf_file_dto_test.dart b/manager_api/test/pdf_file_dto_test.dart new file mode 100644 index 0000000..258f2d5 --- /dev/null +++ b/manager_api/test/pdf_file_dto_test.dart @@ -0,0 +1,32 @@ +// +// AUTO-GENERATED FILE, DO NOT MODIFY! +// +// @dart=2.12 + +// ignore_for_file: unused_element, unused_import +// ignore_for_file: always_put_required_named_parameters_first +// ignore_for_file: constant_identifier_names +// ignore_for_file: lines_longer_than_80_chars + +import 'package:manager_api/api.dart'; +import 'package:test/test.dart'; + +// tests for PDFFileDTO +void main() { + // final instance = PDFFileDTO(); + + group('test PDFFileDTO', () { + // List pdfFilesAndTitles (default value: const []) + test('to test the property `pdfFilesAndTitles`', () async { + // TODO + }); + + // int order + test('to test the property `order`', () async { + // TODO + }); + + + }); + +}