You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
428 lines
6.0 KiB
428 lines
6.0 KiB
import 'package:flutter/material.dart';
|
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
|
|
|
class TankerOptionsDemo extends StatefulWidget {
|
|
|
|
@override
|
|
State<TankerOptionsDemo> createState() => _TankerOptionsDemoState();
|
|
|
|
}
|
|
|
|
class _TankerOptionsDemoState extends State<TankerOptionsDemo> {
|
|
|
|
GoogleMapController? mapController;
|
|
|
|
LatLng customerLocation =
|
|
LatLng(17.3850,78.4867);
|
|
|
|
String selectedTanker="TNK1";
|
|
|
|
List tankers=[
|
|
|
|
{
|
|
"id":"TNK1",
|
|
"lat":17.387,
|
|
"lng":78.489,
|
|
"distance":2.5,
|
|
"eta":15,
|
|
"status":"AVAILABLE"
|
|
},
|
|
|
|
{
|
|
"id":"TNK2",
|
|
"lat":17.381,
|
|
"lng":78.480,
|
|
"distance":5,
|
|
"eta":30,
|
|
"status":"ON_DELIVERY",
|
|
"availableIn":20
|
|
},
|
|
|
|
{
|
|
"id":"TNK3",
|
|
"lat":17.370,
|
|
"lng":78.470,
|
|
"distance":9,
|
|
"eta":50,
|
|
"status":"FAR"
|
|
}
|
|
|
|
];
|
|
|
|
Set<Marker> markers={};
|
|
|
|
@override
|
|
void initState(){
|
|
|
|
super.initState();
|
|
|
|
createMarkers();
|
|
|
|
}
|
|
|
|
void createMarkers(){
|
|
|
|
markers.add(
|
|
|
|
Marker(
|
|
|
|
markerId: MarkerId("customer"),
|
|
|
|
position: customerLocation,
|
|
|
|
infoWindow:
|
|
InfoWindow(title:"Delivery Location"),
|
|
|
|
icon: BitmapDescriptor.defaultMarkerWithHue(
|
|
BitmapDescriptor.hueBlue)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
for(var t in tankers){
|
|
|
|
BitmapDescriptor color;
|
|
|
|
if(t["status"]=="AVAILABLE"){
|
|
|
|
color=
|
|
BitmapDescriptor.defaultMarkerWithHue(
|
|
BitmapDescriptor.hueGreen);
|
|
|
|
}
|
|
|
|
else if(t["status"]=="ON_DELIVERY"){
|
|
|
|
color=
|
|
BitmapDescriptor.defaultMarkerWithHue(
|
|
BitmapDescriptor.hueOrange);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
color=
|
|
BitmapDescriptor.defaultMarkerWithHue(
|
|
BitmapDescriptor.hueRed);
|
|
|
|
}
|
|
|
|
markers.add(
|
|
|
|
Marker(
|
|
|
|
markerId: MarkerId(t["id"]),
|
|
|
|
position: LatLng(
|
|
t["lat"],
|
|
t["lng"]
|
|
),
|
|
|
|
infoWindow:
|
|
InfoWindow(
|
|
|
|
title:t["id"],
|
|
|
|
snippet:
|
|
"ETA ${t["eta"]} min"
|
|
|
|
),
|
|
|
|
icon:color
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
setState(() {});
|
|
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context){
|
|
|
|
return Scaffold(
|
|
|
|
appBar: AppBar(
|
|
|
|
title:
|
|
Text("Select Tanker"),
|
|
|
|
backgroundColor:
|
|
Colors.white,
|
|
|
|
),
|
|
|
|
body:
|
|
|
|
Column(
|
|
|
|
children:[
|
|
|
|
Container(
|
|
|
|
height:300,
|
|
|
|
child:
|
|
|
|
GoogleMap(
|
|
|
|
initialCameraPosition:
|
|
|
|
CameraPosition(
|
|
|
|
target:
|
|
customerLocation,
|
|
|
|
zoom:13
|
|
|
|
),
|
|
|
|
markers:markers,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child:
|
|
|
|
ListView(
|
|
|
|
children:
|
|
|
|
tankers.map((t){
|
|
|
|
return tankerCard(t);
|
|
|
|
}).toList(),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
bottomNavigationBar:
|
|
|
|
Container(
|
|
|
|
padding:EdgeInsets.all(12),
|
|
|
|
child:
|
|
|
|
ElevatedButton(
|
|
|
|
style:
|
|
|
|
ElevatedButton.styleFrom(
|
|
|
|
backgroundColor:
|
|
Colors.green
|
|
|
|
),
|
|
|
|
onPressed:(){
|
|
|
|
Navigator.pop(context);
|
|
|
|
},
|
|
|
|
child:
|
|
|
|
Text("Confirm Selection")
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
Widget tankerCard(var tanker){
|
|
|
|
Color color;
|
|
|
|
if(tanker["status"]=="AVAILABLE"){
|
|
|
|
color=Colors.green;
|
|
|
|
}
|
|
|
|
else if(tanker["status"]=="ON_DELIVERY"){
|
|
|
|
color=Colors.orange;
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
color=Colors.red;
|
|
|
|
}
|
|
|
|
return GestureDetector(
|
|
|
|
onTap:(){
|
|
|
|
selectedTanker=tanker["id"];
|
|
|
|
setState(() {});
|
|
|
|
},
|
|
|
|
child:
|
|
|
|
Container(
|
|
|
|
margin:
|
|
EdgeInsets.all(10),
|
|
|
|
padding:
|
|
EdgeInsets.all(12),
|
|
|
|
decoration:
|
|
|
|
BoxDecoration(
|
|
|
|
borderRadius:
|
|
BorderRadius.circular(10),
|
|
|
|
border:
|
|
|
|
Border.all(
|
|
|
|
color:
|
|
|
|
selectedTanker==tanker["id"]
|
|
|
|
?
|
|
|
|
Colors.green
|
|
|
|
:
|
|
|
|
Colors.grey
|
|
|
|
),
|
|
|
|
),
|
|
|
|
child:
|
|
|
|
Column(
|
|
|
|
crossAxisAlignment:
|
|
CrossAxisAlignment.start,
|
|
|
|
children:[
|
|
|
|
Row(
|
|
|
|
children:[
|
|
|
|
Text(
|
|
|
|
tanker["id"],
|
|
|
|
style:
|
|
|
|
TextStyle(
|
|
|
|
fontSize:18,
|
|
|
|
fontWeight:
|
|
FontWeight.bold
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Spacer(),
|
|
|
|
Container(
|
|
|
|
padding:
|
|
EdgeInsets.all(6),
|
|
|
|
decoration:
|
|
|
|
BoxDecoration(
|
|
|
|
color:
|
|
color,
|
|
|
|
borderRadius:
|
|
BorderRadius.circular(5)
|
|
|
|
),
|
|
|
|
child:
|
|
|
|
Text(
|
|
|
|
tanker["status"],
|
|
|
|
style:
|
|
|
|
TextStyle(
|
|
color:Colors.white)
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
SizedBox(height:8),
|
|
|
|
Text(
|
|
"Distance : ${tanker["distance"]} km"),
|
|
|
|
Text(
|
|
"ETA : ${tanker["eta"]} min"),
|
|
|
|
if(tanker["status"]=="ON_DELIVERY")
|
|
|
|
Text(
|
|
"Available in ${tanker["availableIn"]} min"),
|
|
|
|
if(tanker["status"]=="FAR")
|
|
|
|
Text(
|
|
"⚠ Transport charges higher"),
|
|
|
|
SizedBox(height:6),
|
|
|
|
if(tanker["status"]=="AVAILABLE")
|
|
|
|
Text(
|
|
"BEST OPTION",
|
|
|
|
style:
|
|
|
|
TextStyle(
|
|
color:Colors.green)
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
} |