Untitled
unknown
plain_text
2 years ago
5.1 kB
10
Indexable
import 'dart:convert';
import 'package:collection/collection.dart';
import 'package:get/get.dart';
import '../models/player_fixtures.dart';
import '/models/fixtures.dart';
import '/models/player_latest.dart';
import '/services/api_services.dart';
import '/utils/helpers.dart';
import '../consts/consts.dart';
import '../models/player_details.dart';
import '../models/player_teams.dart';
import '../models/player_trophies.dart';
class PlayerDetailsController extends GetxController {
// Initialize loading values
RxBool isLoading = true.obs;
RxBool isLoadingMatches = true.obs;
RxBool isLoadingTeams = true.obs;
RxBool isLoadingTrophies = true.obs;
RxInt playerId = 0.obs;
// Initialize all the needed variable to handle player details
Rx<PlayerDetails> playerDetails = PlayerDetails().obs;
RxList<Transfers> playerTransfers = <Transfers>[].obs;
RxList<Statistics> playerStatistics = <Statistics>[].obs;
RxList<Trophies> playerTrophies = <Trophies>[].obs;
RxList<TeamsPlayer> playerTeams = <TeamsPlayer>[].obs;
RxList<Latest> playerLatest = <Latest>[].obs;
RxList<FixturesData> playerFixtures = <FixturesData>[].obs;
RxList<int> latestIds = <int>[].obs;
Map<int?, List<Trophies>> sortedTrophies = <int?, List<Trophies>>{}.obs;
Map<int?, Map<String, List<Trophies>>> finalTrophies =
<int?, Map<String, List<Trophies>>>{}.obs;
// Load player Details for a specified player Id
loadPlayerDetails(int id) async {
try {
var response = await ApiService.get(
"${settingController.sportapiBaseUrl.value}${AppConsts.player}$id${settingController.sportapiApiKey.value}&include=position;detailedPosition;country;statistics.details.type;statistics.season.league;transfers.fromTeam;transfers.toTeam;transfers.type",
);
// Save initial values
playerDetails.value = PlayerDetails.fromJson(jsonDecode(response.body));
playerTransfers.value = playerDetails.value.data?.transfers ?? [];
playerStatistics.value = playerDetails.value.data?.statistics ?? [];
} catch (e, s) {
dd(e);
dd(s);
} finally {
isLoading.value = false;
// Call the functions at the beginning
loadPlayerTeams(id);
loadPlayerLatest(id);
}
}
// Load player teams for the player
loadPlayerTeams(int id) async {
isLoadingTeams.value = true;
try {
var response = await ApiService.get(
"${settingController.sportapiBaseUrl.value}${AppConsts.player}$id${settingController.sportapiApiKey.value}&include=teams.team.country;teams.team.activeSeasons",
);
// Save the team the player played in
playerTeams.value =
PlayerTeams.fromJson(jsonDecode(response.body)).data?.teams ?? [];
} catch (e, s) {
dd(e);
dd(s);
} finally {
isLoadingTeams.value = false;
}
}
// Load player Trophies
loadPlayerTrophies(int id) async {
try {
var response = await ApiService.get(
"${settingController.sportapiBaseUrl.value}${AppConsts.player}$id${settingController.sportapiApiKey.value}&include=trophies.league;trophies.season;trophies.trophy",
);
playerTrophies.value =
PlayerTrophies.fromJson(jsonDecode(response.body)).data?.trophies ??
[];
// Group the Trophy by Legue Id
sortedTrophies = groupBy(
playerTrophies,
(Trophies trophies) => trophies.leagueId,
);
// Group it again by trophy type
for (var type in sortedTrophies.keys) {
Map<String, List<Trophies>> groupedByAttribute = groupBy(
sortedTrophies[type]!,
(Trophies trophies) => trophies.trophy?.name ?? 'Unknown',
);
finalTrophies[type] = groupedByAttribute;
}
} catch (e, s) {
dd(e);
dd(s);
} finally {
isLoadingTrophies.value = false;
}
}
// Load the latest matches the player has played in
loadPlayerLatest(int id) async {
try {
var response = await ApiService.get(
"${settingController.sportapiBaseUrl.value}${AppConsts.player}$id${settingController.sportapiApiKey.value}&include=latest",
);
playerLatest.value =
PlayerLatest.fromJson(jsonDecode(response.body)).data?.latest ?? [];
// Save the latest fixture IDs
latestIds.clear();
for (var item in playerLatest) {
latestIds.add(item.fixtureId!);
}
// Load Fixtures for the saved fixture Ids
await loadFixture(latestIds);
} catch (e, s) {
dd(e);
dd(s);
} finally {
isLoadingMatches.value = false;
}
}
// Load fixture details of the matches a player took part in
loadFixture([ids = '']) async {
// playerFixtures.value.clear();
String idlist = ids.join(',');
var response = await ApiService.get(
'${settingController.sportapiBaseUrl.value + AppConsts.multiFixtures}$idlist${settingController.sportapiApiKey.value}&include=league;participants;state;scores;events.type;lineups.details.type',
);
// Save player Fixture details
playerFixtures.value =
PlayerFixtures.fromJson(jsonDecode(response.body)).data ?? [];
}
}
Editor is loading...
Leave a Comment