Compare commits

...

10 Commits

Author SHA1 Message Date
Gabriel
026a4382e4 Changement fresh-water vers ice_water 2023-06-05 16:58:30 +02:00
Gabriel
150ca82f74 Ajout vente 2023-06-05 16:46:14 +02:00
Gabriel
4a53decc74 Rafraichissement automatique page ship 2023-06-05 12:39:41 +02:00
Gabriel
314874a142 Ajout parsing route 2023-06-05 11:24:15 +02:00
Gabriel
77451787f5 MAJ token 2023-06-05 11:24:03 +02:00
Gabriel
f9d37e6831 Ajout inventaire 2023-06-01 12:27:32 +02:00
Gabriel
bc9ffeda59 Amélioration page ship 2023-05-31 16:59:34 +02:00
Gabriel
f492aad527 Amelioration colonnes et liens 2023-05-31 12:42:24 +02:00
Gabriel
374e3c648b Ajout des vaisseau clicables 2023-05-31 12:40:17 +02:00
Gabriel
c344ae4051 Alignement lignes colonnes 2023-05-31 12:06:17 +02:00
5 changed files with 504 additions and 45 deletions

View File

@@ -17,19 +17,58 @@ class Registration {
}
}
class Coordinates {
String? symbol;
String? type;
String? systemSymbol;
int? x;
int? y;
Coordinates({this.symbol, this.type, this.systemSymbol, this.x, this.y });
factory Coordinates.fromJson(Map<String, dynamic> json) {
return Coordinates(
symbol: json['symbol'],
type: json['type'],
systemSymbol: json['systemSymbol'],
x: json['x'],
y: json['y'],
);
}
}
class Route {
Coordinates? departure;
Coordinates? destination;
String? arrival;
String? departureTime;
Route({this.departure, this.destination, this.arrival, this.departureTime});
factory Route.fromJson(Map<String, dynamic> json) {
return Route(
departure: Coordinates.fromJson(json['departure']),
destination: Coordinates.fromJson(json['destination']),
arrival: json['arrival'],
departureTime: json['departureTime'],
);
}
}
class Nav {
String? systemSymbol;
String? waypointSymbol;
//TODO Route
Route? route;
String? status;
String? flightMode;
Nav({this.systemSymbol, this.waypointSymbol, this.status, this.flightMode});
Nav({this.systemSymbol, this.waypointSymbol, this.route, this.status, this.flightMode});
factory Nav.fromJson(Map<String, dynamic> json) {
return Nav(
systemSymbol: json['systemSymbol'],
waypointSymbol: json['waypointSymbol'],
route: Route.fromJson(json['route']),
status: json['status'],
flightMode: json['flightMode'],
);
@@ -58,15 +97,22 @@ class Inventory {
class Cargo {
int? capacity;
int? units;
//List<Inventory>? inventory;
List<Inventory>? inventory;
Cargo({this.capacity, this.units});//, this.inventory});
Cargo({this.capacity, this.units, this.inventory});
factory Cargo.fromJson(Map<String, dynamic> json) {
var inventoryList = json['inventory'] as List<dynamic>?;
List<Inventory>? parsedInventoryList;
if (inventoryList != null) {
parsedInventoryList = inventoryList
.map((item) => Inventory.fromJson(item))
.toList();
}
return Cargo(
capacity: json['capacity'],
units: json['units'],
//inventory: json.decode(json['inventory']),
inventory: parsedInventoryList,
);
}
}

View File

@@ -3,6 +3,7 @@ import 'package:space_traders/models/agent_model.dart';
import 'package:space_traders/providers/agent_provider.dart';
import 'package:space_traders/models/ship_model.dart';
import 'package:space_traders/providers/ship_provider.dart';
import 'package:space_traders/pages/ship_page.dart';
class HomePage extends StatefulWidget {
@override
@@ -13,8 +14,18 @@ class _HomePageState extends State<HomePage> {
final agent = AgentProvider();
ShipProvider shipProvider = ShipProvider();
Future<List<ShipModel>> getShips() async {
List<ShipModel> ships = await shipProvider.getShips();
Future<List<ShipModel>>? shipsFuture;
@override
void didChangeDependencies() {
super.didChangeDependencies();
shipsFuture = listShips();
}
Future<List<ShipModel>> listShips() async {
List<ShipModel> ships = await shipProvider.listShips();
return ships;
}
@@ -64,45 +75,106 @@ class _HomePageState extends State<HomePage> {
)
),
Card(
color: Colors.white,
child: FutureBuilder<List<ShipModel>>(
future: getShips(),
builder: (BuildContext context, AsyncSnapshot<List<ShipModel>> snapshot) {
if (snapshot.hasData) {
List<ShipModel> ships = snapshot.data!;
return SingleChildScrollView(
color: Colors.white,
child: FutureBuilder<List<ShipModel>>(
future: shipsFuture,//listShips(),
builder: (BuildContext context, AsyncSnapshot<List<ShipModel>> snapshot) {
if (snapshot.hasData) {
List<ShipModel> ships = snapshot.data!;
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: ships.map((ship) {
return Container(
width: MediaQuery.of(context).size.width,
children: [
Container(
width: MediaQuery.of(context).size.width, // Utiliser la largeur de l'écran
child: Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text('${ship.symbol ?? 'N/A'}'),
Text('${ship.nav?.status ?? 'N/A'}'),
Text('Fuel: ${ship.fuel?.current ?? 'N/A'} / ${ship.fuel?.capacity ?? 'N/A'}'),
Text('Cargo: ${ship.cargo?.units ?? 'N/A'} / ${ship.cargo?.capacity ?? 'N/A'}'),
],
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: ships.map((ship) {
return TableRow(
children: [
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ShipPage(ship: ship),
),
);
},
child: Container(
alignment: Alignment.centerLeft,
padding: const EdgeInsets.all(8.0),
child: Text('${ship.symbol ?? 'N/A'}'),
),
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ShipPage(ship: ship),
),
);
},
child: Container(
alignment: Alignment.centerLeft,
padding: const EdgeInsets.all(8.0),
child: Text('${ship.nav?.status ?? 'N/A'}'),
),
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ShipPage(ship: ship),
),
);
},
child: Container(
alignment: Alignment.centerLeft,
padding: const EdgeInsets.all(8.0),
child: Text('Fuel: ${ship.fuel?.current ?? 'N/A'} / ${ship.fuel?.capacity ?? 'N/A'}'),
),
),
GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ShipPage(ship: ship),
),
);
},
child: Container(
alignment: Alignment.centerLeft,
padding: const EdgeInsets.all(8.0),
child: Text('Cargo: ${ship.cargo?.units ?? 'N/A'} / ${ship.cargo?.capacity ?? 'N/A'}'),
),
),
],
);
}).toList(),
),
),),
);
}).toList(),
),
);
}else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
}else {
return CircularProgressIndicator();
}
},
),
),
),
),
],
),
);
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
return CircularProgressIndicator();
}
},
),
),
],
),
),

