import 'dart:ffi'; import 'package:flutter/material.dart'; import 'package:geojson/geojson.dart'; import 'package:get/get.dart'; import 'package:rogapp/pages/destination/destination_controller.dart'; import 'package:rogapp/pages/index/index_controller.dart'; import 'package:rogapp/widgets/bottom_sheet_widget.dart'; import 'package:timeline_tile/timeline_tile.dart'; class DestinationWidget extends StatelessWidget { DestinationWidget({ Key? key }) : super(key: key); final DestinationController destinationController = Get.find(); final IndexController indexController = Get.find(); 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"] == ""){ return Image(image: AssetImage('assets/images/empty_image.png')); } else{ return Image(image: NetworkImage(destinationController.destinations[index]["location"]["properties"]["photos"])); } } bool getSelection(int index){ bool ret = false; destinationController.destination_index_data.forEach((element) { if(index == element["index"]){ if(element["selected"] == true){ ret = true; return; } } }); return ret; } void doDelete() { destinationController.destination_index_data.forEach((element) { //print(element["index"]); destinationController.deleteDestination(element["index"]); }); // destinationController.destination_index_data.clear(); } 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"); }); } 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"); }); } 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"); }); } @override Widget build(BuildContext context) { return Obx(() => Stack( children: [ Padding( padding: const EdgeInsets.only(top:45.0), child: ListView.builder( itemCount: destinationController.destinations.length, // onReorder: (int oldIndex, int newIndex){ // int action_id = destinationController.destinations[oldIndex]["id"] as int; // //print(action_id); // if(oldIndex > newIndex){ // destinationController.makeOrder(context, action_id, newIndex, "up"); // } // else if(oldIndex < newIndex){ // destinationController.makeOrder(context, action_id, newIndex, "down"); // } // }, itemBuilder: (BuildContext context, int index) { return TimelineTile( alignment: TimelineAlign.manual, lineXY: 0.2, isFirst: index == 0 ? true : false, indicatorStyle: IndicatorStyle( color: index == 0 ? (Colors.red) : (Colors.grey[400])! ), key: Key(index.toString()), endChild: Card( child: Container( constraints: const BoxConstraints( minHeight: 80, ), 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); print("----fsf-----${fs}"); if(fs != null){ if(indexController.currentFeature.length > 0) { indexController.currentFeature.clear(); } indexController.currentFeature.add(fs); indexController.getAction(); showModalBottomSheet(context: context, isScrollControlled: true, builder:((context) => BottomSheetWidget()) ); } }; }, onLongPress: (){ print("#### long press #### ${destinationController.destination_index_data.length}"); var match_element = null; destinationController.destination_index_data.forEach((element) { if(element["index"] == index){ match_element = element; print("----match----"); return; } }); if(match_element != null){ destinationController.destination_index_data.remove(match_element); return; } //print("------${destinationController.destination_index_data}----"); Map indexed = {'index': index, 'selected':true}; destinationController.destination_index_data.add(indexed); }, 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"]), ), ), ), startChild: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text(destinationController.matrix["rows"][0]["elements"][index]["distance"]["text"].toString()), Text(destinationController.matrix["rows"][0]["elements"][index]["duration"]["text"].toString()) ], ), ); } ), ), Container( decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.3), spreadRadius: 5, blurRadius: 3, offset: Offset(0, 7), // changes position of shadow ), ], ), height: 44.0, width: MediaQuery.of(context).size.width, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ IconButton( icon:Icon(Icons.cancel), //onPressed: (){doDelete();}, onPressed: destinationController.destination_index_data.length > 0 ? doDelete : null, ), IconButton( icon:Icon(Icons.move_up), onPressed: destinationController.destination_index_data.length > 0 ? moveUp : null, ), IconButton( icon:Icon(Icons.move_down), onPressed: destinationController.destination_index_data.length > 0 ? moveDown : null, ), IconButton( icon:Icon(Icons.sync), onPressed: destinationController.destination_index_data.length == 2 ? interChange : null, ), ], ), ) ], ) ); } }