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/utils/const.dart'; import 'package:rogapp/utils/database_helper.dart'; import 'package:rogapp/widgets/bottom_sheet_new.dart'; import 'package:rogapp/widgets/bottom_sheet_widget.dart'; import 'package:sqflite/sqlite_api.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].photos== null || destinationController.destinations[index].photos == ""){ return Image(image: AssetImage('assets/images/empty_image.png')); } else{ print("------- image is ${destinationController.destinations[index].photos!}------"); String _photo = destinationController.destinations[index].photos!; if(_photo.contains('http')){ return Image(image: NetworkImage( destinationController.destinations[index].photos!), errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) { return Image.asset("assets/images/empty_image.png"); }, ); } else { String server_url = ConstValues.currentServer(); //print("==== photo is ${server_url + '/media/compressed/' + destinationController.destinations[index].photos!} ==="); return Image(image: NetworkImage( '${server_url}/media/compressed/' + destinationController.destinations[index].photos!), errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) { return Image.asset("assets/images/empty_image.png"); }, ); } } } // 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.currentSelectedDestinations.forEach((element) { destinationController.deleteDestination(element); destinationController.resetRogaining(); }); // destinationController.destination_index_data.forEach((element) { // //print(element["index"]); // destinationController.deleteDestination(element["index"]); // }); // destinationController.destination_index_data.clear(); } void moveUp() { Destination? d = null; for(Destination ad in destinationController.destinations){ if(ad.selected == true){ d = ad; break; } } if(d != null){ print("--- selected destination is ${d.list_order}"); destinationController.makeOrder(d, -1); } } void moveDown() { Destination? d = null; for(Destination ad in destinationController.destinations){ if(ad.selected == true){ d = ad; break; } } if(d != null){ print("--- selected destination is ${d.list_order}"); destinationController.makeOrder(d, 1); } } void clearall(){ Get.defaultDialog( title: "are_you_sure_want_to_delete_all".tr, middleText: "all_added_destination_will_be_deleted".tr, backgroundColor: Colors.blue.shade300, titleStyle: TextStyle(color: Colors.white), middleTextStyle: TextStyle(color: Colors.white), textConfirm: "confirm".tr, textCancel: "cancel".tr, cancelTextColor: Colors.white, confirmTextColor: Colors.blue, buttonColor: Colors.white, barrierDismissible: false, radius: 10, content: Column( children: [ ], ), onConfirm: (){ destinationController.deleteAllDestinations(); Get.back(); Get.snackbar("deleted".tr, "all_destinations_are_deleted_successfully".tr); } ); } 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"); // }); } Future getIsLocationAvilable(int location_id) async { DatabaseHelper db = DatabaseHelper.instance; return await db.isAlreadyAvailable(location_id); } @override Widget build(BuildContext context) { print("------ destination widget------ ${destinationController.destinationCount.value} ----------"); return Obx(() => Stack( children: [ Padding( padding: const EdgeInsets.only(top:45.0), child: ListView.builder( itemCount: destinationController.destinationCount.value, itemBuilder: (BuildContext context, int index) { return TimelineTile( alignment: TimelineAlign.manual, lineXY: 0.2, isFirst: index == 0 ? true : false, indicatorStyle: IndicatorStyle( indicator: CircleAvatar( child: Text(destinationController.destinations[index].list_order.toString(), style: TextStyle(color: Colors.white),), backgroundColor: Colors.red, ), ), key: Key(index.toString()), endChild: Card( child: Container( constraints: const BoxConstraints( minHeight: 80, ), child: ListTile( onTap: () async { { Destination? fs = destinationController.destinations[index]; print("----fsf-----${index}"); if(fs != null){ if(indexController.currentDestinationFeature.isNotEmpty) { indexController.currentDestinationFeature.clear(); } indexController.currentDestinationFeature.add(fs); print("--- ndexController.currentDestinationFeature ----- ${ indexController.currentDestinationFeature[0].name} ----"); //indexController.getAction(); showModalBottomSheet(context: context, isScrollControlled: true, //builder:((context) => BottomSheetWidget()) builder:((context) => BottomSheetNew()) ); } }; }, onLongPress: (){ destinationController.toggleSelection(destinationController.destinations[index]); }, selectedTileColor: Colors.amberAccent, selected:destinationController.destinations[index].selected!, leading: getImage(index), title: Text(destinationController.destinations[index].name!), subtitle: Text(destinationController.destinations[index].category!), ), ), ), startChild: index > 0 && destinationController.matrix["routes"][0]["legs"] != null ? Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text(destinationController.matrix["routes"][0]["legs"][index -1]["distance"] != null ? destinationController.matrix["routes"][0]["legs"][index-1]["distance"]["text"].toString(): ''), Text(destinationController.matrix["routes"][0]["legs"][index -1]["duration"] != null ? destinationController.matrix["routes"][0]["legs"][index-1]["duration"]["text"].toString() : '') ], ): Container() , ); } ), ), 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.delete_forever), //onPressed: (){doDelete();}, onPressed: clearall, ), IconButton( icon:Icon(Icons.cancel), //onPressed: (){doDelete();}, onPressed: destinationController.currentSelectedDestinations.length > 0 ? doDelete : null, ), IconButton( icon:Icon(Icons.move_up), onPressed: destinationController.currentSelectedDestinations.length > 0 ? moveUp : null, ), IconButton( icon:Icon(Icons.move_down), onPressed: destinationController.currentSelectedDestinations.length > 0 ? moveDown : null, ), // IconButton( // icon:Icon(Icons.sync), // onPressed: destinationController.destination_index_data.length == 2 ? interChange : null, // ), ], ), ) ], ) ); } }