diff --git a/example/lib/main.dart b/example/lib/main.dart index 2291f8e0..8eaf889a 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,11 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_osm_plugin/flutter_osm_plugin.dart'; -import 'search_example.dart'; - -import 'home/home_example.dart'; -import 'search_example.dart'; -import 'utilities.dart'; +import 'src/home/home_example.dart'; +import 'src/search_example.dart'; import 'web_test_osm.dart'; void main() { @@ -40,379 +36,3 @@ class MyApp extends StatelessWidget { ); } } - -class MainExample extends StatefulWidget { - MainExample({Key? key}) : super(key: key); - - @override - _MainExampleState createState() => _MainExampleState(); -} - -class _MainExampleState extends State { - late MapController controller; - late GlobalKey scaffoldKey; - ValueNotifier zoomNotifierActivation = ValueNotifier(false); - ValueNotifier visibilityZoomNotifierActivation = ValueNotifier(false); - ValueNotifier advPickerNotifierActivation = ValueNotifier(false); - ValueNotifier trackingNotifier = ValueNotifier(false); - - @override - void initState() { - super.initState(); - controller = MapController( - initMapWithUserPosition: false, - initPosition: GeoPoint(latitude: 47.4358055, longitude: 8.4737324), - ); - scaffoldKey = GlobalKey(); - controller.listenerMapLongTapping.addListener(() { - if (controller.listenerMapLongTapping.value != null) { - print(controller.listenerMapLongTapping.value); - } - }); - controller.listenerMapSingleTapping.addListener(() { - if (controller.listenerMapSingleTapping.value != null) { - print(controller.listenerMapSingleTapping.value); - } - }); - - Future.delayed(Duration(seconds: 5), () async { - await controller.zoomIn(); - }); - Future.delayed(Duration(seconds: 15), () async { - await controller.changeLocation( - GeoPoint( - latitude: 47.433358, - longitude: 8.4690184, - ), - ); - }); - - Future.delayed(Duration(seconds: 10), () async { - final waysPoint = list - .map((e) => GeoPoint( - latitude: e.last, - longitude: e.first, - )) - .toList(); - await controller.drawRoadManually( - waysPoint, - Colors.purpleAccent, - 6.0, - ); - await controller.setMarkerOfStaticPoint( - id: "line 2", - markerIcon: MarkerIcon( - icon: Icon( - Icons.train, - color: Colors.red, - size: 48, - ), - ), - ); - await controller.setStaticPosition( - [ - GeoPoint(latitude: 47.4433594, longitude: 8.4680184), - ], - "line 2", - ); - }); - } - - @override - void dispose() { - controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - key: scaffoldKey, - resizeToAvoidBottomInset: false, - appBar: AppBar( - title: const Text('OSM'), - leading: ValueListenableBuilder( - valueListenable: advPickerNotifierActivation, - builder: (ctx, isAdvancedPicker, _) { - if (isAdvancedPicker) { - return IconButton( - onPressed: () { - advPickerNotifierActivation.value = false; - controller.cancelAdvancedPositionPicker(); - }, - icon: Icon(Icons.close), - ); - } - return SizedBox.shrink(); - }, - ), - actions: [ - IconButton( - icon: Icon(Icons.info), - onPressed: () async { - await Navigator.popAndPushNamed(context, "/second"); - }, - ), - IconButton( - onPressed: () async { - try { - await controller.removeLastRoad(); - - ///selection geoPoint - GeoPoint point = await controller.selectPosition( - icon: MarkerIcon( - icon: Icon( - Icons.location_history, - color: Colors.amber, - size: 48, - ), - )); - - // GeoPoint pointM1 = await controller.selectPosition(); - // GeoPoint pointM2 = await controller.selectPosition( - // imageURL: - // "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/1.png"); - // - GeoPoint point2 = await controller.selectPosition(); - RoadInfo roadInformation = await controller.drawRoad( - point, point2, - //interestPoints: [pointM1, pointM2], - roadOption: RoadOption( - roadWidth: 10, - roadColor: Colors.blue, - showMarkerOfPOI: false)); - print( - "duration:${Duration(seconds: roadInformation.duration!.toInt()).inMinutes}"); - print("distance:${roadInformation.distance}Km"); - } on RoadException catch (e) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - "${e.errorMessage()}", - ), - ), - ); - } - }, - icon: Icon(Icons.map), - ), - IconButton( - onPressed: () async { - visibilityZoomNotifierActivation.value = - !visibilityZoomNotifierActivation.value; - zoomNotifierActivation.value = !zoomNotifierActivation.value; - }, - icon: Icon(Icons.zoom_out_map), - ), - IconButton( - onPressed: () async { - await Navigator.pushNamed(context, "/picker-result"); - }, - icon: Icon(Icons.search), - ), - IconButton( - icon: Icon(Icons.select_all), - onPressed: () async { - if (advPickerNotifierActivation.value == false) { - advPickerNotifierActivation.value = true; - await controller.advancedPositionPicker(); - } - }, - ) - ], - ), - body: OrientationBuilder( - builder: (ctx, orientation) { - return Container( - child: Stack( - children: [ - OSMFlutter( - controller: controller, - mapIsLoading: Center( - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CircularProgressIndicator(), - Text("Map is Loading..") - ], - ), - ), - showContributorBadgeForOSM: true, - //trackMyPosition: trackingNotifier.value, - showDefaultInfoWindow: false, - defaultZoom: 3.0, - onLocationChanged: (myLocation) { - print(myLocation); - }, - onGeoPointClicked: (geoPoint) async { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - "${geoPoint.toMap().toString()}", - ), - action: SnackBarAction( - onPressed: () => ScaffoldMessenger.of(context) - .hideCurrentSnackBar(), - label: "hide", - ), - ), - ); - }, - staticPoints: [ - StaticPositionGeoPoint( - "line 1", - MarkerIcon( - icon: Icon( - Icons.train, - color: Colors.green, - size: 48, - ), - ), - [ - GeoPoint(latitude: 47.4333594, longitude: 8.4680184), - GeoPoint(latitude: 47.4317782, longitude: 8.4716146), - ], - ), - // StaticPositionGeoPoint( - // "line 2", - // MarkerIcon( - // icon: Icon( - // Icons.train, - // color: Colors.red, - // size: 48, - // ), - // ), - // [ - // GeoPoint(latitude: 47.4433594, longitude: 8.4680184), - // GeoPoint(latitude: 47.4517782, longitude: 8.4716146), - // ], - // ) - ], - road: Road( - startIcon: MarkerIcon( - icon: Icon( - Icons.person, - size: 64, - color: Colors.brown, - ), - ), - roadColor: Colors.red, - ), - markerOption: MarkerOption( - defaultMarker: MarkerIcon( - icon: Icon( - Icons.home, - color: Colors.orange, - size: 64, - ), - ), - advancedPickerMarker: MarkerIcon( - icon: Icon( - Icons.location_searching, - color: Colors.green, - size: 64, - ), - ), - ), - ), - Positioned( - bottom: 10, - left: 10, - child: ValueListenableBuilder( - valueListenable: advPickerNotifierActivation, - builder: (ctx, visible, child) { - return Visibility( - visible: visible, - child: AnimatedOpacity( - opacity: visible ? 1.0 : 0.0, - duration: Duration(milliseconds: 500), - child: child, - ), - ); - }, - child: FloatingActionButton( - key: UniqueKey(), - child: Icon(Icons.arrow_forward), - heroTag: "confirmAdvPicker", - onPressed: () async { - advPickerNotifierActivation.value = false; - GeoPoint p = - await controller.selectAdvancedPositionPicker(); - print(p); - }, - ), - ), - ), - Positioned( - bottom: 10, - left: 10, - child: ValueListenableBuilder( - valueListenable: visibilityZoomNotifierActivation, - builder: (ctx, visibility, child) { - return Visibility( - visible: visibility, - child: child!, - ); - }, - child: ValueListenableBuilder( - valueListenable: zoomNotifierActivation, - builder: (ctx, isVisible, child) { - return AnimatedOpacity( - opacity: isVisible ? 1.0 : 0.0, - onEnd: () { - visibilityZoomNotifierActivation.value = isVisible; - }, - duration: Duration(milliseconds: 500), - child: child, - ); - }, - child: Column( - children: [ - ElevatedButton( - child: Icon(Icons.add), - onPressed: () async { - controller.zoomIn(); - }, - ), - ElevatedButton( - child: Icon(Icons.remove), - onPressed: () async { - controller.zoomOut(); - }, - ), - ], - ), - ), - ), - ), - ], - ), - ); - }, - ), - floatingActionButton: FloatingActionButton( - onPressed: () async { - if (!trackingNotifier.value) { - await controller.currentLocation(); - await controller.enableTracking(); - //await controller.zoom(5.0); - } else { - await controller.disabledTracking(); - } - trackingNotifier.value = !trackingNotifier.value; - }, - child: ValueListenableBuilder( - valueListenable: trackingNotifier, - builder: (ctx, isTracking, _) { - if (isTracking) { - return Icon(Icons.gps_off_sharp); - } - return Icon(Icons.my_location); - }, - ), - ), - ); - } -} diff --git a/flutter_osm_interface/lib/src/channel/osm_method_channel.dart b/flutter_osm_interface/lib/src/channel/osm_method_channel.dart index 73ac5ce3..b157bfdf 100644 --- a/flutter_osm_interface/lib/src/channel/osm_method_channel.dart +++ b/flutter_osm_interface/lib/src/channel/osm_method_channel.dart @@ -25,11 +25,11 @@ import '../osm_interface.dart'; import '../types/types.dart'; import '../common/osm_event.dart'; +import 'dart:ui' as ui; class MethodChannelOSM extends MobileOSMPlatform { final Map _channels = {}; - late Location locationService; //final Map> _eventsChannels = {}; StreamController _streamController = StreamController.broadcast(); @@ -610,6 +610,14 @@ class MethodChannelOSM extends MobileOSMPlatform { + @override + Future initMap(int idOSM, GeoPoint point) { + // TODO: implement initMap + throw UnimplementedError(); + } + + + } diff --git a/flutter_osm_interface/lib/src/map_controller/base_map_controller.dart b/flutter_osm_interface/lib/src/map_controller/base_map_controller.dart index dda104ec..792631b7 100644 --- a/flutter_osm_interface/lib/src/map_controller/base_map_controller.dart +++ b/flutter_osm_interface/lib/src/map_controller/base_map_controller.dart @@ -33,7 +33,7 @@ class BaseMapController extends IBaseMapController { @override void init() { Future.delayed(Duration(milliseconds: 1250), () async { - await osmBaseController.initMap( + await osmBaseController.initPositionMap( initPosition: initPosition, initWithUserPosition: initMapWithUserPosition, ); diff --git a/flutter_osm_interface/lib/src/map_controller/i_base_map_controller.dart b/flutter_osm_interface/lib/src/map_controller/i_base_map_controller.dart index 9dd9b0cf..ae052f9f 100644 --- a/flutter_osm_interface/lib/src/map_controller/i_base_map_controller.dart +++ b/flutter_osm_interface/lib/src/map_controller/i_base_map_controller.dart @@ -42,7 +42,7 @@ abstract class IBaseMapController { } } -extension setLiteners on BaseMapController { +extension setLiteners on IBaseMapController { void setValueListenerMapLongTapping(GeoPoint p) { _listenerMapLongTapping.value = p; } diff --git a/flutter_osm_interface/lib/src/osm_controller/osm_controller.dart b/flutter_osm_interface/lib/src/osm_controller/osm_controller.dart index 0cf77f35..ce23588d 100644 --- a/flutter_osm_interface/lib/src/osm_controller/osm_controller.dart +++ b/flutter_osm_interface/lib/src/osm_controller/osm_controller.dart @@ -4,11 +4,18 @@ import 'package:flutter_osm_interface/src/types/road.dart'; import '../types/types.dart'; abstract class IBaseOSMController { - Future initMap({ + Future initPositionMap({ GeoPoint? initPosition, bool initWithUserPosition = false, }); + Future configureZoomMap( + int minZoomLevel, + int maxZoomLevel, + double stepZoom, + double initZoom, + ); + ///initialise or change of position /// /// [p] : (GeoPoint) position that will be added to map diff --git a/flutter_osm_interface/lib/src/osm_interface.dart b/flutter_osm_interface/lib/src/osm_interface.dart index e69de29b..9a8952b3 100644 --- a/flutter_osm_interface/lib/src/osm_interface.dart +++ b/flutter_osm_interface/lib/src/osm_interface.dart @@ -0,0 +1,247 @@ + + + +import 'package:flutter/material.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +import 'channel/osm_method_channel.dart'; +import 'types/types.dart'; + +import 'common/osm_event.dart'; + +abstract class OSMPlatform extends PlatformInterface { + OSMPlatform() : super(token: token); + + + static late OSMPlatform _instance = MethodChannelOSM(); + + static OSMPlatform get instance => _instance; + + + /// Platform-specific plugins should set this with their own platform-specific + /// class that extends [OSMPlatformInterface] when they register themselves. + static set instance(OSMPlatform instance) { + PlatformInterface.verifyToken(instance, token); + _instance = instance; + } + static final Object token = Object(); + + + Stream onMapIsReady(int idMap); + + Stream onSinglePressMapClickListener(int idMap); + + Stream onLongPressMapClickListener(int idMap); + + Stream onGeoPointClickListener(int idMap); + + Stream onUserPositionListener(int idMap); + + Future init( + int idOSM, + ); + + void close(); + + +} +abstract class MobileOSMPlatform extends OSMPlatform { + Future initPositionMap( + int idOSM, + GeoPoint point, + ); + + Future currentLocation( + int idOSM, + ); + + Future myLocation( + int idMap, + ); + + Future pickLocation( + int idOSM, { + GlobalKey? key, + String imageURL = "", + }); + + Future customMarker( + int idOSM, + GlobalKey? globalKey, + ); + + Future customUserLocationMarker( + int idOSM, + GlobalKey personGlobalKey, + GlobalKey directionArrowGlobalKey, + ); + + Future setColorRoad( + int idOSM, + Color color, + ); + + Future setMarkersRoad( + int idOSM, + List keys, + ); + + Future enableTracking( + int idOSM, + ); + + Future addPosition( + int idOSM, + GeoPoint p, + ); + + Future goToPosition( + int idOSM, + GeoPoint p, + ); + + Future addMarker( + int idOSM, + GeoPoint p, { + GlobalKey? globalKeyIcon, + }); + + Future removePosition( + int idOSM, + GeoPoint p, + ); + + Future removeLastRoad( + int idOSM, + ); + + Future drawRoad( + int idOSM, + GeoPoint start, + GeoPoint end, { + RoadType roadType = RoadType.car, + List? interestPoints, + RoadOption roadOption, + }); + + Future drawCircle( + int idOSM, + CircleOSM circleOSM, + ); + + Future removeCircle( + int idOSM, + String key, + ); + + Future drawRect( + int idOSM, + RectOSM rectOSM, + ); + + Future removeRect( + int idOSM, + String key, + ); + + Future removeAllRect( + int idOSM, + ); + + Future removeAllCircle( + int idOSM, + ); + + Future removeAllShapes( + int idOSM, + ); + + Future customMarkerStaticPosition( + int idOSM, + GlobalKey? globalKey, + String id, + ); + + Future staticPosition( + int idOSM, + List pList, + String id, + ); + + Future getZoom( + int idOSM, + ); + + Future setZoom( + int idOSM, { + double? zoomLevel, + double? stepZoom, + }); + + Future setStepZoom( + int idOSM, + int stepZoom, + ); + + Future setMinimumZoomLevel( + int idOSM, + int minZoom, + ); + + Future setMaximumZoomLevel( + int idOSM, + int maxZoom, + ); + + Future disableTracking( + int idOSM, + ); + + Future visibilityInfoWindow( + int idOSM, + bool visible, + ); + + Future advancedPositionPicker( + int idOSM, + ); + + Future getPositionOnlyAdvancedPositionPicker( + int idOSM, + ); + + Future selectAdvancedPositionPicker( + int idOSM, + ); + + Future cancelAdvancedPositionPicker( + int idOSM, + ); + + Future drawRoadManually( + int idOSM, + List road, + Color roadColor, + double width, + ); + + Future mapRotation( + int idOSM, + double degree, + ); + + Future customAdvancedPickerMarker( + int idMap, + GlobalKey key, + ); + + Future limitArea( + int idOSM, + BoundingBox box, + ); + + Future removeLimitArea( + int idOSM, + ); + +} \ No newline at end of file diff --git a/flutter_osm_interface/lib/src/types/geo_point.dart b/flutter_osm_interface/lib/src/types/geo_point.dart index 6d6d2cb0..89069a17 100644 --- a/flutter_osm_interface/lib/src/types/geo_point.dart +++ b/flutter_osm_interface/lib/src/types/geo_point.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + ///[GeoPoint]:class contain longitude and latitude of geographic position /// [longitude] : (double) /// [latitude] : (double) diff --git a/flutter_osm_web/lib/src/asset/map.html b/flutter_osm_web/lib/src/asset/map.html index be20dbdb..e4fb5b4a 100644 --- a/flutter_osm_web/lib/src/asset/map.html +++ b/flutter_osm_web/lib/src/asset/map.html @@ -163,6 +163,13 @@ return 200; } + async function configInitZoomMap(step,initZoom,minZoomLevel,maxZoomLevel){ + mymap.setMinZoom(minZoomLevel); + mymap.setMinZoom(maxZoomLevel); + zoom = initZoom; + stepZoom = step; + return 200; + } async function setZoomStep(zoomStep) { stepZoom = zoomStep diff --git a/flutter_osm_web/lib/src/asset/map.js b/flutter_osm_web/lib/src/asset/map.js index 4c96b74a..4858456c 100644 --- a/flutter_osm_web/lib/src/asset/map.js +++ b/flutter_osm_web/lib/src/asset/map.js @@ -45,6 +45,10 @@ async function setZoom(zoom) { var iframe = document.getElementById("frame_map"); return await iframe.contentWindow.setZoom(zoom); } +async function configZoom(step,zoom,minZoomLevel,maxZoomLevel) { + var iframe = document.getElementById("frame_map"); + return await iframe.contentWindow.configInitZoomMap(step,zoom,minZoomLevel,maxZoomLevel); +} async function currentUserLocation() { var iframe = document.getElementById("frame_map"); return await iframe.contentWindow.userLocation(); diff --git a/flutter_osm_web/lib/src/controller/web_osm_controller.dart b/flutter_osm_web/lib/src/controller/web_osm_controller.dart index 2602d075..ff0be937 100644 --- a/flutter_osm_web/lib/src/controller/web_osm_controller.dart +++ b/flutter_osm_web/lib/src/controller/web_osm_controller.dart @@ -78,20 +78,20 @@ class WebOsmController with WebMixin implements IBaseOSMController { } @override - Future initMap({ + Future initPositionMap({ GeoPoint? initPosition, bool initWithUserPosition = false, }) async { assert(initPosition != null || initWithUserPosition == true); webPlatform.onLongPressMapClickListener(_mapId).listen((event) { - _osmWebFlutterState.widget.controller.listenerMapLongTapping.value = - event.value; + _osmWebFlutterState.widget.controller + .setValueListenerMapLongTapping(event.value); }); - webPlatform.onSinglePressMapClickListener(_mapId).listen((event) { - _osmWebFlutterState.widget.controller.listenerMapSingleTapping.value = - event.value; + _osmWebFlutterState.widget.controller + .setValueListenerMapSingleTapping(event.value); + event.value; }); webPlatform.onMapIsReady(_mapId).listen((event) async { print(event.value); @@ -121,7 +121,12 @@ class WebOsmController with WebMixin implements IBaseOSMController { }); } - await defaultZoom(_osmWebFlutterState.widget.defaultZoom); + await configureZoomMap( + _osmWebFlutterState.widget.minZoomLevel, + _osmWebFlutterState.widget.maxZoomLevel, + _osmWebFlutterState.widget.stepZoom, + _osmWebFlutterState.widget.initZoom, + ); GeoPoint? initLocation = initPosition; @@ -179,4 +184,6 @@ class WebOsmController with WebMixin implements IBaseOSMController { // TODO: implement selectPosition throw UnimplementedError(); } + + } diff --git a/flutter_osm_web/lib/src/interop/osm_interop.dart b/flutter_osm_web/lib/src/interop/osm_interop.dart index 390af357..3b706bfa 100644 --- a/flutter_osm_web/lib/src/interop/osm_interop.dart +++ b/flutter_osm_web/lib/src/interop/osm_interop.dart @@ -17,6 +17,9 @@ external dynamic initMapLocation(GeoPointJs p); external dynamic setZoomControl(bool showZoomControl); +@JS('configZoom') +external dynamic configZoom(double stepZoom,double initZoom,int minZoomLevel,int maxZoomLevel); + @JS('setZoomStep') external dynamic setZoomStep(double stepZoom); diff --git a/flutter_osm_web/lib/src/mixin_web.dart b/flutter_osm_web/lib/src/mixin_web.dart index 853b14f9..daf134ec 100644 --- a/flutter_osm_web/lib/src/mixin_web.dart +++ b/flutter_osm_web/lib/src/mixin_web.dart @@ -53,10 +53,6 @@ mixin WebMixin { ); } - Future defaultZoom(double zoom) async { - await interop.setZoomStep(zoom); - } - Future disabledTracking() { // TODO: implement disabledTracking throw UnimplementedError(); @@ -72,16 +68,6 @@ mixin WebMixin { throw UnimplementedError(); } - Future drawRoad( - GeoPoint start, - GeoPoint end, { - List? interestPoints, - RoadOption? roadOption, - }) { - // TODO: implement drawRoad - throw UnimplementedError(); - } - Future drawRoadManually( List path, Color roadColor, @@ -178,6 +164,74 @@ mixin WebMixin { await interop.zoomOut(); } + Future addMarker(GeoPoint p, {MarkerIcon? markerIcon}) { + // TODO: implement addMarker + throw UnimplementedError(); + } + + Future getZoom() { + // TODO: implement getZoom + throw UnimplementedError(); + } + + Future limitArea(BoundingBox box) { + // TODO: implement limitArea + throw UnimplementedError(); + } + + Future removeLimitArea() { + // TODO: implement removeLimitArea + throw UnimplementedError(); + } + + Future setMaximumZoomLevel(int maxZoom) { + // TODO: implement setMaximumZoomLevel + throw UnimplementedError(); + } + + Future setMinimumZoomLevel(int minZoom) { + // TODO: implement setMinimumZoomLevel + throw UnimplementedError(); + } + + Future setStepZoom(int stepZoom) async { + await interop.setZoomStep(stepZoom.toDouble()); + } + + Future setZoom({double? zoomLevel, double? stepZoom}) async { + assert(zoomLevel != null || stepZoom != null); + if (zoomLevel != null) { + await interop.setZoom(zoomLevel); + } else if (stepZoom != null) { + await interop.setZoomStep(stepZoom); + } + } + + Future drawRoad( + GeoPoint start, + GeoPoint end, { + RoadType roadType = RoadType.car, + List? interestPoints, + RoadOption? roadOption, + }) { + // TODO: implement drawRoad + throw UnimplementedError(); + } + + Future configureZoomMap( + int minZoomLevel, + int maxZoomLevel, + double stepZoom, + double initZoom, + ) async { + await interop.configZoom( + stepZoom, + initZoom, + minZoomLevel, + maxZoomLevel, + ); + } + Future _addPosition( GeoPoint point, { bool showMarker = true, diff --git a/flutter_osm_web/lib/src/osm_web.dart b/flutter_osm_web/lib/src/osm_web.dart index 2c39ce7f..3e0774a3 100644 --- a/flutter_osm_web/lib/src/osm_web.dart +++ b/flutter_osm_web/lib/src/osm_web.dart @@ -16,11 +16,16 @@ class OsmWebWidget extends StatefulWidget { final Map staticIconGlobalKeys; final MarkerOption? markerOption; final Road? road; - final double defaultZoom; final bool showDefaultInfoWindow; final bool isPicker; final bool trackMyPosition; final ValueNotifier dynamicMarkerWidgetNotifier; + final double stepZoom; + final double initZoom; + final int minZoomLevel; + final int maxZoomLevel; + final Function(bool)? onMapIsReady; + final UserLocationMaker? userLocationMarker; OsmWebWidget({ Key? key, @@ -34,11 +39,16 @@ class OsmWebWidget extends StatefulWidget { this.trackMyPosition = false, this.markerOption, this.road, - this.defaultZoom = 1.0, this.showDefaultInfoWindow = false, this.isPicker = false, required this.dynamicMarkerWidgetNotifier, this.staticPoints = const [], + this.stepZoom = 1.0, + this.initZoom = 2, + this.minZoomLevel = 2, + this.maxZoomLevel = 18, + this.onMapIsReady, + this.userLocationMarker, }) : super(key: key); @override @@ -60,6 +70,10 @@ class OsmWebWidgetState extends State { GlobalKey? get dynamicMarkerKey => widget.globalKeys[5]; + GlobalKey get personIconMarkerKey => widget.globalKeys[6]; + + GlobalKey get arrowDirectionMarkerKey => widget.globalKeys[7]; + @override void initState() { super.initState(); diff --git a/lib/flutter_osm_plugin.dart b/lib/flutter_osm_plugin.dart index 06a3df7b..9fea5597 100644 --- a/lib/flutter_osm_plugin.dart +++ b/lib/flutter_osm_plugin.dart @@ -1,15 +1,16 @@ library osm_flutter; export 'package:flutter_osm_interface/src/map_controller/base_map_controller.dart' - hide setLiteners, OSMControllerOfBaseMapController; + hide OSMControllerOfBaseMapController; + export 'package:flutter_osm_interface/src/types/types.dart'; -export 'src/common/geo_point_exception.dart'; -export 'src/common/road_exception.dart'; +export 'package:flutter_osm_interface/src/common/geo_point_exception.dart'; +export 'package:flutter_osm_interface/src/common/road_exception.dart'; export 'src/common/utilities.dart'; export 'src/controller/map_controller.dart'; export 'src/controller/picker_map_controller.dart'; -export 'src/osm_flutter.dart' hide OSMFlutterState; +export 'src/osm_flutter.dart'; export 'src/widgets/copyright_osm_widget.dart'; export 'src/widgets/custom_picker_location.dart'; export 'src/widgets/picker_location.dart'; diff --git a/lib/src/controller/map_controller.dart b/lib/src/controller/map_controller.dart index d5bca43c..453948f6 100644 --- a/lib/src/controller/map_controller.dart +++ b/lib/src/controller/map_controller.dart @@ -261,15 +261,6 @@ class MapController extends BaseMapController { ); } - void init() { - //setBaseOSMController(controller); - Future.delayed(Duration(milliseconds: 1250), () async { - await osmBaseController.initMap( - initPosition: initPosition, - initWithUserPosition: initMapWithUserPosition, - ); - }); - } Future addMarker( GeoPoint p, { diff --git a/lib/src/controller/osm/osm_controller.dart b/lib/src/controller/osm/osm_controller.dart index 1a245719..e52ae9bf 100644 --- a/lib/src/controller/osm/osm_controller.dart +++ b/lib/src/controller/osm/osm_controller.dart @@ -45,7 +45,7 @@ class MobileOSMController extends IBaseOSMController { /// [initPosition] : (geoPoint) animate map to initPosition /// [initWithUserPosition] : set map in user position /// [box] : (BoundingBox) area limit of the map - Future initMap({ + Future initPositionMap({ GeoPoint? initPosition, bool initWithUserPosition = false, BoundingBox? box, @@ -129,7 +129,7 @@ class MobileOSMController extends IBaseOSMController { /// change advanced picker icon marker if (_osmFlutterState.widget.markerOption?.advancedPickerMarker != null) { - await changeIconAdvPickerMarker(_osmFlutterState.advancedPickerMarker!); + await changeIconAdvPickerMarker(_osmFlutterState.advancedPickerMarker); } if (Platform.isIOS && _osmFlutterState.widget.markerOption?.advancedPickerMarker == null) { @@ -240,6 +240,7 @@ class MobileOSMController extends IBaseOSMController { ); } + @override Future configureZoomMap( int minZoomLevel, int maxZoomLevel, @@ -604,4 +605,6 @@ class MobileOSMController extends IBaseOSMController { Future removeLimitArea() async{ await osmPlatform.removeLimitArea(_idMap); } + + } diff --git a/lib/src/osm_flutter.dart b/lib/src/osm_flutter.dart index c2d2e8b9..26a1adb6 100644 --- a/lib/src/osm_flutter.dart +++ b/lib/src/osm_flutter.dart @@ -93,10 +93,10 @@ class OSMFlutter extends StatefulWidget { super(key: key); @override - OSMFlutterState createState() => OSMFlutterState(); + _OSMFlutterState createState() => _OSMFlutterState(); } -class OSMFlutterState extends State { +class _OSMFlutterState extends State { ValueNotifier dynamicMarkerWidgetNotifier = ValueNotifier(null); ValueNotifier mapIsReadyListener = ValueNotifier(false); diff --git a/lib/src/widgets/platform/web_osm_widget.dart b/lib/src/widgets/platform/web_osm_widget.dart index e54c1c14..cbc63c97 100644 --- a/lib/src/widgets/platform/web_osm_widget.dart +++ b/lib/src/widgets/platform/web_osm_widget.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_osm_interface/flutter_osm_interface.dart'; -import 'package:flutter_osm_interface/src/map_controller/base_map_controller.dart'; -import 'package:flutter_osm_plugin/src/controller/map_controller.dart'; +import '../../controller/map_controller.dart'; import 'package:flutter_osm_web/flutter_osm_web.dart'; @@ -19,10 +18,15 @@ Widget getWidget({ MarkerOption? markerOption, Road? road, bool showZoomController = false, - double defaultZoom = 1.0, bool showDefaultInfoWindow = false, bool isPicker = false, bool showContributorBadgeForOSM = false, + double stepZoom = 1, + double initZoom = 2, + int minZoomLevel = 2, + int maxZoomLevel = 18, + UserLocationMaker? userLocationMarker, + Function(bool)? onMapIsReady, }) => OsmWebWidget( controller: controller as MapController, @@ -34,9 +38,14 @@ Widget getWidget({ staticIconGlobalKeys: staticIconGlobalKeys, globalKeys: globalKeys, dynamicMarkerWidgetNotifier: dynamicMarkerWidgetNotifier, - defaultZoom: defaultZoom, isPicker: isPicker, markerOption: markerOption, road: road, showDefaultInfoWindow: showDefaultInfoWindow, + onMapIsReady: onMapIsReady, + userLocationMarker: userLocationMarker, + initZoom: initZoom, + minZoomLevel: minZoomLevel, + maxZoomLevel: maxZoomLevel, + stepZoom: stepZoom, ); diff --git a/pubspec.yaml b/pubspec.yaml index cfd74dd9..188a2f03 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,7 +43,8 @@ flutter: pluginClass: FlutterOsmPlugin ios: pluginClass: FlutterOsmPlugin - + web: + default_package: flutter_osm_web # To add assets to your plugin package, add an assets section, like this: