Compare commits
10 Commits
c5648f82e3
...
026a4382e4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
026a4382e4 | ||
|
|
150ca82f74 | ||
|
|
4a53decc74 | ||
|
|
314874a142 | ||
|
|
77451787f5 | ||
|
|
f9d37e6831 | ||
|
|
bc9ffeda59 | ||
|
|
f492aad527 | ||
|
|
374e3c648b | ||
|
|
c344ae4051 |
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
255
lib/pages/ship_page.dart
Normal 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'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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'},
|
||||
|
||||
@@ -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']);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user