255
lib/pages/ship_page.dart Normal file
View File

@@ -0,0 +1,255 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:space_traders/models/ship_model.dart';
import 'package:space_traders/providers/ship_provider.dart';
class ShipPage extends StatefulWidget {
final ShipModel ship;
ShipPage({required this.ship});
@override
_ShipPageState createState() => _ShipPageState();
}
class _ShipPageState extends State<ShipPage> {
ShipModel? ship;
Timer? _timer;
Timer? _timermin;
bool isButtonEnabled = true;
@override
void initState() {
super.initState();
_startTimer();
ship = widget.ship;
}
@override
void dispose() {
_stopTimer();
super.dispose();
}
void _startTimer() {
_timer = Timer.periodic(Duration(seconds: 5), (_) {
setState(() {
_fetchShipData();
});
});
}
Future<void> _fetchShipData() async {
ShipModel refreshedShip = await ShipProvider.getShip(widget.ship.symbol!);
setState(() {
ship = refreshedShip;
});
}
void _stopTimer() {
_timer?.cancel();
_timermin?.cancel();
}
ElevatedButton buildActionButton(String status) {
String buttonText = '';
VoidCallback? buttonAction;
if (status == 'IN_ORBIT') {
buttonText = 'Dock';
buttonAction = () async {
Nav newNav = await ShipProvider.dockShip(widget.ship.symbol!);
ship?.nav = newNav;
};
} else if (status == 'DOCKED') {
buttonText = 'Orbit';
buttonAction = () async{
Nav newNav = await ShipProvider.orbitShip(widget.ship.symbol!);
ship?.nav = newNav;
};
} else {
buttonText = '';
buttonAction = null;
}
return ElevatedButton(
onPressed: buttonAction,
child: Text(buttonText),
);
}
void _onButtonPressed() async {
int duration;
if (isButtonEnabled) {
setState(() {
isButtonEnabled = false;
});
duration = await ShipProvider.extract(widget.ship.symbol!);
final disabledDuration = Duration(seconds: duration);
_timermin = Timer(disabledDuration, () {
setState(() {
isButtonEnabled = true;
});
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Ship Details'),
),
body: Container(
decoration: BoxDecoration(
color: Colors.grey[300],
),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Card(
color: Colors.white,
child: Align(
alignment: Alignment.topLeft,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Name: ${ship?.symbol}',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
Row(
children: [
Text('${ship?.nav?.status ?? 'N/A'}'),
SizedBox(height: 32),
SizedBox(width: 32),
buildActionButton(ship?.nav?.status ?? ''),
],
),
Row(
children: [
Text('Fuel: ${ship?.fuel?.current ?? 'N/A'} / ${ship?.fuel?.capacity ?? 'N/A'}'),
SizedBox(height: 32),
SizedBox(width: 32),
ElevatedButton(
onPressed: () {
},
child: Text('Refuel'),
),
],
),
Row(
children: [
Column(
children:[
Text('${ship?.nav?.waypointSymbol ?? 'N/A'}'),
Text('${ship?.nav?.route?.destination?.type ?? 'N/A'}'),
],
),
SizedBox(height: 32),
SizedBox(width: 32),
ElevatedButton(
onPressed: () {
},
child: Text('Select Destination'),
),
SizedBox(width: 32),
ElevatedButton(
onPressed: () {
},
child: Text('View System'),
),
],
),
],
),
),
),
Card(
color: Colors.white,
child: Align(
alignment: Alignment.topLeft,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Cargo: ${ship?.cargo?.units ?? 'N/A'} / ${ship?.cargo?.capacity ?? 'N/A'}',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
//ElevatedButton(
// onPressed: () {
// },
// child: Text('Markets'),
// ),
],
),
SizedBox(height: 10),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: ship?.cargo?.inventory?.map((item) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'${item.name ?? 'N/A'} - ${item.units ?? 'N/A'}',
style: TextStyle(
fontSize: 16,
),
),
ElevatedButton(
onPressed: () async {
Cargo newCargo = await ShipProvider.sell(widget.ship.symbol!, item.name!, item.units!);
},
child: Text('Sell'),
),
Divider(),
],
);
}).toList() ?? [],
),
],
),
),
),
Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Mining',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
),
),
),
ElevatedButton(
onPressed: isButtonEnabled ? _onButtonPressed : null,
child: Text('Start Mining'),
),
],
),
),
],
),
),
),
);
}
}

