diff --git a/lib/widgets/certify/cert_state.dart b/lib/widgets/certify/cert_state.dart index 4c7fbd87b596200d591b998a7b1d2bee52ee8398..f92bca33e5b490cf37e9abec6ca4570a0ba84d02 100644 --- a/lib/widgets/certify/cert_state.dart +++ b/lib/widgets/certify/cert_state.dart @@ -4,57 +4,39 @@ import 'package:gecko/widgets/certify/certify_button.dart'; import 'package:gecko/widgets/certify/wait_to_cert.dart'; class CertStateWidget extends StatelessWidget { - const CertStateWidget( - {super.key, required this.certState, required this.address}); + const CertStateWidget({super.key, required this.certState, required this.address}); final CertState certState; final String address; @override Widget build(BuildContext context) { - switch (certState.status) { - case CertStatus.canCert: - return CertifyButton(address); - case CertStatus.mustConfirmIdentity: - return WaitToCertWidget( - messageKey: 'mustConfirmHisIdentity', - duration: formatDuration(certState.duration!)); - case CertStatus.canRenewIn: - return WaitToCertWidget( - messageKey: 'canRenewCertInX', - duration: formatDuration(certState.duration!)); - case CertStatus.mustWaitBeforeCert: - return WaitToCertWidget( - messageKey: 'mustWaitXBeforeCertify', - duration: formatDuration(certState.duration!)); - default: - return const SizedBox.shrink(); - } + final duration = certState.duration ?? Duration.zero; + return switch (certState.status) { + CertStatus.canCert => CertifyButton(address), + CertStatus.mustConfirmIdentity => WaitToCertWidget(messageKey: 'mustConfirmHisIdentity', duration: formatDuration(duration)), + CertStatus.canRenewIn => WaitToCertWidget(messageKey: 'canRenewCertInX', duration: formatDuration(duration)), + CertStatus.mustWaitBeforeCert => WaitToCertWidget(messageKey: 'mustWaitXBeforeCertify', duration: formatDuration(duration)), + _ => const SizedBox.shrink(), + }; } String formatDuration(Duration duration) { - final seconds = duration.inSeconds; - final minutes = duration.inMinutes; - - if (seconds <= 0) { - return 'seconds'.tr(args: ['0']); - } else if (seconds <= 60) { - return 'seconds'.tr(args: [seconds.toString()]); - } else if (seconds <= 3600) { - return 'minutes'.tr(args: [minutes.toString()]); - } else if (seconds <= 86400) { - final hours = duration.inHours; - final minutesLeft = minutes - hours * 60; - String showMinutes = - minutesLeft < 60 ? '' : 'minutes'.tr(args: [minutesLeft.toString()]); - return 'hours'.tr(args: [hours.toString(), showMinutes]); - } else if (seconds <= 2592000) { - final days = duration.inDays; - return 'days'.tr(args: [days.toString()]); - } else { - final months = (duration.inDays / 30).round(); - return 'months'.tr(args: [months.toString()]); - } + return switch (duration) { + <= Duration.zero => 'seconds'.tr(args: ['0']), + <= const Duration(minutes: 1) => 'seconds'.tr(args: [duration.inSeconds.toString()]), + <= const Duration(hours: 1) => 'minutes'.tr(args: [duration.inMinutes.toString()]), + <= const Duration(days: 1) => () { + final minutesPart = duration - Duration(hours: duration.inHours); + final showMinutes = minutesPart.inMinutes > 0 ? 'minutes'.tr(args: [minutesPart.inMinutes.toString()]) : ''; + return 'hours'.tr(args: [duration.inHours.toString(), showMinutes]); + }(), + <= const Duration(days: 30) => 'days'.tr(args: [duration.inDays.toString()]), + _ => () { + final months = (duration.inDays / 30).round(); + return 'months'.tr(args: [months.toString()]); + }(), + }; } } diff --git a/pubspec.yaml b/pubspec.yaml index bc9190f284b7fe51175f44f482ba9ffce5c1d016..4e3c749ddf66a7ecf43de3e2f97eb017078e3e71 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: gecko description: Pay with G1. publish_to: "none" -version: 0.1.8+79 +version: 0.1.9+80 environment: sdk: ^3.5.3