diff --git a/lib/pages/home/home_controller.dart b/lib/pages/home/home_controller.dart index 847a17f..daffbc4 100644 --- a/lib/pages/home/home_controller.dart +++ b/lib/pages/home/home_controller.dart @@ -6,7 +6,8 @@ import 'package:rogapp/services/location_service.dart'; class HomeController extends GetxController { - List locations = [].obs; + List locations = [].obs; + List currentFeature = [].obs; @override @@ -19,13 +20,35 @@ class HomeController extends GetxController { GeoJsonFeature? getFeatureForLatLong(double lat, double long){ if(locations.length > 0){ - for(GeoJsonFeature i in locations[0].collection){ - GeoJsonMultiPoint p = i.geometry as GeoJsonMultiPoint; - if(p.geoSerie!.geoPoints[0].latitude == lat && p.geoSerie!.geoPoints[0].longitude == long){ - return i; + for(GeoJsonFeature i in locations[0].collection){ + GeoJsonMultiPoint p = i.geometry as GeoJsonMultiPoint; + if(p.geoSerie!.geoPoints[0].latitude == lat && p.geoSerie!.geoPoints[0].longitude == long){ + return i; + } + } + } + } + + void makeNext(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(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 >= locations[0].collection.length - 1 ){ + currentFeature.add(locations[0].collection[0] as GeoJsonFeature); + } + else{ + currentFeature.add(locations[0].collection[i + 1] as GeoJsonFeature); + } } } - } + } } \ No newline at end of file diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index b7da709..c4a90f6 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -16,6 +16,13 @@ class HomePage extends GetView { final HomeController homeController = Get.find(); + void changeCurrentFeature(GeoJsonFeature fs){ + if(homeController.currentFeature.length > 0){ + homeController.currentFeature.clear(); + } + homeController.currentFeature.add(fs); + } + Image getImage(int index){ if(homeController.locations[0].collection[index].properties!["photos"] == null || homeController.locations[0].collection[index].properties!["photos"] == ""){ return Image(image: AssetImage('assets/images/empty_image.png')); @@ -79,12 +86,11 @@ class HomePage extends GetView { child: ListTile( onTap: (){ GeoJsonFeature gf = homeController.locations[0].collection[index]; - - + changeCurrentFeature(gf); showModalBottomSheet( isScrollControlled: true, context: context, - builder: (context) => BottomSheetWidget(pt: gf), + builder: (context) => BottomSheetWidget(), ); }, leading: getImage(index), diff --git a/lib/pages/map/map_page.dart b/lib/pages/map/map_page.dart index b818d39..752fd73 100644 --- a/lib/pages/map/map_page.dart +++ b/lib/pages/map/map_page.dart @@ -86,11 +86,21 @@ class MapPage extends StatelessWidget { circleSpiralSwitchover: 12, maxClusterRadius: 20, rotate: true, - onMarkerTap: (marker) => showModalBottomSheet( - isScrollControlled: true, - context: context, - builder: (context) => BottomSheetWidget(pt: homeController.getFeatureForLatLong(marker.point.latitude, marker.point.longitude),), - ), + onMarkerTap: (marker){ + GeoJsonFeature? fs = homeController.getFeatureForLatLong(marker.point.latitude, marker.point.longitude); + print(fs); + if(fs != null){ + if(homeController.currentFeature.length > 0) { + homeController.currentFeature.clear(); + } + homeController.currentFeature.add(fs); + + showModalBottomSheet(context: context, isScrollControlled: true, + builder:((context) => BottomSheetWidget()) + ); + } + }, + size: Size(40, 40), anchor: AnchorPos.align(AnchorAlign.center), fitBoundsOptions: const FitBoundsOptions( diff --git a/lib/widgets/bottom_sheet_controller.dart b/lib/widgets/bottom_sheet_controller.dart new file mode 100644 index 0000000..08867d0 --- /dev/null +++ b/lib/widgets/bottom_sheet_controller.dart @@ -0,0 +1,18 @@ + + +import 'package:geojson/geojson.dart'; +import 'package:get/get_state_manager/get_state_manager.dart'; + +class BottomSheetController extends GetxController{ + + List? currentFeature = []; + + BottomSheetController({this.currentFeature}); + + @override + void onInit() { + super.onInit(); + } + + +} \ No newline at end of file diff --git a/lib/widgets/bottom_sheet_widget.dart b/lib/widgets/bottom_sheet_widget.dart index d3aac91..07dc56e 100644 --- a/lib/widgets/bottom_sheet_widget.dart +++ b/lib/widgets/bottom_sheet_widget.dart @@ -1,12 +1,21 @@ import 'package:flutter/material.dart'; import 'package:geojson/geojson.dart'; +import 'package:get/get.dart'; +import 'package:rogapp/pages/home/home_controller.dart'; class BottomSheetWidget extends StatelessWidget { //const BottomSheetWidget({ Key? key }, GeoJsonFeature? pt) : super(key: key); - GeoJsonFeature? pt; + final HomeController homeController = Get.find(); - BottomSheetWidget({this.pt}); + Image getImage(GeoJsonFeature? gf){ + if(gf!.properties!["photos"] == null || gf.properties!["photos"] == ""){ + return Image(image: AssetImage('assets/images/empty_image.png')); + } + else{ + return Image(image: NetworkImage(gf.properties!["photos"])); + } + } @override Widget build(BuildContext context) { @@ -32,23 +41,35 @@ class BottomSheetWidget extends StatelessWidget { height: 35.0, alignment: Alignment.center, color: Colors.black12, - child: Text(pt!.properties!["location_name"], style: TextStyle( + child: Obx(() => + Text(homeController.currentFeature[0].properties!["location_name"], style: TextStyle( fontSize: 18.0, fontWeight: FontWeight.bold, ), + ) ), ), ), IconButton( onPressed:(){ - //homeController.incidents.remove(incident); - Navigator.pop(context); - //popupController.hideAllPopups(); + print("next"); + homeController.makeNext(homeController.currentFeature[0]); }, icon: Icon(Icons.delete_outlined) ) ], ), + Row( + children: [ + Expanded( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Obx(() => getImage(homeController.currentFeature[0])), + ), + ), + SizedBox(width: 66.0,) + ], + ), ], ), )