update
This commit is contained in:
@ -6,7 +6,8 @@ import 'package:rogapp/services/location_service.dart';
|
|||||||
|
|
||||||
class HomeController extends GetxController {
|
class HomeController extends GetxController {
|
||||||
|
|
||||||
List<GeoJsonFeatureCollection> locations = <GeoJsonFeatureCollection>[].obs;
|
List<GeoJsonFeatureCollection> locations = <GeoJsonFeatureCollection>[].obs;
|
||||||
|
List<GeoJsonFeature> currentFeature = <GeoJsonFeature>[].obs;
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -19,13 +20,35 @@ class HomeController extends GetxController {
|
|||||||
|
|
||||||
GeoJsonFeature? getFeatureForLatLong(double lat, double long){
|
GeoJsonFeature? getFeatureForLatLong(double lat, double long){
|
||||||
if(locations.length > 0){
|
if(locations.length > 0){
|
||||||
for(GeoJsonFeature i in locations[0].collection){
|
for(GeoJsonFeature i in locations[0].collection){
|
||||||
GeoJsonMultiPoint p = i.geometry as GeoJsonMultiPoint;
|
GeoJsonMultiPoint p = i.geometry as GeoJsonMultiPoint;
|
||||||
if(p.geoSerie!.geoPoints[0].latitude == lat && p.geoSerie!.geoPoints[0].longitude == long){
|
if(p.geoSerie!.geoPoints[0].latitude == lat && p.geoSerie!.geoPoints[0].longitude == long){
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void makeNext(GeoJsonFeature fs){
|
||||||
|
GeoJsonFeature<GeoJsonMultiPoint> pt = fs as GeoJsonFeature<GeoJsonMultiPoint>;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -16,6 +16,13 @@ class HomePage extends GetView<HomeController> {
|
|||||||
|
|
||||||
final HomeController homeController = Get.find<HomeController>();
|
final HomeController homeController = Get.find<HomeController>();
|
||||||
|
|
||||||
|
void changeCurrentFeature(GeoJsonFeature fs){
|
||||||
|
if(homeController.currentFeature.length > 0){
|
||||||
|
homeController.currentFeature.clear();
|
||||||
|
}
|
||||||
|
homeController.currentFeature.add(fs);
|
||||||
|
}
|
||||||
|
|
||||||
Image getImage(int index){
|
Image getImage(int index){
|
||||||
if(homeController.locations[0].collection[index].properties!["photos"] == null || homeController.locations[0].collection[index].properties!["photos"] == ""){
|
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'));
|
return Image(image: AssetImage('assets/images/empty_image.png'));
|
||||||
@ -79,12 +86,11 @@ class HomePage extends GetView<HomeController> {
|
|||||||
child: ListTile(
|
child: ListTile(
|
||||||
onTap: (){
|
onTap: (){
|
||||||
GeoJsonFeature gf = homeController.locations[0].collection[index];
|
GeoJsonFeature gf = homeController.locations[0].collection[index];
|
||||||
|
changeCurrentFeature(gf);
|
||||||
|
|
||||||
showModalBottomSheet(
|
showModalBottomSheet(
|
||||||
isScrollControlled: true,
|
isScrollControlled: true,
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => BottomSheetWidget(pt: gf),
|
builder: (context) => BottomSheetWidget(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
leading: getImage(index),
|
leading: getImage(index),
|
||||||
|
|||||||
@ -86,11 +86,21 @@ class MapPage extends StatelessWidget {
|
|||||||
circleSpiralSwitchover: 12,
|
circleSpiralSwitchover: 12,
|
||||||
maxClusterRadius: 20,
|
maxClusterRadius: 20,
|
||||||
rotate: true,
|
rotate: true,
|
||||||
onMarkerTap: (marker) => showModalBottomSheet(
|
onMarkerTap: (marker){
|
||||||
isScrollControlled: true,
|
GeoJsonFeature? fs = homeController.getFeatureForLatLong(marker.point.latitude, marker.point.longitude);
|
||||||
context: context,
|
print(fs);
|
||||||
builder: (context) => BottomSheetWidget(pt: homeController.getFeatureForLatLong(marker.point.latitude, marker.point.longitude),),
|
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),
|
size: Size(40, 40),
|
||||||
anchor: AnchorPos.align(AnchorAlign.center),
|
anchor: AnchorPos.align(AnchorAlign.center),
|
||||||
fitBoundsOptions: const FitBoundsOptions(
|
fitBoundsOptions: const FitBoundsOptions(
|
||||||
|
|||||||
18
lib/widgets/bottom_sheet_controller.dart
Normal file
18
lib/widgets/bottom_sheet_controller.dart
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import 'package:geojson/geojson.dart';
|
||||||
|
import 'package:get/get_state_manager/get_state_manager.dart';
|
||||||
|
|
||||||
|
class BottomSheetController extends GetxController{
|
||||||
|
|
||||||
|
List<GeoJsonFeature>? currentFeature = <GeoJsonFeature>[];
|
||||||
|
|
||||||
|
BottomSheetController({this.currentFeature});
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
super.onInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,12 +1,21 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:geojson/geojson.dart';
|
import 'package:geojson/geojson.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:rogapp/pages/home/home_controller.dart';
|
||||||
|
|
||||||
class BottomSheetWidget extends StatelessWidget {
|
class BottomSheetWidget extends StatelessWidget {
|
||||||
//const BottomSheetWidget({ Key? key }, GeoJsonFeature? pt) : super(key: key);
|
//const BottomSheetWidget({ Key? key }, GeoJsonFeature? pt) : super(key: key);
|
||||||
|
|
||||||
GeoJsonFeature? pt;
|
final HomeController homeController = Get.find<HomeController>();
|
||||||
|
|
||||||
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
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -32,23 +41,35 @@ class BottomSheetWidget extends StatelessWidget {
|
|||||||
height: 35.0,
|
height: 35.0,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
color: Colors.black12,
|
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,
|
fontSize: 18.0,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
|
)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed:(){
|
onPressed:(){
|
||||||
//homeController.incidents.remove(incident);
|
print("next");
|
||||||
Navigator.pop(context);
|
homeController.makeNext(homeController.currentFeature[0]);
|
||||||
//popupController.hideAllPopups();
|
|
||||||
},
|
},
|
||||||
icon: Icon(Icons.delete_outlined)
|
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,)
|
||||||
|
],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user