Rafraichissement automatique page ship
This commit is contained in:
@@ -14,8 +14,8 @@ class _HomePageState extends State<HomePage> {
|
|||||||
final agent = AgentProvider();
|
final agent = AgentProvider();
|
||||||
ShipProvider shipProvider = ShipProvider();
|
ShipProvider shipProvider = ShipProvider();
|
||||||
|
|
||||||
Future<List<ShipModel>> getShips() async {
|
Future<List<ShipModel>> listShips() async {
|
||||||
List<ShipModel> ships = await shipProvider.getShips();
|
List<ShipModel> ships = await shipProvider.listShips();
|
||||||
return ships;
|
return ships;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ class _HomePageState extends State<HomePage> {
|
|||||||
Card(
|
Card(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
child: FutureBuilder<List<ShipModel>>(
|
child: FutureBuilder<List<ShipModel>>(
|
||||||
future: getShips(),
|
future: listShips(),
|
||||||
builder: (BuildContext context, AsyncSnapshot<List<ShipModel>> snapshot) {
|
builder: (BuildContext context, AsyncSnapshot<List<ShipModel>> snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
List<ShipModel> ships = snapshot.data!;
|
List<ShipModel> ships = snapshot.data!;
|
||||||
|
|||||||
@@ -1,10 +1,52 @@
|
|||||||
|
import 'dart:async';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:space_traders/models/ship_model.dart';
|
import 'package:space_traders/models/ship_model.dart';
|
||||||
|
import 'package:space_traders/providers/ship_provider.dart';
|
||||||
|
|
||||||
class ShipPage extends StatelessWidget {
|
class ShipPage extends StatefulWidget {
|
||||||
final ShipModel ship;
|
final ShipModel ship;
|
||||||
|
|
||||||
ShipPage({required this.ship});
|
ShipPage({required this.ship});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ShipPageState createState() => _ShipPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ShipPageState extends State<ShipPage> {
|
||||||
|
ShipModel? ship;
|
||||||
|
Timer? _timer;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_startTimer();
|
||||||
|
ship = widget.ship;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_stopTimer();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _startTimer() {
|
||||||
|
_timer = Timer.periodic(Duration(seconds: 15), (_) {
|
||||||
|
setState(() {
|
||||||
|
_fetchShipData();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _fetchShipData() async {
|
||||||
|
ShipModel refreshedShip = await ShipProvider.getShip(widget.ship.symbol!);
|
||||||
|
setState(() {
|
||||||
|
ship = refreshedShip;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _stopTimer() {
|
||||||
|
_timer?.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
ElevatedButton buildActionButton(String status) {
|
ElevatedButton buildActionButton(String status) {
|
||||||
String buttonText = '';
|
String buttonText = '';
|
||||||
@@ -59,7 +101,7 @@ class ShipPage extends StatelessWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'Name: ${ship.symbol}',
|
'Name: ${ship?.symbol}',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@@ -67,15 +109,15 @@ class ShipPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Text('${ship.nav?.status ?? 'N/A'}'),
|
Text('${ship?.nav?.status ?? 'N/A'}'),
|
||||||
SizedBox(height: 32),
|
SizedBox(height: 32),
|
||||||
SizedBox(width: 32),
|
SizedBox(width: 32),
|
||||||
buildActionButton(ship.nav?.status ?? ''),
|
buildActionButton(ship?.nav?.status ?? ''),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Text('Fuel: ${ship.fuel?.current ?? 'N/A'} / ${ship.fuel?.capacity ?? 'N/A'}'),
|
Text('Fuel: ${ship?.fuel?.current ?? 'N/A'} / ${ship?.fuel?.capacity ?? 'N/A'}'),
|
||||||
SizedBox(height: 32),
|
SizedBox(height: 32),
|
||||||
SizedBox(width: 32),
|
SizedBox(width: 32),
|
||||||
ElevatedButton(
|
ElevatedButton(
|
||||||
@@ -89,8 +131,8 @@ class ShipPage extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Column(
|
Column(
|
||||||
children:[
|
children:[
|
||||||
Text('${ship.nav?.waypointSymbol ?? 'N/A'}'),
|
Text('${ship?.nav?.waypointSymbol ?? 'N/A'}'),
|
||||||
Text('${ship.nav?.route?.destination?.type ?? 'N/A'}'),
|
Text('${ship?.nav?.route?.destination?.type ?? 'N/A'}'),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(height: 32),
|
SizedBox(height: 32),
|
||||||
@@ -123,7 +165,7 @@ class ShipPage extends StatelessWidget {
|
|||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'Cargo: ${ship.cargo?.units ?? 'N/A'} / ${ship.cargo?.capacity ?? 'N/A'}',
|
'Cargo: ${ship?.cargo?.units ?? 'N/A'} / ${ship?.cargo?.capacity ?? 'N/A'}',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
@@ -139,7 +181,7 @@ class ShipPage extends StatelessWidget {
|
|||||||
SizedBox(height: 10),
|
SizedBox(height: 10),
|
||||||
Column(
|
Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: ship.cargo?.inventory?.map((item) {
|
children: ship?.cargo?.inventory?.map((item) {
|
||||||
return Column(
|
return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import 'package:space_traders/models/ship_model.dart';
|
|||||||
|
|
||||||
class ShipProvider {
|
class ShipProvider {
|
||||||
|
|
||||||
Future<List<ShipModel>> getShips() async {
|
Future<List<ShipModel>> listShips() async {
|
||||||
final url = 'https://api.spacetraders.io/v2/my/ships';
|
final url = 'https://api.spacetraders.io/v2/my/ships';
|
||||||
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
|
final token ='eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGlmaWVyIjoiVEZBIiwidmVyc2lvbiI6InYyIiwicmVzZXRfZGF0ZSI6IjIwMjMtMDYtMDMiLCJpYXQiOjE2ODU5NTMwODksInN1YiI6ImFnZW50LXRva2VuIn0.PPGF4B1ZtgqyWXBuGiLR71aHo9XJw9cA5OxP8xxriVuje3RDjdDstP3nEt0NiXSk4yP6N15DHJqIFe9BHH2sG1yVxcYXOvXQeoYMfnfg-HzdsmCv_tZmyC7Ey0go9HiMbt0WeNyNQYgJBonA5XicmfoqAXiggI51kMAdxq-zerwQAfBvfgDLmIqb1QwD0cMEy-VugkWe-CUUQDAXdarDnFRYlqP2lVLdtBdWVArpMYYFniR-Id5FQjOCiCyrtJ5pYPs6Ih0O9Lab9JU9_lncCqrG_FllVOwyvrE2kV8ScSKpotKhfI0_qV3FL2T_z25ZBEvfad0WFqmiubiRGuo0XQ';
|
||||||
|
|
||||||
@@ -25,5 +25,19 @@ class ShipProvider {
|
|||||||
|
|
||||||
return fleet;
|
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']);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user