|
|
|
|
import 'dart:async';
|
|
|
|
|
import 'dart:ui' as ui;
|
|
|
|
|
|
|
|
|
|
import 'package:auto_size_text/auto_size_text.dart';
|
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter_countdown_timer/current_remaining_time.dart';
|
|
|
|
|
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/classes/colors.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
|
|
|
|
|
|
|
|
|
|
class BuildCountdownTimer extends StatelessWidget {
|
|
|
|
|
final int timeToMarathon;
|
|
|
|
|
final MarathonProvider provider;
|
|
|
|
|
final int screenFlag;
|
|
|
|
|
|
|
|
|
|
BuildCountdownTimer({
|
|
|
|
|
Key? key,
|
|
|
|
|
required this.provider,
|
|
|
|
|
required this.timeToMarathon,
|
|
|
|
|
required this.screenFlag,
|
|
|
|
|
}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
final TextStyle styleTextHome = TextStyle(
|
|
|
|
|
color: MyColors.white.withOpacity(0.45),
|
|
|
|
|
fontStyle: FontStyle.italic,
|
|
|
|
|
fontWeight: FontWeight.w800,
|
|
|
|
|
letterSpacing: -0.4,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final TextStyle styleDigitHome = const TextStyle(
|
|
|
|
|
height: 23 / 27,
|
|
|
|
|
color: MyColors.white,
|
|
|
|
|
fontStyle: FontStyle.italic,
|
|
|
|
|
letterSpacing: -1.44,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final TextStyle styleTextMarathon = const TextStyle(
|
|
|
|
|
fontSize: 10,
|
|
|
|
|
fontStyle: FontStyle.normal,
|
|
|
|
|
fontWeight: FontWeight.w600,
|
|
|
|
|
color: MyColors.grey57Color,
|
|
|
|
|
letterSpacing: -0.4,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
final TextStyle styleDigitMarathon = const TextStyle(
|
|
|
|
|
height: 23 / 24,
|
|
|
|
|
color: MyColors.darkTextColor,
|
|
|
|
|
fontSize: 34,
|
|
|
|
|
letterSpacing: -1.44,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
Widget buildEmptyWidget() {
|
|
|
|
|
return Directionality(
|
|
|
|
|
textDirection: ui.TextDirection.ltr,
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
// todo @faiz: Make a separate method and pass string , so we can minimize code replication
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.days.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
buildSeparator(),
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.hours.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
buildSeparator(),
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.minutes.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
buildSeparator(),
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.seconds.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget buildSeparator() {
|
|
|
|
|
return AutoSizeText(
|
|
|
|
|
" : ",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget buildCountdownTimer(CurrentRemainingTime? time) {
|
|
|
|
|
if (time == null) {
|
|
|
|
|
if (!provider.itsMarathonTime) {
|
|
|
|
|
scheduleMicrotask(() {
|
|
|
|
|
provider.itsMarathonTime = true;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return buildEmptyWidget();
|
|
|
|
|
}
|
|
|
|
|
return Directionality(
|
|
|
|
|
textDirection: ui.TextDirection.ltr,
|
|
|
|
|
child: Row(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
// todo @faiz: Make a separate method and pass value and string , so we can minimize code replication
|
|
|
|
|
time.days == null
|
|
|
|
|
? AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
)
|
|
|
|
|
: AutoSizeText(
|
|
|
|
|
time.days! < 10 ? "0${time.days.toString()}" : time.days.toString(),
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.days.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
buildSeparator(),
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
time.hours == null
|
|
|
|
|
? AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
)
|
|
|
|
|
: AutoSizeText(
|
|
|
|
|
time.hours! < 10 ? "0${time.hours.toString()}" : time.hours.toString(),
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.hours.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
buildSeparator(),
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
time.min == null
|
|
|
|
|
? AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
)
|
|
|
|
|
: AutoSizeText(
|
|
|
|
|
time.min! < 10 ? "0${time.min.toString()}" : time.min.toString(),
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.minutes.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
buildSeparator(),
|
|
|
|
|
Column(
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
time.sec == null
|
|
|
|
|
? AutoSizeText(
|
|
|
|
|
"00",
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
)
|
|
|
|
|
: AutoSizeText(
|
|
|
|
|
time.sec! < 10 ? "0${time.sec.toString()}" : time.sec.toString(),
|
|
|
|
|
maxFontSize: 24,
|
|
|
|
|
minFontSize: 20,
|
|
|
|
|
style: screenFlag == 0 ? styleDigitHome : styleDigitMarathon,
|
|
|
|
|
),
|
|
|
|
|
AutoSizeText(
|
|
|
|
|
LocaleKeys.seconds.tr(),
|
|
|
|
|
minFontSize: 7,
|
|
|
|
|
maxFontSize: 8,
|
|
|
|
|
style: screenFlag == 0 ? styleTextHome : styleTextMarathon,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return CountdownTimer(
|
|
|
|
|
endTime: timeToMarathon,
|
|
|
|
|
onEnd: null,
|
|
|
|
|
widgetBuilder: (BuildContext context, CurrentRemainingTime? time) {
|
|
|
|
|
return buildCountdownTimer(time);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|