Skip to content

Commit 5a8adda

Browse files
committed
feat: 2nd step, still not finished
1 parent 4533c8e commit 5a8adda

File tree

17 files changed

+201
-126
lines changed

17 files changed

+201
-126
lines changed

lib/Screens/Racing/circuit.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ class RaceResults extends StatelessWidget {
565565
const Spacer(),
566566
Expanded(
567567
flex: 6,
568-
child: Text(result.time),
568+
child: Text(result.gap),
569569
),
570570
],
571571
),

lib/Screens/free_practice.dart

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
* Copyright (c) 2022-2025, BrightDV
1818
*/
1919

20-
import 'package:boxbox/api/event_tracker.dart';
2120
import 'package:boxbox/classes/driver.dart';
2221
import 'package:boxbox/helpers/divider.dart';
2322
import 'package:boxbox/helpers/request_error.dart';
2423
import 'package:boxbox/helpers/loading_indicator_util.dart';
2524
import 'package:boxbox/providers/results/format.dart';
2625
import 'package:boxbox/providers/results/requests.dart';
26+
import 'package:boxbox/providers/results/ui.dart';
2727
import 'package:flutter/material.dart';
2828
import 'package:boxbox/l10n/app_localizations.dart';
2929
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
@@ -338,9 +338,9 @@ class FreePracticeResultItem extends StatelessWidget {
338338
child: Padding(
339339
padding: const EdgeInsets.only(top: 5, bottom: 5),
340340
child: Text(
341-
result.time == '' ? '--' : result.time,
341+
result.fastestLap == '' ? '--' : result.fastestLap,
342342
style: TextStyle(
343-
color: index == 0 || result.time == ''
343+
color: index == 0 || result.fastestLap == ''
344344
? Colors.white
345345
: const Color(0xff00ff00),
346346
),
@@ -378,9 +378,9 @@ class FreePracticeResultItem extends StatelessWidget {
378378
child: Text(
379379
index == 0
380380
? ''
381-
: result.fastestLap == ''
381+
: result.gap == ''
382382
? '--'
383-
: result.fastestLap,
383+
: result.gap,
384384
textAlign: TextAlign.center,
385385
),
386386
),
@@ -438,39 +438,10 @@ class FreePracticeFromMeetingKeyScreen extends StatelessWidget {
438438

439439
@override
440440
Widget build(BuildContext context) {
441-
final List<String> sessionsTitle = [
442-
AppLocalizations.of(context)!.freePracticeOne,
443-
AppLocalizations.of(context)!.freePracticeTwo,
444-
AppLocalizations.of(context)!.freePracticeThree,
445-
];
446-
447-
return FutureBuilder(
448-
future: EventTracker().getCircuitDetails(
449-
meetingKey,
450-
isFromRaceHub: true,
451-
),
452-
builder: (context, snapshot) => snapshot.hasError
453-
? Scaffold(
454-
appBar: AppBar(
455-
backgroundColor: Theme.of(context).colorScheme.onPrimary,
456-
),
457-
body: RequestErrorWidget(snapshot.error.toString()),
458-
)
459-
: snapshot.hasData
460-
? FreePracticeScreen(
461-
sessionsTitle[sessionIndex - 1],
462-
sessionIndex,
463-
'',
464-
meetingKey,
465-
int.parse(snapshot.data!['meetingContext']['season']),
466-
snapshot.data!['race']['meetingOfficialName'],
467-
)
468-
: Scaffold(
469-
appBar: AppBar(
470-
backgroundColor: Theme.of(context).colorScheme.onPrimary,
471-
),
472-
body: LoadingIndicatorUtil(),
473-
),
441+
return ResultsUIProvider().getFreePracticeResultsWithoutKey(
442+
meetingKey,
443+
sessionIndex,
444+
context,
474445
);
475446
}
476447
}

lib/Screens/race_details.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,13 +336,15 @@ class QualificationResultsProvider extends StatefulWidget {
336336
final String? raceUrl;
337337
final bool? hasSprint;
338338
final bool? isSprintQualifying;
339+
final String? meetingId;
339340
final String? sessionId;
340341
const QualificationResultsProvider({
341342
Key? key,
342343
this.race,
343344
this.raceUrl,
344345
this.hasSprint,
345346
this.isSprintQualifying,
347+
this.meetingId,
346348
this.sessionId,
347349
}) : super(key: key);
348350

@@ -378,7 +380,7 @@ class _QualificationResultsProviderState
378380
widget.sessionId,
379381
meetingId: widget.raceUrl!.startsWith('http')
380382
? widget.raceUrl!.split('/')[7]
381-
: widget.sessionId,
383+
: widget.meetingId,
382384
)
383385
: ResultsRequestsProvider().getQualificationStandings(
384386
widget.hasSprint,

lib/api/ergast.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class _ErgastApiCalls {
5959
element['Driver']['code'],
6060
element['Constructor']['constructorId'],
6161
time,
62+
time,
6263
fastestLapRank != '0'
6364
? element['FastestLap']['rank'].toString() == '1'
6465
? true
@@ -150,6 +151,7 @@ class _ErgastApiCalls {
150151
element['Driver']['code'],
151152
element['Constructor']['constructorId'],
152153
time,
154+
time,
153155
fastestLapRank != '0'
154156
? element['FastestLap']['rank'].toString() == '1'
155157
? true
@@ -399,6 +401,7 @@ class _ErgastApiCalls {
399401
? 'DNF'
400402
: race['Results'][0]['Time']?['time'] ??
401403
race['Results'][0]['status'],
404+
'',
402405
int.parse(race['Results'][0]['FastestLap']?['rank'] ?? '20') == 1
403406
? true
404407
: false,
@@ -439,6 +442,7 @@ class _ErgastApiCalls {
439442
? 'DNF'
440443
: race['Results'][0]['Time']?['time'] ??
441444
race['Results'][0]['status'],
445+
'',
442446
int.parse(race['Results'][0]['FastestLap']?['rank'] ?? '20') == 1
443447
? true
444448
: false,
@@ -463,6 +467,7 @@ class _ErgastApiCalls {
463467
? 'DNF'
464468
: race['Results'][1]['Time']?['time'] ??
465469
race['Results'][1]['status'],
470+
'',
466471
int.parse(race['Results'][1]['FastestLap']?['rank'] ?? '20') == 1
467472
? true
468473
: false,

lib/api/race_components.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ class RacesList extends StatelessWidget {
346346

347347
@override
348348
Widget build(BuildContext context) {
349+
// TODO: check that it is actually activated
349350
if (items.isNotEmpty && isUpNext && !isCache) {
350351
scheduledNotification(items[0].meetingId);
351352
}

lib/api/services/formula1.dart

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -285,33 +285,8 @@ class Formula1 {
285285
if (element['completionStatusCode'] != 'OK') {
286286
// DNF (maybe DSQ?)
287287
time = element['completionStatusCode'];
288-
} else if (element['positionNumber'] == '1') {
289-
time = element['raceTime'];
290-
} else if (element['lapsBehindLeader'] != null) {
291-
// finished & lapped cars
292-
if (element['lapsBehindLeader'] == "0") {
293-
time = "+" + element['gapToLeader'];
294-
if (time.substring(time.indexOf('.') + 1).length == 2) {
295-
time += "0";
296-
}
297-
} else if (element['lapsBehindLeader'] == "1") {
298-
// one
299-
time = "+1 Lap";
300-
} else {
301-
// more laps
302-
time = "+${element['lapsBehindLeader']} Laps";
303-
}
304288
} else {
305-
// finished & non-lapped cars
306-
if (element['positionNumber'] == "1") {
307-
//first
308-
time = element["raceTime"];
309-
} else {
310-
time = element["gapToLeader"];
311-
if (time.substring(time.indexOf('.') + 1).length == 2) {
312-
time += "0";
313-
}
314-
}
289+
time = element['raceTime'];
315290
}
316291

317292
String fastestLapRank = "0";
@@ -330,6 +305,7 @@ class Formula1 {
330305
element['driverTLA'],
331306
Convert().teamsFromFormulaOneApiToErgast(element['teamName']),
332307
time,
308+
element['displayTime'],
333309
fastestLapRank != '0' ? true : false,
334310
fastestLapRank != '0' ? fastestLapTime.replaceAll('00:', "") : "",
335311
"", // data not available
@@ -480,14 +456,6 @@ class Formula1 {
480456
} else {
481457
List finalJson = responseAsJson['raceResultsPractice$session']['results'];
482458
for (var element in finalJson) {
483-
String time = "";
484-
if (element['gapToLeader'] != null) {
485-
time = '+' + element['gapToLeader'];
486-
if (time.substring(time.indexOf('.') + 1).length == 2) {
487-
time += '0';
488-
}
489-
time += 's';
490-
}
491459
String classifiedTime = element['classifiedTime'] ?? '';
492460
if (classifiedTime.startsWith('00:')) {
493461
classifiedTime = classifiedTime.replaceFirst('00:', '');
@@ -504,9 +472,10 @@ class Formula1 {
504472
element['driverTLA'],
505473
Convert().teamsFromFormulaOneApiToErgast(element['teamName']),
506474
classifiedTime.replaceFirst('0000', ''),
475+
element['displayTime'],
507476
false,
508477
"",
509-
time,
478+
element['displayTime'],
510479
lapsDone: element['lapsCompleted'],
511480
points: element['racePoints'].toString(),
512481
status: element['completionStatusCode'],
@@ -643,6 +612,7 @@ class Formula1 {
643612
element['driverTLA'],
644613
Convert().teamsFromFormulaOneApiToErgast(element['teamName']),
645614
time,
615+
element['displayTime'],
646616
false,
647617
time,
648618
time,

lib/api/services/formula_series.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,11 @@ class FormulaSeries {
510510
List<DriverResult> formatResults(List res) {
511511
List<DriverResult> results = [];
512512
for (Map result in res) {
513+
String gap = result['Gap'] ?? '';
514+
try {
515+
int.parse(gap.substring(0, 1));
516+
gap = '+' + gap;
517+
} catch (_) {}
513518
results.add(
514519
DriverResult(
515520
result['DriverId'].toString(),
@@ -519,11 +524,13 @@ class FormulaSeries {
519524
result['DriverSurname'],
520525
result['TLA'],
521526
result['TeamName'],
522-
result['Best'],
527+
result['TimeOrFinishReason'],
528+
gap,
523529
result['Position'] == 1,
524530
result['Best'] ?? '',
525-
result['Gap'] ?? '',
531+
result['Best'] ?? '',
526532
lapsDone: result['LapsCompleted'].toString(),
533+
status: result['ResultStatus'],
527534
),
528535
);
529536
}

lib/api/services/formulae.dart

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -596,24 +596,23 @@ class FormulaE {
596596
List<DriverResult> formatedRaceStandings = [];
597597
List jsonResponse = raceStandings['results'];
598598
for (var element in jsonResponse) {
599-
String time = element['delay'];
600-
if (time == '-') {
601-
time = element['sessionTime'];
602-
}
603-
while (time.startsWith('0:')) {
604-
time = time.substring(2);
599+
String time = element['sessionTime'];
600+
String delay = element['delay'];
601+
602+
while (delay.startsWith('0:')) {
603+
delay = delay.substring(2);
605604
}
606-
if (time.startsWith('00')) {
607-
time = time.substring(1);
605+
if (delay.startsWith('00')) {
606+
delay = delay.substring(1);
608607
}
609-
if (time == '') {
610-
time = 'DNF';
608+
if (delay == '') {
609+
delay = 'DNF';
611610
} else if (element['delay'] != '-') {
612-
time = '+$time';
611+
delay = '+$delay';
613612
}
614613

615-
if (time.lastIndexOf(':') != -1) {
616-
time = time.replaceFirst(':', '.', time.lastIndexOf(':'));
614+
if (delay.lastIndexOf(':') != -1) {
615+
delay = delay.replaceFirst(':', '.', delay.lastIndexOf(':'));
617616
}
618617

619618
formatedRaceStandings.add(
@@ -626,6 +625,7 @@ class FormulaE {
626625
element['driverTLA'],
627626
element['team']?['name'] ?? '',
628627
time,
628+
delay,
629629
element['fastestLap'] ?? false,
630630
element['bestTime'] ?? '',
631631
'',
@@ -744,6 +744,7 @@ class FormulaE {
744744
element['driverTLA'],
745745
element['team']?['name'] ?? '',
746746
time,
747+
gap,
747748
element['fastestLap'] ?? false,
748749
element['bestTime'] ?? '',
749750
gap,
@@ -813,6 +814,7 @@ class FormulaE {
813814
element['driverTLA'],
814815
element['team']?['name'] ?? '',
815816
time,
817+
gap,
816818
element['fastestLap'] ?? false,
817819
element['bestTime'] ?? '',
818820
gap,

lib/classes/driver.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ class DriverResult {
5555
final String familyName;
5656
final String code;
5757
final String team;
58-
final String time;
58+
final String sessionTime;
59+
final String gap;
5960
final bool isFastest;
6061
final String fastestLapTime;
6162
final String fastestLap;
@@ -74,7 +75,8 @@ class DriverResult {
7475
this.familyName,
7576
this.code,
7677
this.team,
77-
this.time,
78+
this.sessionTime,
79+
this.gap,
7880
this.isFastest,
7981
this.fastestLapTime,
8082
this.fastestLap, {

0 commit comments

Comments
 (0)