From ce105a67540df02c1e7ff5b9f55a20a1ed375252 Mon Sep 17 00:00:00 2001 From: Mohamed Nouffer Date: Sat, 9 Jul 2022 22:51:34 +0530 Subject: [PATCH] change modes --- lib/main.dart | 3 +- lib/model/destination.dart | 77 +++++ .../destination/destination_controller.dart | 279 ++++++++++++------ lib/pages/destination/destination_page.dart | 24 +- .../destination_map/destination_map_page.dart | 222 +++++++------- lib/pages/home/home_binding.dart | 12 + lib/pages/home/home_controller.dart | 7 + lib/pages/home/home_page.dart | 42 +++ lib/pages/index/index_controller.dart | 77 +++-- lib/pages/index/index_page.dart | 28 +- lib/pages/search/search_page.dart | 25 ++ lib/routes/app_pages.dart | 10 +- lib/routes/app_routes.dart | 1 + lib/services/destination_service.dart | 14 +- lib/services/maxtrix_service.dart | 11 +- lib/utils/database_helper.dart | 87 ++++++ lib/widgets/bottom_sheet_new.dart | 69 ++++- lib/widgets/bread_crum_widget.dart | 31 +- lib/widgets/destination_widget.dart | 44 +-- lib/widgets/fake_search.dart | 45 +++ lib/widgets/map_widget.dart | 6 +- lib/widgets/perfecture_widget.dart | 7 + 22 files changed, 828 insertions(+), 293 deletions(-) create mode 100644 lib/model/destination.dart create mode 100644 lib/pages/home/home_binding.dart create mode 100644 lib/pages/home/home_controller.dart create mode 100644 lib/pages/home/home_page.dart create mode 100644 lib/pages/search/search_page.dart create mode 100644 lib/utils/database_helper.dart create mode 100644 lib/widgets/fake_search.dart diff --git a/lib/main.dart b/lib/main.dart index 9b930d0..e09de8c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -33,8 +33,9 @@ class MyApp extends StatelessWidget { popGesture: Get.isPopGestureEnable, transitionDuration: const Duration(milliseconds: 230), initialBinding: IndexBinding(), //HomeBinding(), - initialRoute: AppPages.INITIAL, + initialRoute: AppPages.TRAVEL, getPages: AppPages.routes, + enableLog: true, ); } } diff --git a/lib/model/destination.dart b/lib/model/destination.dart new file mode 100644 index 0000000..b5e6a24 --- /dev/null +++ b/lib/model/destination.dart @@ -0,0 +1,77 @@ + + +class Destination { + String? name; + String? address; + String? phone; + String? email; + String? webcontents; + String? videos; + String? category; + int? series; + double? lat; + double? lon; + int? location_id; + int? list_order; + String? photos; + double? checkin_radious; + int? auto_checkin; + + Destination({ + this.name, + this.address, + this.phone, + this.email, + this.webcontents, + this.videos, + this.category, + this.series, + this.lat, + this.lon, + this.location_id, + this.list_order, + this.photos, + this.checkin_radious, + this.auto_checkin + }); + + factory Destination.fromMap(Map json) => Destination( + name: json['name'], + address: json['address'], + phone: json['phone'], + email: json['email'], + webcontents: json['webcontents'], + videos: json['videos'], + category: json['category'], + series: json['series'], + lat: json['lat'], + lon: json['lon'], + location_id: json['location_id'], + list_order: json['list_order'], + photos: json['category'], + checkin_radious: json['checkin_radious'], + auto_checkin:json['auto_checkin'] + ); + + Map toMap(){ + return { + 'name':name, + 'address': address, + 'phone': phone, + 'email': email, + 'webcontents': webcontents, + 'videos': videos, + 'category':category, + 'series':series, + 'lat':lat, + 'lon':lon, + 'location_id':location_id, + 'list_order':list_order, + 'photos':photos, + 'checkin_radious': checkin_radious, + 'auto_checkin': auto_checkin + }; + } + + +} \ No newline at end of file diff --git a/lib/pages/destination/destination_controller.dart b/lib/pages/destination/destination_controller.dart index 69fb798..81804ba 100644 --- a/lib/pages/destination/destination_controller.dart +++ b/lib/pages/destination/destination_controller.dart @@ -8,11 +8,13 @@ import 'package:geojson/geojson.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; import 'package:latlong2/latlong.dart'; +import 'package:rogapp/model/destination.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/routes/app_pages.dart'; import 'package:rogapp/services/destination_service.dart'; import 'package:rogapp/services/maxtrix_service.dart'; import 'package:rogapp/services/reacking_service.dart'; +import 'package:rogapp/utils/database_helper.dart'; import 'dart:async'; import 'package:rogapp/widgets/bottom_sheet_widget.dart'; @@ -22,7 +24,7 @@ class DestinationController extends GetxController { late LocationSettings locationSettings; var destinationCount = 0.obs; - List destinations = [].obs; + List destinations = [].obs; List> destination_index_data = >[].obs; bool checking_in = false; @@ -34,41 +36,41 @@ class DestinationController extends GetxController { final IndexController indexController = Get.find(); - Future getDEstinationForLatLong(double lat, double long)async { + Future getDEstinationForLatLong(double lat, double long)async { String jjjj = '{"id":1,"type":"Feature","geometry":{"type":"MultiPoint","coordinates":[[136.731357,35.370094]]},"properties":{"location_id":915101,"location_name":"柳津","category":"買い物","zip":"〒501-6100","address":"柳津町字仙右城7696-1"}}'; for(final d in destinations){ - var geom = d["location"]["geometry"]; - var props = d["location"]["properties"]; - print("--props- ${d["location"]["geometry"]["coordinates"][0][1]}"); - List geom_multi = [geom]; - Map final_geom = {"features":[{"id":d["id"],"type":"Feature", "geometry": geom, "properties": props}]}; - //print("----- geom : ${final_geom}"); + // var geom = d["location"]["geometry"]; + // var props = d["location"]["properties"]; + // print("--props- ${d["location"]["geometry"]["coordinates"][0][1]}"); + // List geom_multi = [geom]; + // Map final_geom = {"features":[{"id":d["id"],"type":"Feature", "geometry": geom, "properties": props}]}; + // //print("----- geom : ${final_geom}"); - String js = json.encode(final_geom); - //print("---features-- ${js}-----"); - GeoJsonFeatureCollection features = await featuresFromGeoJson(js); - GeoJsonMultiPoint p = features.collection[0].geometry as GeoJsonMultiPoint; - if(lat == p.geoSerie!.geoPoints[0].latitude && long == p.geoSerie!.geoPoints[0].longitude){ - return features.collection[0]; + // String js = json.encode(final_geom); + // //print("---features-- ${js}-----"); + // GeoJsonFeatureCollection features = await featuresFromGeoJson(js); + // GeoJsonMultiPoint p = features.collection[0].geometry as GeoJsonMultiPoint; + if(lat == d.lat && long == d.lon){ + return d; } } } checkForCheckin(double la, double ln){ for(final d in destinations){ - double lat = d["location"]["geometry"]["coordinates"][0][1] as double; - double lon = d["location"]["geometry"]["coordinates"][0][0] as double; + double lat = d.lat!; + double lon = d.lon!; LatLng p = LatLng(lat, lon); getDEstinationForLatLong(lat, lon).then((value){ var distance = Distance(); double dist = distance.as(LengthUnit.Meter, LatLng(lat, lon), LatLng(la, ln)); - double rad = value!.properties!["checkin_radious"] ?? double.infinity; - bool auto_checkin = value.properties!["auto_checkin"] ?? false; + double rad = value!.checkin_radious ?? double.infinity; + bool auto_checkin = value.auto_checkin == 0 ? false : true; - indexController.currentFeature.add(value); - indexController.getAction(); + indexController.currentDestinationFeature.add(value); + //indexController.getAction(); if(!checking_in){ checking_in = true; @@ -109,85 +111,134 @@ class DestinationController extends GetxController { - // if (defaultTargetPlatform == TargetPlatform.android) { - // locationSettings = AndroidSettings( - // accuracy: LocationAccuracy.high, - // distanceFilter: 30, - // forceLocationManager: true, - // intervalDuration: const Duration(seconds: 10), - // //(Optional) Set foreground notification config to keep the app alive - // //when going to the background - // foregroundNotificationConfig: const ForegroundNotificationConfig( - // notificationText: - // "Example app will continue to receive your location even when you aren't using it", - // notificationTitle: "Running in Background", - // enableWakeLock: true, - // ) - // ); - // } else if (defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS) { - // locationSettings = AppleSettings( - // accuracy: LocationAccuracy.high, - // activityType: ActivityType.fitness, - // distanceFilter: 1, - // pauseLocationUpdatesAutomatically: false, - // // Only set to true if our app will be started up in the background. - // showBackgroundLocationIndicator: true - // ); - // } else { - // locationSettings = LocationSettings( - // accuracy: LocationAccuracy.high, - // distanceFilter: 30, - // ); - // } + if (defaultTargetPlatform == TargetPlatform.android) { + locationSettings = AndroidSettings( + accuracy: LocationAccuracy.high, + distanceFilter: 30, + forceLocationManager: true, + intervalDuration: const Duration(seconds: 10), + //(Optional) Set foreground notification config to keep the app alive + //when going to the background + foregroundNotificationConfig: const ForegroundNotificationConfig( + notificationText: + "Example app will continue to receive your location even when you aren't using it", + notificationTitle: "Running in Background", + enableWakeLock: true, + ) + ); + } else if (defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS) { + locationSettings = AppleSettings( + accuracy: LocationAccuracy.high, + activityType: ActivityType.fitness, + distanceFilter: 1, + pauseLocationUpdatesAutomatically: false, + // Only set to true if our app will be started up in the background. + showBackgroundLocationIndicator: true + ); + } else { + locationSettings = LocationSettings( + accuracy: LocationAccuracy.high, + distanceFilter: 30, + ); + } - // StreamSubscription positionStream = Geolocator.getPositionStream(locationSettings: locationSettings).listen( - // (Position? position) { - // if(isSelected[0]){ - // String user_id = indexController.currentUser[0]["user"]["id"].toString(); - // TrackingService.addTrack(user_id, position!.latitude, position.longitude).then((val){ - // //checkForCheckin(position!.latitude, position.longitude); - // }); + StreamSubscription positionStream = Geolocator.getPositionStream(locationSettings: locationSettings).listen( + (Position? position) { + double czoom = indexController.rogMapController!.zoom; + indexController.rogMapController!.move(LatLng(position!.latitude, position!.longitude), czoom); + if(isSelected[0]){ + String user_id = indexController.currentUser[0]["user"]["id"].toString(); + TrackingService.addTrack(user_id, position!.latitude, position.longitude).then((val){ + //checkForCheckin(position!.latitude, position.longitude); + }); - // } - // print(position == null ? 'Unknown' : 'current position is ${position.latitude.toString()}, ${position.longitude.toString()}'); - // }); + } + print(position == null ? 'Unknown' : 'current position is ${position.latitude.toString()}, ${position.longitude.toString()}'); + }); } void deleteDestination(int index){ - int id = destinations[index]["id"]; - DestinationService.deleteDestination(id).then((val){ - destination_index_data.clear(); + print("---- index ${index}-----"); + int id = destinations[index].location_id!; + //print("---- index ${destinations[index].location_id!}-----"); + DatabaseHelper db = DatabaseHelper.instance; + db.deleteDestination(id).then((value){ PopulateDestinations(); - print("####### dest id : ${id}"); }); + // DestinationService.deleteDestination(id).then((val){ + // destination_index_data.clear(); + // PopulateDestinations(); + // print("####### dest id : ${id}"); + // }); + } + + // ---------- database ------------------/// + + void addDestinations(Destination dest){ + + DatabaseHelper db = DatabaseHelper.instance; + db.getDestinationByLatLon(dest.lat!, dest.lon!).then((value){ + //print("----- available destination for latlon $value[0]"); + if(value.isNotEmpty){ + db.deleteDestination(value[0].location_id!).then((value){ + db.insertDestination(dest).then((value){ + print("----- delete andinserted destination id $value"); + }); + }); + } + else { + db.insertDestination(dest).then((value){ + print("----- new inserted destination id $value"); + }); + } + }); + PopulateDestinations(); + } void PopulateDestinations(){ print("--------- populsting destinations -----------"); - if(indexController.currentUser.isNotEmpty){ - int user_id = indexController.currentUser[0]["user"]["id"]; - print(user_id); - DestinationService.getDestinations(user_id).then((value){ - destinations.clear(); - destinations = value; - destinationCount.value = 0; - destinationCount.value = destinations.length; + + DatabaseHelper db = DatabaseHelper.instance; + db.getDestinations().then((value){ + destinations.clear(); + destinations = value; + // destinationCount.value = 0; + print("------destinationcount-------- ${destinationCount}--------"); + destinationCount.value = destinations.length; + + MatrixService.getDestinations(value).then((mat){ + print(mat); + matrix = mat; + + }); + }); + + + // if(indexController.currentUser.isNotEmpty){ + // int user_id = indexController.currentUser[0]["user"]["id"]; + // print(user_id); + // DestinationService.getDestinations(user_id).then((value){ + // destinations.clear(); + // destinations = value; + // destinationCount.value = 0; + // destinationCount.value = destinations.length; - MatrixService.getDestinations(value).then((mat){ - print(mat); - matrix = mat; + // MatrixService.getDestinations(value).then((mat){ + // print(mat); + // matrix = mat; - }); + // }); - //var val = value[2]["location"]["id"]; - //print("-----current destinations ----- ${val}"); - }); - } - else{ - Get.toNamed(AppPages.LOGIN); - } + // //var val = value[2]["location"]["id"]; + // //print("-----current destinations ----- ${val}"); + // }); + // } + // else{ + // Get.toNamed(AppPages.LOGIN); + // } } @@ -198,6 +249,66 @@ class DestinationController extends GetxController { destination_index_data.clear(); }); - } + } + + + void makeNext(Destination pt){ + + for(int i=0; i<= destinations.length - 1; i++){ + Destination p = destinations[i]; + + if(p.lat == pt.lat && p.lon == pt.lon ){ + + if(indexController.currentDestinationFeature.isNotEmpty){ + indexController.currentDestinationFeature.clear(); + } + if(i >= destinations.length - 1 ){ + indexController.currentDestinationFeature.add(destinations[0]); + //getAction(); + } + else{ + indexController.currentDestinationFeature.add(destinations[i + 1]); + //getAction(); + } + } + } + + } + + // void makePrevious(GeoJsonFeature fs){ + + // if(rog_mode == 1){ + // DestinationController destinationController = Get.find(); + // print("---- destination index--- ${destinationController.destination_index_data} --------"); + // } + // else { + + // GeoJsonFeature pt = fs as GeoJsonFeature; + + // for(int i=0; i<= locations[0].collection.length - 1; i++){ + // GeoJsonMultiPoint p = locations[0].collection[i].geometry as GeoJsonMultiPoint; + + // if(p.geoSerie!.geoPoints[0].latitude == pt.geometry!.geoSerie!.geoPoints[0].latitude && p.geoSerie!.geoPoints[0].longitude == pt.geometry!.geoSerie!.geoPoints[0].longitude ){ + + // if(currentFeature.length > 0){ + // currentFeature.clear(); + // } + // if(i == 0 ){ + // currentFeature.add(locations[0].collection[locations[0].collection.length -1] as GeoJsonFeature); + // getAction(); + // } + // else{ + // currentFeature.add(locations[0].collection[i - 1] as GeoJsonFeature); + // getAction(); + // } + // } + // } + // } + // } + + + + + } \ No newline at end of file diff --git a/lib/pages/destination/destination_page.dart b/lib/pages/destination/destination_page.dart index ff4c2f7..accb54e 100644 --- a/lib/pages/destination/destination_page.dart +++ b/lib/pages/destination/destination_page.dart @@ -38,18 +38,18 @@ class _DestinationPageState extends State { } Image getImage(int index){ - if(destinationController.destinations[index]["location"]["properties"]["photos"] == null || destinationController.destinations[index]["location"]["properties"]["photos"] == ""){ + if(destinationController.destinations[index].photos == null || destinationController.destinations[index].photos == ""){ return Image(image: AssetImage('assets/images/empty_image.png')); } else{ - return Image(image: NetworkImage(destinationController.destinations[index]["location"]["properties"]["photos"])); + return Image(image: NetworkImage(destinationController.destinations[index].photos!)); } } @override void initState() { - destinationController.context = context; - destinationController.PopulateDestinations(); + //destinationController.context = context; + //destinationController.PopulateDestinations(); super.initState(); } @@ -71,12 +71,7 @@ class _DestinationPageState extends State { Expanded(child: IconButton(icon: const Icon(Icons.camera_enhance), onPressed: (){},),), const Expanded(child: Text('')), Expanded(child: IconButton(icon: const Icon(Icons.travel_explore), onPressed: (){ - if(indexController.currentUser.isNotEmpty){ - Get.toNamed(AppPages.TRAVEL); - } - else{ - Get.toNamed(AppPages.LOGIN); - } + indexController.switchPage(AppPages.INITIAL); }),), ], ), @@ -92,13 +87,8 @@ class _DestinationPageState extends State { ), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, appBar:AppBar( - title: Text("Iternery"), - leading: IconButton( - icon: Icon(Icons.arrow_back_ios), - onPressed: (){ - indexController.switchPage(AppPages.INITIAL); - }, - ), + automaticallyImplyLeading: false, + title: Text("app_title".tr), actions: [ ToggleButtons( disabledColor: Colors.grey.shade200, diff --git a/lib/pages/destination_map/destination_map_page.dart b/lib/pages/destination_map/destination_map_page.dart index 83173d9..6c0daf9 100644 --- a/lib/pages/destination_map/destination_map_page.dart +++ b/lib/pages/destination_map/destination_map_page.dart @@ -10,12 +10,14 @@ import 'package:geojson/geojson.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; import 'package:latlong2/latlong.dart'; +import 'package:rogapp/model/destination.dart'; import 'package:rogapp/pages/destination/destination_controller.dart'; //import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/services/destination_service.dart'; import 'package:rogapp/widgets/bottom_sheet_new.dart'; import 'package:rogapp/widgets/bottom_sheet_widget.dart'; +import 'package:rogapp/widgets/bread_crum_widget.dart'; class DestinationMapPage extends StatefulWidget { DestinationMapPage({ Key? key }) : super(key: key); @@ -34,40 +36,41 @@ class _DestinationMapPageState extends State { - Widget examplePopup(Marker marker){ - return Padding( - padding: const EdgeInsets.all(10), - child: Container( - constraints: const BoxConstraints(minWidth: 100, maxWidth: 200), - color: Colors.white, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - const Text( - 'Popup for a marker!', - overflow: TextOverflow.fade, - softWrap: false, - style: TextStyle( - fontWeight: FontWeight.w500, - fontSize: 14.0, - ), - ), - const Padding(padding: EdgeInsets.symmetric(vertical: 4.0)), - Text( - 'Position: ${marker.point.latitude}, ${marker.point.longitude}', - style: const TextStyle(fontSize: 12.0), - ), - Text( - 'Marker size: ${marker.width}, ${marker.height}', - style: const TextStyle(fontSize: 12.0), - ), - ], - ), - ), - ); - } + // Widget examplePopup(Marker marker){ + // return Padding( + // padding: const EdgeInsets.all(10), + // child: Container( + // constraints: const BoxConstraints(minWidth: 100, maxWidth: 200), + // color: Colors.white, + // child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // mainAxisAlignment: MainAxisAlignment.start, + // mainAxisSize: MainAxisSize.min, + // children: [ + // const Text( + // 'Popup for a marker!', + // overflow: TextOverflow.fade, + // softWrap: false, + // style: TextStyle( + // fontWeight: FontWeight.w500, + // fontSize: 14.0, + // ), + // ), + // const Padding(padding: EdgeInsets.symmetric(vertical: 4.0)), + // Text( + // 'Position: ${marker.point.latitude}, ${marker.point.longitude}', + // style: const TextStyle(fontSize: 12.0), + // ), + // Text( + // 'Marker size: ${marker.width}, ${marker.height}', + // style: const TextStyle(fontSize: 12.0), + // ), + // ], + // ), + // ), + // ); + // } + List? getPoints(){ @@ -82,21 +85,19 @@ class _DestinationMapPageState extends State { List? getMarkers() { List pts = []; - for(dynamic d in destinationController.destinations){ - double lat = d["location"]["geometry"]["coordinates"][0][1]; - double lan = d["location"]["geometry"]["coordinates"][0][0]; + for(Destination d in destinationController.destinations){ //print("-----lat ${lat}, ----- lon ${lan}"); - Marker m = Marker(point: LatLng(lat, lan), builder:(cts){ + Marker m = Marker(point: LatLng(d.lat!, d.lon!), builder:(cts){ //return Icon(Icons.pin_drop); return IconButton( onPressed: ()async { - GeoJsonFeature? fs = await destinationController.getDEstinationForLatLong(lat, lan); + Destination? fs = await destinationController.getDEstinationForLatLong(d.lat!, d.lon!); print("----fsf-----${fs}"); if(fs != null){ if(indexController.currentFeature.length > 0) { - indexController.currentFeature.clear(); + indexController.currentDestinationFeature.clear(); } - indexController.currentFeature.add(fs); + indexController.currentDestinationFeature.add(fs); indexController.getAction(); showModalBottomSheet(context: context, isScrollControlled: true, @@ -116,8 +117,9 @@ class _DestinationMapPageState extends State { @override void initState() { + DestinationService.getDestinationLine(destinationController.destinations)?.then((value){ - print("---- loading destination points ------ ${value}"); + //print("---- loading destination points ------ ${value}"); indexController.routePoints.clear(); indexController.routePoints = value; }); @@ -127,65 +129,83 @@ class _DestinationMapPageState extends State { @override Widget build(BuildContext context) { return Obx((() => - FlutterMap( - options: MapOptions( - onMapCreated: (c){ - indexController.rogMapController = c; - indexController.rogMapController!.onReady.then((_) { - subscription = indexController.rogMapController!.mapEventStream.listen((MapEvent mapEvent) { - if (mapEvent is MapEventMoveStart) { - //print(DateTime.now().toString() + ' [MapEventMoveStart] START'); - // do something - } - if (mapEvent is MapEventMoveEnd) { - //print(DateTime.now().toString() + ' [MapEventMoveStart] END'); - //indexController.loadLocationsBound(); - } - }); - }); - } , - bounds: indexController.currentBound.length > 0 ? indexController.currentBound[0]: LatLngBounds.fromPoints([LatLng(35.03999881162295, 136.40587119778962), LatLng(36.642756778706904, 137.95226720406063)]), - zoom: 1, - maxZoom: 20, - interactiveFlags: InteractiveFlag.pinchZoom | InteractiveFlag.drag, - plugins: [LocationMarkerPlugin(),] - ), - children: [ - TileLayerWidget( - options: TileLayerOptions( - urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - subdomains: ['a', 'b', 'c'], - ), - ), - PolylineLayerWidget( - options: PolylineLayerOptions( - polylines: [ - Polyline( - points: getPoints()!, - strokeWidth: 4.0, - color: Colors.purple), - ], - ), - ), - // PopupMarkerLayerWidget( - // options: PopupMarkerLayerOptions( - // popupController: _popupLayerController, - // markers: _markers, - // markerRotateAlignment: - // PopupMarkerLayerOptions.rotationAlignmentFor(AnchorAlign.top), - // popupBuilder: (BuildContext context, Marker marker) => - - // examplePopup(marker), - // ), - // ), - MarkerLayerWidget( - options: MarkerLayerOptions( - markers: getMarkers()! - ), - ) - ], - - ) + Stack( + children: [ + indexController.is_rog_mapcontroller_loaded.value == false ? + Center(child: CircularProgressIndicator()) + : + BreadCrumbWidget(mapController:indexController.rogMapController), + Padding( + padding: const EdgeInsets.only(top:50.0), + //child: TravelMap(), + child: + TravelMap(), + ) + ], + ) )); } + + FlutterMap TravelMap() { + return FlutterMap( + options: MapOptions( + onMapCreated: (c){ + indexController.rogMapController = c; + indexController.rogMapController!.onReady.then((_) { + indexController.is_rog_mapcontroller_loaded.value = true; + subscription = indexController.rogMapController!.mapEventStream.listen((MapEvent mapEvent) { + if (mapEvent is MapEventMoveStart) { + //print(DateTime.now().toString() + ' [MapEventMoveStart] START'); + // do something + } + if (mapEvent is MapEventMoveEnd) { + //print(DateTime.now().toString() + ' [MapEventMoveStart] END'); + //indexController.loadLocationsBound(); + } + }); + }); + } , + bounds: indexController.currentBound.length > 0 ? indexController.currentBound[0]: LatLngBounds.fromPoints([LatLng(35.03999881162295, 136.40587119778962), LatLng(36.642756778706904, 137.95226720406063)]), + zoom: 1, + maxZoom: 20, + interactiveFlags: InteractiveFlag.pinchZoom | InteractiveFlag.drag, + plugins: [LocationMarkerPlugin(),] + ), + children: [ + TileLayerWidget( + options: TileLayerOptions( + urlTemplate: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', + subdomains: ['a', 'b', 'c'], + ), + ), + PolylineLayerWidget( + options: PolylineLayerOptions( + polylines: [ + Polyline( + points: getPoints()!, + strokeWidth: 4.0, + color: Colors.purple), + ], + ), + ), + // PopupMarkerLayerWidget( + // options: PopupMarkerLayerOptions( + // popupController: _popupLayerController, + // markers: _markers, + // markerRotateAlignment: + // PopupMarkerLayerOptions.rotationAlignmentFor(AnchorAlign.top), + // popupBuilder: (BuildContext context, Marker marker) => + + // examplePopup(marker), + // ), + // ), + MarkerLayerWidget( + options: MarkerLayerOptions( + markers: getMarkers()! + ), + ) + ], + + ); + } } \ No newline at end of file diff --git a/lib/pages/home/home_binding.dart b/lib/pages/home/home_binding.dart new file mode 100644 index 0000000..9e044a2 --- /dev/null +++ b/lib/pages/home/home_binding.dart @@ -0,0 +1,12 @@ + + +import 'package:get/get.dart'; +import 'package:rogapp/pages/home/home_controller.dart'; + +class HomeBinding extends Bindings{ + @override + void dependencies() { + Get.put(HomeController()); + } + +} \ No newline at end of file diff --git a/lib/pages/home/home_controller.dart b/lib/pages/home/home_controller.dart new file mode 100644 index 0000000..7d8b09e --- /dev/null +++ b/lib/pages/home/home_controller.dart @@ -0,0 +1,7 @@ + +import 'package:get/get.dart'; +import 'package:get/get_state_manager/get_state_manager.dart'; + +class HomeController extends GetxController{ + +} \ No newline at end of file diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart new file mode 100644 index 0000000..d563f2a --- /dev/null +++ b/lib/pages/home/home_page.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:rogapp/pages/search/search_page.dart'; + +class HomePage extends GetView{ + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: Colors.white, + title: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text("app_title".tr, + style: const TextStyle( + color: Colors.blue + ), + ), + InkWell( + onTap: (){ + Navigator.push(context, MaterialPageRoute(builder: (context) => const SearchPage())); + }, + child: Container( + height: 32, + width: 75, + decoration: BoxDecoration( + color: Colors.blue, + borderRadius: BorderRadius.circular(25), + + ), + child: const Center(child: Icon(Icons.search),), + ), + ), + ], + ), + ), + body: Container(), + ); + } + +} \ No newline at end of file diff --git a/lib/pages/index/index_controller.dart b/lib/pages/index/index_controller.dart index b563f84..d3db1e2 100644 --- a/lib/pages/index/index_controller.dart +++ b/lib/pages/index/index_controller.dart @@ -7,7 +7,9 @@ import 'package:flutter_polyline_points/flutter_polyline_points.dart'; import 'package:geojson/geojson.dart'; import 'package:get/get.dart'; import 'package:latlong2/latlong.dart'; +import 'package:rogapp/model/destination.dart'; import 'package:rogapp/pages/destination/destination_binding.dart'; +import 'package:rogapp/pages/destination/destination_controller.dart'; import 'package:rogapp/pages/destination/destination_page.dart'; import 'package:rogapp/pages/destination_map/destination_map_page.dart'; import 'package:rogapp/routes/app_pages.dart'; @@ -16,10 +18,12 @@ import 'package:rogapp/services/auth_service.dart'; import 'package:rogapp/services/cat_service.dart'; import 'package:rogapp/services/location_service.dart'; import 'package:rogapp/services/perfecture_service.dart'; +import 'package:rogapp/utils/database_helper.dart'; class IndexController extends GetxController { List locations = [].obs; List currentFeature = [].obs; + List currentDestinationFeature = [].obs; List perfectures = [].obs; List currentBound = [].obs; List subPerfs = [].obs; @@ -35,14 +39,17 @@ class IndexController extends GetxController { var is_loading = false.obs; + var is_mapController_loaded = false.obs; + var is_rog_mapcontroller_loaded = false.obs; + MapController? mapController; MapController? rogMapController; var mode = 0.obs; - var rog_mode = 0.obs; + var rog_mode = 1.obs; - var desination_mode = 0.obs; + var desination_mode = 1.obs; String dropdownValue = "9"; @@ -74,13 +81,14 @@ class IndexController extends GetxController { switch (page) { case AppPages.INITIAL :{ rog_mode.value = 0; + print("-- rog mode is ctrl is ${rog_mode.value}"); Get.toNamed(page); } break; case AppPages.TRAVEL : { rog_mode.value = 1; - Get.toNamed(page); - //Get.off(DestinationPage(), binding: DestinationBinding()); + //Get.back(); + Get.off(DestinationPage(), binding: DestinationBinding()); } break; @@ -161,7 +169,13 @@ void login(String email, String password, BuildContext context){ if(currentFeature.isNotEmpty){ getAction(); } - Get.toNamed(AppPages.INITIAL); + if(rog_mode.value == 1){ + switchPage(AppPages.TRAVEL); + } + else{ + switchPage(AppPages.INITIAL); + } + //Get.toNamed(AppPages.INITIAL); }else{ is_loading.value = false; Get.snackbar( @@ -466,7 +480,13 @@ void login(String email, String password, BuildContext context){ } void makeNext(GeoJsonFeature fs){ - GeoJsonFeature pt = fs as GeoJsonFeature; + + if(rog_mode == 1){ + DestinationController destinationController = Get.find(); + print("---- destination index--- ${destinationController.destination_index_data} --------"); + } + else { + GeoJsonFeature pt = fs as GeoJsonFeature; for(int i=0; i<= locations[0].collection.length - 1; i++){ GeoJsonMultiPoint p = locations[0].collection[i].geometry as GeoJsonMultiPoint; @@ -486,34 +506,43 @@ void login(String email, String password, BuildContext context){ } } } + } + + } void makePrevious(GeoJsonFeature fs){ - GeoJsonFeature pt = fs as GeoJsonFeature; - for(int i=0; i<= locations[0].collection.length - 1; i++){ - GeoJsonMultiPoint p = locations[0].collection[i].geometry as GeoJsonMultiPoint; + if(rog_mode == 1){ + DestinationController destinationController = Get.find(); + print("---- destination index--- ${destinationController.destination_index_data} --------"); + } + else { - if(p.geoSerie!.geoPoints[0].latitude == pt.geometry!.geoSerie!.geoPoints[0].latitude && p.geoSerie!.geoPoints[0].longitude == pt.geometry!.geoSerie!.geoPoints[0].longitude ){ - - if(currentFeature.length > 0){ - currentFeature.clear(); - } - if(i == 0 ){ - currentFeature.add(locations[0].collection[locations[0].collection.length -1] as GeoJsonFeature); - getAction(); - } - else{ - currentFeature.add(locations[0].collection[i - 1] as GeoJsonFeature); - getAction(); - } + GeoJsonFeature pt = fs as GeoJsonFeature; + + for(int i=0; i<= locations[0].collection.length - 1; i++){ + GeoJsonMultiPoint p = locations[0].collection[i].geometry as GeoJsonMultiPoint; + + if(p.geoSerie!.geoPoints[0].latitude == pt.geometry!.geoSerie!.geoPoints[0].latitude && p.geoSerie!.geoPoints[0].longitude == pt.geometry!.geoSerie!.geoPoints[0].longitude ){ + + if(currentFeature.length > 0){ + currentFeature.clear(); + } + if(i == 0 ){ + currentFeature.add(locations[0].collection[locations[0].collection.length -1] as GeoJsonFeature); + getAction(); + } + else{ + currentFeature.add(locations[0].collection[i - 1] as GeoJsonFeature); + getAction(); + } + } } } - } - } \ No newline at end of file diff --git a/lib/pages/index/index_page.dart b/lib/pages/index/index_page.dart index 95650d0..b98a47c 100644 --- a/lib/pages/index/index_page.dart +++ b/lib/pages/index/index_page.dart @@ -23,8 +23,14 @@ class IndexPage extends GetView { return Scaffold( drawer: const DrawerPage(), appBar: AppBar( + leading: IconButton( + icon: Icon(Icons.arrow_back_ios), + onPressed: (){ + indexController.switchPage(AppPages.TRAVEL); + }, + ), automaticallyImplyLeading: false, - title: Text("app_title".tr), + title: Text("Add locations"), actions: [ CatWidget(indexController: indexController,), ], @@ -36,14 +42,7 @@ class IndexPage extends GetView { Expanded(child: IconButton(icon: const Icon(Icons.camera_enhance), onPressed: (){},),), const Expanded(child: Text('')), Expanded(child: IconButton(icon: const Icon(Icons.travel_explore), onPressed: (){ - if(indexController.currentUser.isNotEmpty){ - indexController.switchPage(AppPages.TRAVEL); - //Get.toNamed(AppPages.TRAVEL); - } - else{ - indexController.switchPage(AppPages.LOGIN); - //Get.toNamed(AppPages.LOGIN); - } + indexController.switchPage(AppPages.TRAVEL); }),), ], ), @@ -71,12 +70,15 @@ class IndexPage extends GetView { height: 50.0, child: SingleChildScrollView( scrollDirection: Axis.horizontal, - child: Row( + child: Obx(() => + Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - BreadCrumbWidget(), + indexController.is_mapController_loaded.value == false ? + Center(child: CircularProgressIndicator()) + : + BreadCrumbWidget(mapController: indexController.mapController), Container(width: 24.0,), - Obx(()=> Row( children: [ indexController.currentCat.isNotEmpty ? Text(indexController.currentCat[0].toString()): Text(""), @@ -91,8 +93,8 @@ class IndexPage extends GetView { Container(width: 0, height: 0,) ], ) - ), ], + ) ), ), ), diff --git a/lib/pages/search/search_page.dart b/lib/pages/search/search_page.dart new file mode 100644 index 0000000..4622277 --- /dev/null +++ b/lib/pages/search/search_page.dart @@ -0,0 +1,25 @@ + + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class SearchPage extends StatelessWidget { + const SearchPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + elevation: 0, + backgroundColor: Colors.white, + leading: IconButton( + onPressed:(){ + Navigator.pop(context); + }, + icon: const Icon(Icons.arrow_back_ios_new, color: Colors.black,)), + title: const CupertinoSearchTextField(), + + ), + ); + } +} \ No newline at end of file diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index 9bc6426..304b115 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -2,6 +2,8 @@ import 'package:get/get.dart'; import 'package:get/get_navigation/src/routes/get_route.dart'; import 'package:rogapp/pages/destination/destination_binding.dart'; import 'package:rogapp/pages/destination/destination_page.dart'; +import 'package:rogapp/pages/home/home_binding.dart'; +import 'package:rogapp/pages/home/home_page.dart'; import 'package:rogapp/pages/index/index_binding.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/pages/index/index_page.dart'; @@ -27,6 +29,7 @@ class AppPages { static const TRAVEL = Routes.TRAVEL; static const LOADING = Routes.LOADING; static const DESTINATION_MAP = Routes.DESTINATION_MAP; + static const HOME = Routes.HOME; static final routes = [ // GetPage( @@ -42,7 +45,7 @@ class AppPages { GetPage( name: Routes.INDEX, page: () => IndexPage(), - binding: IndexBinding(), + //binding: IndexBinding(), ), GetPage( name: Routes.SPA, @@ -79,5 +82,10 @@ class AppPages { page: () => DestinationPage(), //binding: DestinationBinding(), ), + GetPage( + name: Routes.HOME, + page: () => HomePage(), + binding: HomeBinding(), + ), ]; } \ No newline at end of file diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index 98a872c..965b042 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -14,4 +14,5 @@ abstract class Routes { static const TRAVEL = '/travel'; static const LOADING = '/loading'; static const DESTINATION_MAP = '/destination_map'; + static const HOME = '/home'; } diff --git a/lib/services/destination_service.dart b/lib/services/destination_service.dart index 9ecc2cd..ae86711 100644 --- a/lib/services/destination_service.dart +++ b/lib/services/destination_service.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutter_polyline_points/flutter_polyline_points.dart'; //import 'package:google_maps_webservice/directions.dart'; import 'package:http/http.dart' as http; +import 'package:rogapp/model/destination.dart'; import '../utils/const.dart'; @@ -49,6 +50,7 @@ class DestinationService{ int cats = 0; String server_url = ConstValues.currentServer(); String url = "${server_url}/api/updateorder/?user_action_id=${action_id}&order=${order}&dir=${dir}"; + print("---- url is ${url} -----"); //String url = "http://localhost:8100/api/updateorder/?user_action_id=${action_id}&order=${order}&dir=${dir}"; final http.Response response = await http.get( Uri.parse(url), @@ -63,12 +65,12 @@ class DestinationService{ return cats; } - static Future>? getDestinationLine(List destinations) async{ + static Future>? getDestinationLine(List destinations) async{ PolylinePoints polylinePoints = PolylinePoints(); - //print("##### @@@@@ ${destinations[0]["location"]["geometry"]["coordinates"][0][1]}"); - PointLatLng origin = PointLatLng(destinations[0]["location"]["geometry"]["coordinates"][0][1], destinations[0]["location"]["geometry"]["coordinates"][0][0]); - PointLatLng dest = PointLatLng(destinations[destinations.length -1]["location"]["geometry"]["coordinates"][0][1], destinations[destinations.length -1]["location"]["geometry"]["coordinates"][0][0]); + print("##### @@@@@ ${destinations[0].lat}"); + PointLatLng origin = PointLatLng(destinations[0].lat!, destinations[0].lon!); + PointLatLng dest = PointLatLng(destinations[destinations.length -1].lat!, destinations[destinations.length -1].lon!); List wayPoints = []; @@ -78,8 +80,8 @@ class DestinationService{ i+=1; continue; } - double la = d["location"]["geometry"]["coordinates"][0][1]as double; - double ln = d["location"]["geometry"]["coordinates"][0][0] as double; + double la = d.lat; + double ln = d.lon; PolylineWayPoint pwp = PolylineWayPoint(location: "${la},${ln}", stopOver: true); //print("----- UUUUUU ${pwp}"); //PointLatLng wp = PointLatLng(d["Location"]["geometry"][0][1], d["Location"]["geometry"][0][0]); diff --git a/lib/services/maxtrix_service.dart b/lib/services/maxtrix_service.dart index 16af169..5c7c168 100644 --- a/lib/services/maxtrix_service.dart +++ b/lib/services/maxtrix_service.dart @@ -1,23 +1,24 @@ import 'dart:convert'; import 'package:http/http.dart' as http; +import 'package:rogapp/model/destination.dart'; class MatrixService{ - static Future> getDestinations(List destinations) async { + static Future> getDestinations(List destinations) async { String locs = ""; String origin = ""; int i = 0; - for(Map loc in destinations){ + for(Destination d in destinations){ if(i==0){ - origin = "${loc["location"]["geometry"]["coordinates"][0][1]}, ${loc["location"]["geometry"]["coordinates"][0][0]}"; + origin = "${d.lat}, ${d.lon}"; } - print("lat is ${loc["location"]["geometry"]["coordinates"][0][1]}, long is ${loc["location"]["geometry"]["coordinates"][0][0]}"); - locs += "${loc["location"]["geometry"]["coordinates"][0][1]}, ${loc["location"]["geometry"]["coordinates"][0][0]}|"; + print("lat is ${d.lat}, long is ${d.lon}"); + locs += "${d.lat}, ${d.lon}|"; i++; } diff --git a/lib/utils/database_helper.dart b/lib/utils/database_helper.dart new file mode 100644 index 0000000..3004752 --- /dev/null +++ b/lib/utils/database_helper.dart @@ -0,0 +1,87 @@ +import 'dart:io'; +import 'package:path_provider/path_provider.dart'; +import 'package:rogapp/model/destination.dart'; +import 'package:sqflite/sqflite.dart'; +import 'package:path/path.dart'; + +class DatabaseHelper{ + DatabaseHelper._privateConstructor(); + static final DatabaseHelper instance = DatabaseHelper._privateConstructor(); + + static Database? _database; + Future get database async => _database ??= await _initDatabase(); + + Future _initDatabase() async { + Directory documentDirectory = await getApplicationDocumentsDirectory(); + String path = join(documentDirectory.path, 'rog.db'); + // return await openDatabase( + // path, + // version: 1, + // onCreate: _onCreate, + // ); + return openDatabase(join(await getDatabasesPath(), 'rog.db',), version: 1, onCreate: _onCreate); + } + + Future _onCreate(Database db, int version) async { + await db.execute(''' + CREATE TABLE destination( + location_id INTEGER PRIMARY KEY, + name TEXT, + address TEXT, + phone TEXT, + email TEXT, + webcontents TEXT, + videos TEXT, + category TEXT, + series INTEGER, + lat REAL, + lon REAL, + list_order INTEGER, + photos TEXT, + checkin_radious REAL, + auto_checkin INTEGER + ) + '''); + } + + Future> getDestinations() async { + Database db = await instance.database; + var dest = await db.query('destination'); + List destList = dest.isNotEmpty ? + dest.map((e) => Destination.fromMap(e)).toList() : []; + print("--------- ${destList}"); + return destList; + } + + Future> getDestinationByLatLon(double lat, double lon) async { + Database db = await instance.database; + var dest = await db.query('destination', where: "lat = ${lat} and lon= ${lon}"); + List destList = dest.isNotEmpty + ? dest.map((e) => Destination.fromMap(e)).toList() : []; + return destList; + } + + Future deleteDestination(int location_id) async { + Database db = await instance.database; + var dest = await db.delete('destination', where: "location_id = ${location_id}"); + int ret = dest > 0 ? dest : -1; + return ret; + } + + Future insertDestination(Destination dest) async { + Database db = await instance.database; + int res = await db.insert( + 'destination', + dest.toMap(), + conflictAlgorithm: ConflictAlgorithm.replace, + ); + return res; + } + + // Future getPending() async{ + // Database db = await instance.database; + // return await Sqflite.firstIntValue(await db.rawQuery("SELECT COUNT(*) FROM incidents")); + // } + +} + diff --git a/lib/widgets/bottom_sheet_new.dart b/lib/widgets/bottom_sheet_new.dart index 1a18e10..980a670 100644 --- a/lib/widgets/bottom_sheet_new.dart +++ b/lib/widgets/bottom_sheet_new.dart @@ -3,8 +3,12 @@ import 'package:geojson/geojson.dart'; import 'package:get/get.dart'; import 'package:get/get_state_manager/get_state_manager.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:latlong2/latlong.dart'; +import 'package:rogapp/model/destination.dart'; +import 'package:rogapp/pages/destination/destination_controller.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/routes/app_pages.dart'; +import 'package:rogapp/utils/database_helper.dart'; import 'package:rogapp/widgets/bottom_sheet_controller.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -12,6 +16,7 @@ class BottomSheetNew extends GetView { BottomSheetNew({ Key? key }) : super(key: key); final IndexController indexController = Get.find(); + final DestinationController destinationController = Get.find(); Image getImage(GeoJsonFeature? gf){ if(gf!.properties!["photos"] == null || gf.properties!["photos"] == ""){ @@ -70,6 +75,7 @@ class BottomSheetNew extends GetView { ), MaterialButton( onPressed: () { + print("----- next is ${indexController.currentFeature[0]} ------"); indexController.makeNext(indexController.currentFeature[0]); }, color: Colors.blue, @@ -125,15 +131,10 @@ class BottomSheetNew extends GetView { : Container(width: 0.0, height: 0,), ), - Obx(() => - indexController.rog_mode.value == 0 ? - indexController.currentAction.isNotEmpty ? - getDoubleAction(context) - : - getSingleAction() - : - getCheckin(context), - ), + SizedBox(height: 20.0,), + //Obx(() => + wantToGo(context), + //), SizedBox(height: 60.0,) ], ) @@ -141,7 +142,57 @@ class BottomSheetNew extends GetView { ); } + + Widget wantToGo(BuildContext context){ + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ElevatedButton( + onPressed: (){ + }, + + child: IconButton( + icon: Icon(Icons.favorite, color: Colors.white, semanticLabel: "want_to_go".tr,), + onPressed: () + { + GeoJsonMultiPoint mp = indexController.currentFeature[0].geometry as GeoJsonMultiPoint; + LatLng pt = LatLng(mp.geoSerie!.geoPoints[0].latitude, mp.geoSerie!.geoPoints[0].longitude); + + print("--- name---- ${indexController.currentFeature[0].properties!["location_name"]} -----"); + Destination dest = Destination( + name: indexController.currentFeature[0].properties!["location_name"], + address: indexController.currentFeature[0].properties!["address"], + phone: indexController.currentFeature[0].properties!["phone"], + email: indexController.currentFeature[0].properties!["email"], + webcontents: indexController.currentFeature[0].properties!["webcontents"], + videos: indexController.currentFeature[0].properties!["videos"], + category: indexController.currentFeature[0].properties!["category"], + series: 1, + lat: pt.latitude, + lon: pt.longitude, + location_id: indexController.currentFeature[0].properties!["location_id"], + list_order: 1, + photos: indexController.currentFeature[0].properties!["photos"], + checkin_radious: indexController.currentFeature[0].properties!["checkin_radious"], + auto_checkin: indexController.currentFeature[0].properties!["auto_checkin"] == true ? 1 : 0 + ); + destinationController.addDestinations(dest); + }, + ) + ), + ], + ) + ], + ); + } + Widget getCheckin(BuildContext context){ + + print("------ currentAction ----- ${indexController.currentAction}-----"); + return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ diff --git a/lib/widgets/bread_crum_widget.dart b/lib/widgets/bread_crum_widget.dart index 56e6ced..6b8e784 100644 --- a/lib/widgets/bread_crum_widget.dart +++ b/lib/widgets/bread_crum_widget.dart @@ -1,25 +1,34 @@ import 'package:flutter/material.dart'; +import 'package:flutter_map/flutter_map.dart'; import 'package:get/get.dart'; import 'package:flutter_breadcrumb/flutter_breadcrumb.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/widgets/perfecture_widget.dart'; class BreadCrumbWidget extends StatelessWidget { - BreadCrumbWidget({Key? key}) : super(key: key); + BreadCrumbWidget({Key? key, this.mapController}) : super(key: key); + + final MapController? mapController; final IndexController indexController = Get.find(); + @override Widget build(BuildContext context) { - return Obx(()=> indexController.perfectures.isNotEmpty ? - BreadCrumb.builder( - itemCount: indexController.perfectures.length, - builder: (index){ - return BreadCrumbItem( - content: PerfectureWidget(indexController: indexController, mapController: indexController.mapController!) //Text('Item$index') - ); - } - ): - const Text("Empty")); + print("------ map controller is ${mapController}------------"); + return + Obx(()=> + indexController.perfectures.isNotEmpty && mapController != null ? + BreadCrumb.builder( + itemCount: indexController.perfectures.length, + builder: (index){ + return + BreadCrumbItem( + content: PerfectureWidget(indexController: indexController, mapController: mapController!) //Text('Item$index') + ); + } + ): + const Text("Empty") + ); } } \ No newline at end of file diff --git a/lib/widgets/destination_widget.dart b/lib/widgets/destination_widget.dart index ae48731..f5c91d3 100644 --- a/lib/widgets/destination_widget.dart +++ b/lib/widgets/destination_widget.dart @@ -3,6 +3,7 @@ import 'dart:ffi'; import 'package:flutter/material.dart'; import 'package:geojson/geojson.dart'; import 'package:get/get.dart'; +import 'package:rogapp/model/destination.dart'; import 'package:rogapp/pages/destination/destination_controller.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/widgets/bottom_sheet_new.dart'; @@ -19,12 +20,12 @@ class DestinationWidget extends StatelessWidget { final List _items = List.generate(50, (int index) => index); Image getImage(int index){ - if(destinationController.destinations[index]["location"]["properties"]["photos"] == null || destinationController.destinations[index]["location"]["properties"]["photos"] == ""){ + if(destinationController.destinations[index].photos== null || destinationController.destinations[index].photos == ""){ return Image(image: AssetImage('assets/images/empty_image.png')); } else{ return Image(image: NetworkImage( - destinationController.destinations[index]["location"]["properties"]["photos"]), + destinationController.destinations[index].photos!), errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) { return Image.asset("assets/images/empty_image.png"); }, @@ -56,31 +57,34 @@ class DestinationWidget extends StatelessWidget { void moveUp() { destinationController.destination_index_data.forEach((element) { //print(element["index"]); - int action_id = destinationController.destinations[element["index"]]["id"] as int; - destinationController.makeOrder(action_id, (element["index"] as int) - 1, "up"); + //int action_id = destinationController.destinations[element["index"]]["id"] as int; + //destinationController.makeOrder(action_id, (element["index"] as int) - 1, "up"); }); } void moveDown() { destinationController.destination_index_data.forEach((element) { //print(element["index"]); - int action_id = destinationController.destinations[element["index"]]["id"] as int; - destinationController.makeOrder(action_id, (element["index"] as int) + 1, "up"); + //int action_id = destinationController.destinations[element["index"]]["id"] as int; + //destinationController.makeOrder(action_id, (element["index"] as int) + 1, "up"); }); } void interChange() { - int first_index = -1; - destinationController.destination_index_data.forEach((element) { - //print(element["index"]); - int action_id = destinationController.destinations[element["index"]]["id"] as int; - destinationController.makeOrder(action_id, (element["index"] as int) + 1, "up"); + // int first_index = -1; + // destinationController.destination_index_data.forEach((element) { + // //print(element["index"]); + // int action_id = destinationController.destinations[element["index"]]["id"] as int; + // destinationController.makeOrder(action_id, (element["index"] as int) + 1, "up"); - }); + // }); } @override Widget build(BuildContext context) { + + print("---- destinations ${destinationController.destinations[0].name} ------"); + return Obx(() => Stack( @@ -119,16 +123,16 @@ class DestinationWidget extends StatelessWidget { child: ListTile( onTap: () async { { - double lat = destinationController.destinations[index]["location"]["geometry"]["coordinates"][0][1] as double; - double lon = destinationController.destinations[index]["location"]["geometry"]["coordinates"][0][0] as double; - GeoJsonFeature? fs = await destinationController.getDEstinationForLatLong(lat, lon); + double lat = destinationController.destinations[index].lat as double; + double lon = destinationController.destinations[index].lon as double; + Destination? fs = await destinationController.getDEstinationForLatLong(lat, lon); print("----fsf-----${fs}"); if(fs != null){ if(indexController.currentFeature.length > 0) { - indexController.currentFeature.clear(); + indexController.currentDestinationFeature.clear(); } - indexController.currentFeature.add(fs); - indexController.getAction(); + indexController.currentDestinationFeature.add(fs); + //indexController.getAction(); showModalBottomSheet(context: context, isScrollControlled: true, //builder:((context) => BottomSheetWidget()) @@ -159,8 +163,8 @@ class DestinationWidget extends StatelessWidget { selectedTileColor: Colors.amberAccent, selected:getSelection(index), leading: getImage(index), - title: Text(destinationController.destinations[index]["location"]["properties"]["location_name"]), - subtitle: Text(destinationController.destinations[index]["location"]["properties"]["category"]), + title: Text(destinationController.destinations[index].name!), + //subtitle: Text(destinationController.destinations[index].category!), ), ), ), diff --git a/lib/widgets/fake_search.dart b/lib/widgets/fake_search.dart new file mode 100644 index 0000000..8cc1777 --- /dev/null +++ b/lib/widgets/fake_search.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; +import 'package:rogapp/pages/search/search_page.dart'; + +class FakeSearch extends StatelessWidget { + const FakeSearch({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: (){ + Navigator.push(context, MaterialPageRoute(builder: (context) => const SearchPage())); + }, + child: Container( + height: 35, + decoration: BoxDecoration( + border: Border.all(color:Colors.blue, width: 1.4), + borderRadius: BorderRadius.circular(25) + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Padding( + padding: EdgeInsets.symmetric(horizontal: 8.0), + child: Icon(Icons.search, color: Colors.grey,), + ), + const Text("What are you looking for", style: TextStyle(fontSize: 16, color: Colors.grey),), + Container( + height: 32, + width: 75, + decoration: BoxDecoration( + color: Colors.blue, + borderRadius: BorderRadius.circular(25), + + ), + child: const Center(child: Text("Search", style: TextStyle(fontSize: 16, color: Colors.white),)), + ) + + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/widgets/map_widget.dart b/lib/widgets/map_widget.dart index 1b13274..b360a06 100644 --- a/lib/widgets/map_widget.dart +++ b/lib/widgets/map_widget.dart @@ -22,6 +22,9 @@ class MapWidget extends StatelessWidget { @override Widget build(BuildContext context) { + + print("---------- rog mode is ${indexController.rog_mode.value.toString()}----------"); + final PopupController _popupController = PopupController(); return Stack( children: [ @@ -37,6 +40,7 @@ class MapWidget extends StatelessWidget { indexController.mapController = c; indexController.mapController!.onReady.then((_) { + indexController.is_mapController_loaded.value = true; subscription = indexController.mapController!.mapEventStream.listen((MapEvent mapEvent) { if (mapEvent is MapEventMoveStart) { //print(DateTime.now().toString() + ' [MapEventMoveStart] START'); @@ -130,7 +134,7 @@ class MapWidget extends StatelessWidget { rotate: true, onMarkerTap: (marker){ GeoJsonFeature? fs = indexController.getFeatureForLatLong(marker.point.latitude, marker.point.longitude); - print(fs); + //print("------- fs ${fs}------"); if(fs != null){ if(indexController.currentFeature.length > 0) { indexController.currentFeature.clear(); diff --git a/lib/widgets/perfecture_widget.dart b/lib/widgets/perfecture_widget.dart index 8e0aa82..fdbfdbd 100644 --- a/lib/widgets/perfecture_widget.dart +++ b/lib/widgets/perfecture_widget.dart @@ -9,6 +9,7 @@ class PerfectureWidget extends StatefulWidget { IndexController indexController; MapController mapController; + PerfectureWidget({Key? key, required this.indexController, required this.mapController}) : super(key: key){ //indexController.zoomtoMainPerf("9", mapController); } @@ -19,6 +20,11 @@ class PerfectureWidget extends StatefulWidget { class _PerfectureWidgetState extends State { + @override + void initState() { + super.initState(); + } + bool isNumeric(String s) { if (s == null) { @@ -93,6 +99,7 @@ class _PerfectureWidgetState extends State { @override Widget build(BuildContext context) { + return Obx(() => Row( children: [