This commit is contained in:
Mohamed Nouffer
2022-05-25 21:00:10 +05:30
parent 3cb7865d3b
commit 56bb8556bb
4 changed files with 170 additions and 82 deletions

View File

@ -12,6 +12,7 @@ class DestinationController extends GetxController {
List<dynamic> destinations = <dynamic>[].obs; List<dynamic> destinations = <dynamic>[].obs;
List<Map<String, dynamic>> destination_index_data = <Map<String, dynamic>>[].obs; List<Map<String, dynamic>> destination_index_data = <Map<String, dynamic>>[].obs;
Map<String, dynamic> matrix = {}; Map<String, dynamic> matrix = {};
final IndexController indexController = Get.find<IndexController>(); final IndexController indexController = Get.find<IndexController>();
@ -22,6 +23,15 @@ class DestinationController extends GetxController {
super.onInit(); 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(){ void PopulateDestinations(){
if(indexController.currentUser.isNotEmpty){ if(indexController.currentUser.isNotEmpty){
int user_id = indexController.currentUser[0]["user"]["id"] as int; int user_id = indexController.currentUser[0]["user"]["id"] as int;

View File

@ -68,34 +68,6 @@ class _DestinationPageState extends State<DestinationPage> {
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
appBar:AppBar( appBar:AppBar(
title: Text("Iternery"), title: Text("Iternery"),
actions: [
PopupMenuButton(
icon: Icon(Icons.more_vert),
itemBuilder: (BuildContext context) => <PopupMenuEntry>[
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(() => body: Obx(() =>
indexController.desination_mode.value == 0 ? indexController.desination_mode.value == 0 ?

View File

@ -23,6 +23,23 @@ class DestinationService{
return cats; return cats;
} }
static Future<Map<String, dynamic>> deleteDestination(int dest_id) async {
Map<String, dynamic> 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: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
}
);
if (response.statusCode == 200) {
cats = json.decode(utf8.decode(response.bodyBytes));
}
print("####### ---- ${cats}");
return cats;
}
static Future<int> updateOrder(int action_id, int order, String dir) async { static Future<int> updateOrder(int action_id, int order, String dir) async {
int cats = 0; int cats = 0;
String url = "http://container.intranet.sumasen.net:8100/api/updateorder/?user_action_id=${action_id}&order=${order}&dir=${dir}"; String url = "http://container.intranet.sumasen.net:8100/api/updateorder/?user_action_id=${action_id}&order=${order}&dir=${dir}";

View File

@ -1,3 +1,5 @@
import 'dart:ffi';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:rogapp/pages/destination/destination_controller.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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return return
ReorderableListView.builder( 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");
// }
itemCount: destinationController.destinations.length, // },
onReorder: (int oldIndex, int newIndex){ itemBuilder: (BuildContext context, int index) {
int action_id = destinationController.destinations[oldIndex]["id"] as int; return
//print(action_id); TimelineTile(
if(oldIndex > newIndex){ alignment: TimelineAlign.manual,
destinationController.makeOrder(context, action_id, newIndex, "up"); lineXY: 0.2,
} isFirst: index == 0 ? true : false,
else if(oldIndex < newIndex){ indicatorStyle: IndicatorStyle(
destinationController.makeOrder(context, action_id, newIndex, "down"); 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;
itemBuilder: (BuildContext context, int index) { destinationController.destination_index_data.forEach((element) {
return TimelineTile( if(element["index"] == index){
alignment: TimelineAlign.manual, match_element = element;
lineXY: 0.2, print("----match----");
isFirst: index == 0 ? true : false, return;
indicatorStyle: IndicatorStyle( }
color: index == 0 ? (Colors.red) : (Colors.grey[400])! });
), if(match_element != null){
key: Key(index.toString()), destinationController.destination_index_data.remove(match_element);
endChild: Card( return;
child: Container( }
constraints: const BoxConstraints( //print("------${destinationController.destination_index_data}----");
minHeight: 80, Map<String, dynamic> indexed = {'index': index, 'selected':true};
), destinationController.destination_index_data.add(indexed);
child: ListTile( },
onLongPress: (){ selectedTileColor: Colors.amberAccent,
print("----- selected index ${index}"); selected:getSelection(index),
var el = destinationController.destination_index_data.where((element) => leading: getImage(index),
element["index"] == 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<String, dynamic> 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"]),
), ),
), ),
Container(
), decoration: BoxDecoration(
startChild: Column( boxShadow: [
mainAxisAlignment: MainAxisAlignment.spaceEvenly, BoxShadow(
children: [ color: Colors.grey.withOpacity(0.3),
Text(destinationController.matrix["rows"][0]["elements"][index]["distance"]["text"].toString()), spreadRadius: 5,
Text(destinationController.matrix["rows"][0]["elements"][index]["duration"]["text"].toString()) 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,
),
],
),
)
],
)
); );
}
);
} }
} }