View File

@@ -7,8 +7,8 @@ class AgentProvider {
Future<AgentModel> getAgent() async {
final url = 'https://api.spacetraders.io/v2/my/agent';
final token = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVFJJUExFRkEiLCJ2ZXJzaW9uIjoidjIiLCJyZXNldF9kYXRlIjoiMjAyMy0wNS0yMCIsImlhdCI6MTY4NTA4MzgwNiwic3ViIjoiYWdlbnQtdG9rZW4ifQ.F90krgDq6p2yAiQtWIjFEYqMRqepaUQ8j6hnoKIrj9FrSLLvYhY2LEIII70ta6b97Fqsr5szAhmIP0AfXovCONXXq9EIR74SOojGsyt5-8LoNvZlNt6LrmNyuhiJgipogKNrSuUt0L3SEjLjUGeF_k-85rEMcH_Gts31IGfYD6mFWlj142ORJUIzF6gCqVYXYYKw99VObAvGwQnpbd3LrDGJShJn0Bjh5Fb0ACbaesTgFzktSW0FP_lxsf9m3uQastgnX3otioq1CnwfDTQC6uNwFK2KvCEcebnGqUU9l5GNrMEnqZ02YXnbFZx6b1icop_1wsyajsrJHsqNs6zliw';
final token = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
final resp = await http.get(
Uri.parse(url),
headers: {'Authorization': 'Bearer $token'},

View File

@@ -5,16 +5,16 @@ import 'package:space_traders/models/ship_model.dart';
class ShipProvider {
Future<List<ShipModel>> getShips() async {
Future<List<ShipModel>> listShips() async {
final url = 'https://api.spacetraders.io/v2/my/ships';
final token = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVFJJUExFRkEiLCJ2ZXJzaW9uIjoidjIiLCJyZXNldF9kYXRlIjoiMjAyMy0wNS0yMCIsImlhdCI6MTY4NTA4MzgwNiwic3ViIjoiYWdlbnQtdG9rZW4ifQ.F90krgDq6p2yAiQtWIjFEYqMRqepaUQ8j6hnoKIrj9FrSLLvYhY2LEIII70ta6b97Fqsr5szAhmIP0AfXovCONXXq9EIR74SOojGsyt5-8LoNvZlNt6LrmNyuhiJgipogKNrSuUt0L3SEjLjUGeF_k-85rEMcH_Gts31IGfYD6mFWlj142ORJUIzF6gCqVYXYYKw99VObAvGwQnpbd3LrDGJShJn0Bjh5Fb0ACbaesTgFzktSW0FP_lxsf9m3uQastgnX3otioq1CnwfDTQC6uNwFK2KvCEcebnGqUU9l5GNrMEnqZ02YXnbFZx6b1icop_1wsyajsrJHsqNs6zliw';
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
final resp = await http.get(
Uri.parse(url),
headers: {'Authorization': 'Bearer $token'},
);
final decodedData = json.decode(utf8.decode(resp.bodyBytes));
//final fleet = FleetModel.fromJson(decodedData['data']);
final List<ShipModel> fleet = [];
final List<dynamic> data = decodedData['data'];
@@ -25,5 +25,91 @@ class ShipProvider {
return fleet;
}
static Future<ShipModel> getShip(String shipSymbol) async {
final url = 'https://api.spacetraders.io/v2/my/ships/$shipSymbol';
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
final resp = await http.get(
Uri.parse(url),
headers: {'Authorization': 'Bearer $token'},
);
final decodedData = json.decode(utf8.decode(resp.bodyBytes));
return ShipModel.fromJson(decodedData['data']);
}
static Future<Nav> dockShip(String shipSymbol) async {
final url = 'https://api.spacetraders.io/v2/my/ships/$shipSymbol/dock';
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
final resp = await http.post(
Uri.parse(url),
headers: {'Authorization': 'Bearer $token'},
);
final decodedData = json.decode(utf8.decode(resp.bodyBytes));
return Nav.fromJson(decodedData['data']['nav']);
}
static Future<Nav> orbitShip(String shipSymbol) async {
final url = 'https://api.spacetraders.io/v2/my/ships/$shipSymbol/orbit';
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
final resp = await http.post(
Uri.parse(url),
headers: {'Authorization': 'Bearer $token'},
);
final decodedData = json.decode(utf8.decode(resp.bodyBytes));
return Nav.fromJson(decodedData['data']['nav']);
}
static Future<int> extract(String shipSymbol) async {
final url = 'https://api.spacetraders.io/v2/my/ships/$shipSymbol/extract';
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
final resp = await http.post(
Uri.parse(url),
headers: {'Authorization': 'Bearer $token'},
);
final decodedData = json.decode(utf8.decode(resp.bodyBytes));
print(decodedData);
return decodedData['data']['cooldown']['remainingSeconds'];
}
static Future<Cargo> sell(String shipSymbol, String symbol, int units) async {
final url = 'https://api.spacetraders.io/v2/my/ships/$shipSymbol/sell';
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
Map<String, String> headers = {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
};
String newsymbol = symbol.toUpperCase().replaceAll(' ', '_');
if(newsymbol == 'FRESH_WATER')
newsymbol = 'ICE_WATER';
Map<String, dynamic> body = {
'symbol': '$newsymbol',
'units': units,
};
String jsonString = jsonEncode(body);
print(jsonString);
final resp = await http.post(
Uri.parse(url),
headers: headers,
body: jsonString,
);
final decodedData = json.decode(utf8.decode(resp.bodyBytes));
print(decodedData);
return Cargo.fromJson(decodedData['data']['cargo']);
}
}