Files
rog_app/lib/widgets/destination_widget.dart
Mohamed Nouffer eea432c3c7 update
2022-06-04 20:16:29 +05:30

192 lines
7.8 KiB
Dart

import 'dart:ffi';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:timeline_tile/timeline_tile.dart';
class DestinationWidget extends StatelessWidget {
DestinationWidget({ Key? key }) : super(key: key);
final DestinationController destinationController = Get.find<DestinationController>();
final IndexController indexController = Get.find<IndexController>();
final List<int> _items = List<int>.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(
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<String, dynamic> 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,
),
],
),
)
],
)
);
}
}