Skip to content

Commit 4533c8e

Browse files
committed
feat: 1st step to add f2, f3, f1 academy; fixes and more classes!!!
1 parent ef2d984 commit 4533c8e

24 files changed

Lines changed: 1256 additions & 164 deletions

lib/Screens/Racing/circuit.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ class CircuitScreenContent extends StatelessWidget {
113113
height: MediaQuery.of(context).size.width > 780
114114
? MediaQuery.of(context).size.height
115115
: MediaQuery.of(context).size.height * (4 / 9),
116+
width: MediaQuery.of(context).size.width > 780
117+
? MediaQuery.of(context).size.width
118+
: null,
116119
),
117120
),
118121
Padding(
@@ -239,12 +242,14 @@ class SessionItemForCircuit extends StatelessWidget {
239242
final String meetingCountryName;
240243
final String meetingOfficialName;
241244
final String meetingId;
245+
final int sessionIndex;
242246
final List<Link>? links;
243247
const SessionItemForCircuit(
244248
this.session,
245249
this.meetingCountryName,
246250
this.meetingOfficialName,
247-
this.meetingId, {
251+
this.meetingId,
252+
this.sessionIndex, {
248253
this.links,
249254
super.key,
250255
});
@@ -274,6 +279,7 @@ class SessionItemForCircuit extends StatelessWidget {
274279
meetingOfficialName,
275280
meetingId,
276281
context,
282+
sessionIndex,
277283
),
278284
borderRadius: BorderRadius.circular(6),
279285
child: Ink(
@@ -686,6 +692,9 @@ class Sessions extends StatelessWidget {
686692
details.meetingDisplayName,
687693
details.meetingCompleteName,
688694
details.meetingId,
695+
details.sessions.length -
696+
details.sessions.indexOf(session) -
697+
1,
689698
links: details.sessionsLinks?[session.sessionAbbreviation],
690699
),
691700
],

lib/Screens/Settings/championship.dart

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,63 @@ class _ChampionshipScreenState extends State<ChampionshipScreen> {
190190
),
191191
)
192192
: Container(),
193+
ListTile(
194+
leading: SizedBox(
195+
width: 32,
196+
child: ClipRRect(
197+
borderRadius: const BorderRadius.all(Radius.circular(7)),
198+
child: CachedNetworkImage(
199+
imageUrl:
200+
'https://external-content.duckduckgo.com/ip3/www.fiaformula2.com.ico',
201+
height: 36,
202+
),
203+
),
204+
),
205+
trailing: Radio(
206+
value: 'Formula 2',
207+
groupValue: championship,
208+
onChanged: (value) => onChanged(value),
209+
),
210+
title: Text('Formula 2'),
211+
),
212+
ListTile(
213+
leading: SizedBox(
214+
width: 32,
215+
child: ClipRRect(
216+
borderRadius: const BorderRadius.all(Radius.circular(7)),
217+
child: CachedNetworkImage(
218+
imageUrl:
219+
'https://external-content.duckduckgo.com/ip3/www.fiaformula3.com.ico',
220+
height: 36,
221+
),
222+
),
223+
),
224+
trailing: Radio(
225+
value: 'Formula 3',
226+
groupValue: championship,
227+
onChanged: (value) => onChanged(value),
228+
),
229+
title: Text('Formula 3'),
230+
),
231+
ListTile(
232+
leading: SizedBox(
233+
width: 32,
234+
child: ClipRRect(
235+
borderRadius: const BorderRadius.all(Radius.circular(7)),
236+
child: CachedNetworkImage(
237+
imageUrl:
238+
'https://external-content.duckduckgo.com/ip3/www.f1academy.com.ico',
239+
height: 36,
240+
),
241+
),
242+
),
243+
trailing: Radio(
244+
value: 'F1 Academy',
245+
groupValue: championship,
246+
onChanged: (value) => onChanged(value),
247+
),
248+
title: Text('F1 Academy'),
249+
),
193250
ListTile(
194251
leading: SizedBox(
195252
width: 32,
@@ -198,7 +255,7 @@ class _ChampionshipScreenState extends State<ChampionshipScreen> {
198255
child: CachedNetworkImage(
199256
imageUrl:
200257
'https://www.fiaformulae.com/resources/v4.32.1/i/elements/favicon-160x160.png',
201-
height: 24,
258+
height: 36,
202259
),
203260
),
204261
),

lib/Screens/race_details.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class _RaceResultsProviderState extends State<RaceResultsProvider> {
165165
race: race,
166166
),
167167
builder: (context, snapshot) => snapshot.hasError
168-
? ResultsUIProvider().getRaceResultsWidget(
168+
? ResultsUIProvider().getSavedRaceResultsWidget(
169169
snapshot,
170170
context,
171171
widget.isFromRaceHub,
@@ -210,7 +210,7 @@ class _RaceResultsProviderState extends State<RaceResultsProvider> {
210210
],
211211
),
212212
)
213-
: ResultsUIProvider().getRaceResultsWidget(
213+
: ResultsUIProvider().getSavedRaceResultsWidget(
214214
snapshot,
215215
context,
216216
widget.isFromRaceHub,

lib/Screens/standings.dart

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -93,27 +93,28 @@ class DriversStandingsWidget extends StatelessWidget {
9393
standings['driversStandingsLastSavedFormat'] ?? '';
9494

9595
return FutureBuilder<List<Driver>>(
96-
future: StandingsRequestsProvider().getDriversStandings(),
97-
builder: (context, snapshot) => snapshot.hasError
98-
? StandingsUIProvider().getDriversStandingsWidget(
99-
snapshot,
100-
driversStandingsLastSavedFormat,
101-
driversStandings,
102-
scrollController,
103-
true,
104-
)
105-
: snapshot.hasData
106-
? DriversList(
107-
items: snapshot.data!,
108-
scrollController: scrollController,
109-
)
110-
: StandingsUIProvider().getDriversStandingsWidget(
111-
snapshot,
112-
driversStandingsLastSavedFormat,
113-
driversStandings,
114-
scrollController,
115-
false,
116-
));
96+
future: StandingsRequestsProvider().getDriversStandings(),
97+
builder: (context, snapshot) => snapshot.hasError
98+
? StandingsUIProvider().getDriversStandingsWidget(
99+
snapshot,
100+
driversStandingsLastSavedFormat,
101+
driversStandings,
102+
scrollController,
103+
true,
104+
)
105+
: snapshot.hasData
106+
? DriversList(
107+
items: snapshot.data!,
108+
scrollController: scrollController,
109+
)
110+
: StandingsUIProvider().getDriversStandingsWidget(
111+
snapshot,
112+
driversStandingsLastSavedFormat,
113+
driversStandings,
114+
scrollController,
115+
false,
116+
),
117+
);
117118
}
118119
}
119120

lib/api/brightcove.dart

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919

2020
import 'dart:convert';
2121

22+
import 'package:boxbox/classes/video.dart';
2223
import 'package:boxbox/helpers/constants.dart';
2324
import 'package:boxbox/helpers/download.dart';
25+
import 'package:boxbox/providers/videos/requests.dart';
2426
import 'package:flutter/foundation.dart';
2527
import 'package:flutter_cache_manager/file.dart';
2628
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
@@ -43,26 +45,25 @@ class BrightCove {
4345
String videoId, String? player, String? articleChampionship) async {
4446
String championship = Hive.box('settings')
4547
.get('championship', defaultValue: 'Formula 1') as String;
46-
late Map responseAsJson;
47-
final String f1BrightCovePlayerId = Constants().F1_BRIGHTCOVE_PLAYER_ID;
48-
final String fEBrightCovePlayerId = Constants().FE_BRIGHTCOVE_PLAYER_ID;
48+
Map responseAsJson;
49+
String playerId;
4950
if (kIsWeb) {
5051
late Uri uri;
5152
if (articleChampionship != null) {
53+
playerId = VideosRequestProvider().getBrightCovePlayerId(
54+
articleChampionship,
55+
);
5256
uri = Uri.parse(
53-
articleChampionship == 'Formula 1'
54-
? 'https://edge.api.brightcove.com/playback/v1/accounts/$f1BrightCovePlayerId/videos/$videoId'
55-
: 'https://edge.api.brightcove.com/playback/v1/accounts/$fEBrightCovePlayerId/videos/$videoId',
57+
'https://edge.api.brightcove.com/playback/v1/accounts/$playerId/videos/$videoId',
5658
);
5759
} else if (player != null) {
5860
uri = Uri.parse(
5961
'https://edge.api.brightcove.com/playback/v1/accounts/$player/videos/$videoId',
6062
);
6163
} else {
64+
playerId = VideosRequestProvider().getBrightCovePlayerId(championship);
6265
uri = Uri.parse(
63-
championship == 'Formula 1'
64-
? 'https://edge.api.brightcove.com/playback/v1/accounts/$f1BrightCovePlayerId/videos/$videoId'
65-
: 'https://edge.api.brightcove.com/playback/v1/accounts/$fEBrightCovePlayerId/videos/$videoId',
66+
'https://edge.api.brightcove.com/playback/v1/accounts/$playerId/videos/$videoId',
6667
);
6768
}
6869
Response res = await get(
@@ -79,30 +80,28 @@ class BrightCove {
7980
);
8081
responseAsJson = jsonDecode(res.body);
8182
} else {
82-
late String url;
83-
83+
String url;
8484
if (articleChampionship != null) {
85-
url = articleChampionship == 'Formula 1'
86-
? 'https://edge.api.brightcove.com/playback/v1/accounts/$f1BrightCovePlayerId/videos/$videoId'
87-
: 'https://edge.api.brightcove.com/playback/v1/accounts/$fEBrightCovePlayerId/videos/$videoId';
85+
playerId = VideosRequestProvider().getBrightCovePlayerId(
86+
articleChampionship,
87+
);
88+
url =
89+
'https://edge.api.brightcove.com/playback/v1/accounts/$playerId/videos/$videoId';
8890
} else if (player != null) {
8991
url =
9092
'https://edge.api.brightcove.com/playback/v1/accounts/$player/videos/$videoId';
9193
} else {
92-
url = championship == 'Formula 1'
93-
? 'https://edge.api.brightcove.com/playback/v1/accounts/$f1BrightCovePlayerId/videos/$videoId'
94-
: 'https://edge.api.brightcove.com/playback/v1/accounts/$fEBrightCovePlayerId/videos/$videoId';
94+
playerId = VideosRequestProvider().getBrightCovePlayerId(championship);
95+
url =
96+
'https://edge.api.brightcove.com/playback/v1/accounts/$playerId/videos/$videoId';
9597
}
9698
final Future<File> fileStream = videoCache.getSingleFile(
9799
url,
98100
headers: {
99101
'Accept': articleChampionship != null
100-
? articleChampionship == 'Formula 1'
101-
? Constants().F1_BRIGHTCOVE_PLAYER_KEY
102-
: Constants().FE_BRIGHTCOVE_PLAYER_KEY
103-
: championship == 'Formula 1'
104-
? Constants().F1_BRIGHTCOVE_PLAYER_KEY
105-
: Constants().FE_BRIGHTCOVE_PLAYER_KEY
102+
? VideosRequestProvider()
103+
.getBrightCovePlayerKey(articleChampionship)
104+
: VideosRequestProvider().getBrightCovePlayerKey(championship)
106105
},
107106
);
108107
final response = await fileStream;
@@ -116,15 +115,21 @@ class BrightCove {
116115
return responseAsJson;
117116
}
118117

119-
Future<Map<String, dynamic>> getVideoLinks(String videoId,
118+
Future<VideoDetails> getVideoLinks(String videoId,
120119
{String? player, String? articleChampionship}) async {
121120
Map? fileData = kIsWeb
122121
? null
123122
: await DownloadUtils()
124123
.downloadedFilePathAndNameIfExists('video_f1_${videoId}');
125124

126125
if (fileData != null) {
127-
return {'file': fileData['file'], 'name': fileData['name']};
126+
return VideoDetails(
127+
'',
128+
fileData['name'],
129+
[],
130+
'',
131+
localFilePath: fileData['file'],
132+
);
128133
} else {
129134
int playerQuality =
130135
Hive.box('settings').get('playerQuality', defaultValue: 360) as int;
@@ -159,7 +164,12 @@ class BrightCove {
159164
streamUrls['videos'].add(streamsData['sources'][0]['src']);
160165
}
161166
streamUrls['name'] = streamsData['name'];
162-
return streamUrls;
167+
return VideoDetails(
168+
streamUrls['name'],
169+
streamUrls['qualities'],
170+
streamUrls['videos'],
171+
streamUrls['poster'],
172+
);
163173
}
164174
}
165175
}

0 commit comments

Comments
 (0)