From 56bb8556bb8726305ce8c40ac83c2abc33bdc403 Mon Sep 17 00:00:00 2001 From: Mohamed Nouffer Date: Wed, 25 May 2022 21:00:10 +0530 Subject: [PATCH] update --- .../destination/destination_controller.dart | 10 + lib/pages/destination/destination_page.dart | 28 --- lib/services/destination_service.dart | 17 ++ lib/widgets/destination_widget.dart | 197 +++++++++++++----- 4 files changed, 170 insertions(+), 82 deletions(-) diff --git a/lib/pages/destination/destination_controller.dart b/lib/pages/destination/destination_controller.dart index 74a7002..ddef6a2 100644 --- a/lib/pages/destination/destination_controller.dart +++ b/lib/pages/destination/destination_controller.dart @@ -12,6 +12,7 @@ class DestinationController extends GetxController { List destinations = [].obs; List> destination_index_data = >[].obs; + Map matrix = {}; final IndexController indexController = Get.find(); @@ -22,6 +23,15 @@ class DestinationController extends GetxController { super.onInit(); } + void deleteDestination(int index){ + int id = destinations[index]["id"]; + DestinationService.deleteDestination(id).then((val){ + destination_index_data.clear(); + PopulateDestinations(); + print("####### dest id : ${id}"); + }); + } + void PopulateDestinations(){ if(indexController.currentUser.isNotEmpty){ int user_id = indexController.currentUser[0]["user"]["id"] as int; diff --git a/lib/pages/destination/destination_page.dart b/lib/pages/destination/destination_page.dart index aa2c088..887015b 100644 --- a/lib/pages/destination/destination_page.dart +++ b/lib/pages/destination/destination_page.dart @@ -68,34 +68,6 @@ class _DestinationPageState extends State { floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, appBar:AppBar( title: Text("Iternery"), - actions: [ - PopupMenuButton( - icon: Icon(Icons.more_vert), - itemBuilder: (BuildContext context) => [ - const PopupMenuItem( - child: ListTile( - leading: Icon(Icons.cut), - title: Text('Cut'), - ), - ), - const PopupMenuItem( - child: ListTile( - leading: Icon(Icons.paste), - title: Text('Paste'), - ), - ), - const PopupMenuItem( - child: ListTile( - leading: Icon(Icons.delete), - title: Text('Delete'), - ), - ), - // const PopupMenuDivider(), - // const PopupMenuItem(child: Text('Item A')), - // const PopupMenuItem(child: Text('Item B')), - ], - ), - ], ), body: Obx(() => indexController.desination_mode.value == 0 ? diff --git a/lib/services/destination_service.dart b/lib/services/destination_service.dart index c66d6bb..efab9bf 100644 --- a/lib/services/destination_service.dart +++ b/lib/services/destination_service.dart @@ -23,6 +23,23 @@ class DestinationService{ return cats; } + static Future> deleteDestination(int dest_id) async { + Map cats = {}; + String url = "http://container.intranet.sumasen.net:8100/api/delete_destination/?dest_id=${dest_id}"; + final http.Response response = await http.get( + Uri.parse(url), + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + } + ); + + if (response.statusCode == 200) { + cats = json.decode(utf8.decode(response.bodyBytes)); + } + print("####### ---- ${cats}"); + return cats; + } + static Future updateOrder(int action_id, int order, String dir) async { int cats = 0; String url = "http://container.intranet.sumasen.net:8100/api/updateorder/?user_action_id=${action_id}&order=${order}&dir=${dir}"; diff --git a/lib/widgets/destination_widget.dart b/lib/widgets/destination_widget.dart index 92595e5..3cf68eb 100644 --- a/lib/widgets/destination_widget.dart +++ b/lib/widgets/destination_widget.dart @@ -1,3 +1,5 @@ +import 'dart:ffi'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:rogapp/pages/destination/destination_controller.dart'; @@ -22,66 +24,153 @@ class DestinationWidget extends StatelessWidget { } } + 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() { + + } + + void moveDown() { + + } + + void interChange() { + + } + @override Widget build(BuildContext context) { return - ReorderableListView.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( - onLongPress: (){ - print("----- selected index ${index}"); - var el = destinationController.destination_index_data.where((element) => - element["index"] == index + 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( + 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()) + ], + ), ); - if(el != null){ - destinationController.destination_index_data.remove(el); - } - print("------${el}---- index ${index}"); - Map indexed = {'index': index, 'selected':true}; - destinationController.destination_index_data.add(indexed); - }, - 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, + ), + ], + ), + ) + ], + ) ); - } - ); } } \ No newline at end of file