You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			216 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			216 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Dart
		
	
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/main.dart';
 | 
						|
import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart';
 | 
						|
 | 
						|
class CountdownTimerForDetailScreen extends StatelessWidget {
 | 
						|
  final int timeToMarathon;
 | 
						|
  final MarathonProvider provider;
 | 
						|
 | 
						|
  CountdownTimerForDetailScreen({
 | 
						|
    Key? key,
 | 
						|
    required this.provider,
 | 
						|
    required this.timeToMarathon,
 | 
						|
  }) : 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 = TextStyle(
 | 
						|
    height: 22 / 27,
 | 
						|
    color: MyColors.white,
 | 
						|
    fontSize: isTablet ? 30 : 15,
 | 
						|
    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 buildSeparator() {
 | 
						|
    return AutoSizeText(
 | 
						|
      "  :  ",
 | 
						|
      maxFontSize: 24,
 | 
						|
      minFontSize: 20,
 | 
						|
      style: styleDigitMarathon,
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  Widget getTimeDigit(String text) {
 | 
						|
    return AutoSizeText(
 | 
						|
      text,
 | 
						|
      maxFontSize: 24,
 | 
						|
      minFontSize: 20,
 | 
						|
      style: styleDigitMarathon,
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  Widget getTimeText(String text) {
 | 
						|
    return AutoSizeText(
 | 
						|
      text,
 | 
						|
      minFontSize: 7,
 | 
						|
      maxFontSize: 8,
 | 
						|
      style: styleTextMarathon,
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  Widget buildEmptyWidget() {
 | 
						|
    return Directionality(
 | 
						|
      textDirection: ui.TextDirection.ltr,
 | 
						|
      child: Row(
 | 
						|
        mainAxisSize: MainAxisSize.min,
 | 
						|
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
 | 
						|
        crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
        children: <Widget>[
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              getTimeDigit("00"),
 | 
						|
              getTimeText(LocaleKeys.days.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
          buildSeparator(),
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              getTimeDigit("00"),
 | 
						|
              getTimeText(LocaleKeys.hours.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
          buildSeparator(),
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              getTimeDigit("00"),
 | 
						|
              getTimeText(LocaleKeys.minutes.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
          buildSeparator(),
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              getTimeDigit("00"),
 | 
						|
              getTimeText(LocaleKeys.seconds.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
        ],
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  Widget buildCountdownTimer(CurrentRemainingTime? time) {
 | 
						|
    if (provider.marathonDetailModel.startTime != null) {
 | 
						|
      int remainingTimeInMinutes = DateTime.parse(provider.marathonDetailModel.startTime!).difference(DateTime.now()).inMinutes;
 | 
						|
      if (remainingTimeInMinutes <= 30 && provider.canPlayDemo == true) {
 | 
						|
        // scheduleMicrotask(() {
 | 
						|
        // print("Timer TRUE!!!: ${time?.min.toString()}");
 | 
						|
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
 | 
						|
          provider.canPlayDemo = false;
 | 
						|
        });
 | 
						|
        // });
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    if (time == null) {
 | 
						|
      if (!provider.itsMarathonTime) {
 | 
						|
        scheduleMicrotask(() {
 | 
						|
          provider.itsMarathonTime = true;
 | 
						|
          provider.isButtonEnabled = true;
 | 
						|
          provider.startTimerToWaitForMarathon();
 | 
						|
        });
 | 
						|
      }
 | 
						|
 | 
						|
      return provider.itsMarathonTime
 | 
						|
          ? Directionality(
 | 
						|
              textDirection: ui.TextDirection.ltr,
 | 
						|
              child: Row(
 | 
						|
                mainAxisSize: MainAxisSize.min,
 | 
						|
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
 | 
						|
                crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                children: <Widget>[
 | 
						|
                  Column(
 | 
						|
                    children: <Widget>[
 | 
						|
                      getTimeDigit(provider.totalSecondsToWaitForMarathon.toString()),
 | 
						|
                      getTimeText(LocaleKeys.seconds.tr()),
 | 
						|
                    ],
 | 
						|
                  ),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
            )
 | 
						|
          : buildEmptyWidget();
 | 
						|
    }
 | 
						|
 | 
						|
    return Directionality(
 | 
						|
      textDirection: ui.TextDirection.ltr,
 | 
						|
      child: Row(
 | 
						|
        mainAxisSize: MainAxisSize.min,
 | 
						|
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
 | 
						|
        crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
        children: <Widget>[
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              time.days == null ? getTimeDigit("00") : getTimeDigit(time.days! < 10 ? "0${time.days.toString()}" : time.days.toString()),
 | 
						|
              getTimeText(LocaleKeys.days.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
          buildSeparator(),
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              time.hours == null ? getTimeDigit("00") : getTimeDigit(time.hours! < 10 ? "0${time.hours.toString()}" : time.hours.toString()),
 | 
						|
              getTimeText(LocaleKeys.hours.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
          buildSeparator(),
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              time.min == null ? getTimeDigit("00") : getTimeDigit(time.min! < 10 ? "0${time.min.toString()}" : time.min.toString()),
 | 
						|
              getTimeText(LocaleKeys.minutes.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
          buildSeparator(),
 | 
						|
          Column(
 | 
						|
            children: <Widget>[
 | 
						|
              time.sec == null ? getTimeDigit("00") : getTimeDigit(time.sec! < 10 ? "0${time.sec.toString()}" : time.sec.toString()),
 | 
						|
              getTimeText(LocaleKeys.seconds.tr()),
 | 
						|
            ],
 | 
						|
          ),
 | 
						|
        ],
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    return CountdownTimer(
 | 
						|
      // endTime: dummyTime,
 | 
						|
      endTime: timeToMarathon,
 | 
						|
      onEnd: null,
 | 
						|
      widgetBuilder: (BuildContext context, CurrentRemainingTime? time) {
 | 
						|
        return buildCountdownTimer(time);
 | 
						|
      },
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |