| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import 'dart:async';
- import 'package:flutter/material.dart';
- import 'package:flutter_screenutil/flutter_screenutil.dart';
- import 'package:location/utils/common_expand.dart';
- import '../../data/bean/member_status_info.dart';
- import '../../resource/string.gen.dart';
- class MineTrialMembershipCountdownText extends StatefulWidget {
- final MemberStatusInfo? memberStatusInfo;
- final VoidCallback? trialHasExpiredCallBack;
- const MineTrialMembershipCountdownText({
- super.key,
- this.memberStatusInfo,
- this.trialHasExpiredCallBack
- });
- @override
- State<MineTrialMembershipCountdownText> createState() => _MineTrialMembershipCountdownTextState();
- }
- class _MineTrialMembershipCountdownTextState extends State<MineTrialMembershipCountdownText> {
- late Timer _timer;
- String _countdownText = '';
- @override
- void initState() {
- super.initState();
- print("controllerffemberStatusInfos-B-${widget.memberStatusInfo}");
- _updateTime();
- // 创建倒计时定时器
- if (widget.memberStatusInfo?.trialed == true &&
- widget.memberStatusInfo?.level == 20 &&
- (widget.memberStatusInfo?.trialEndTimestamp ?? 0) > 0 ) {
- // 计算剩余时间
- DateTime remaining = DateTime.fromMillisecondsSinceEpoch(widget.memberStatusInfo!.trialEndTimestamp ?? 0);
- if (remaining.second > 0) {
- // 创建每秒更新一次的定时器
- _timer = Timer.periodic(Duration(seconds: 1), (_) => _updateTime());
- }
- }
- // _timer = Timer.periodic(widget.updateInterval, (_) => _updateTime());
- }
- void _updateTime() {
- print("widgetemberStatusInforialedsfsfdjs---${widget.memberStatusInfo?.trialed}---${(widget.memberStatusInfo?.level ?? 0)}");
- _countdownText = StringName.memberExperienceVip;
- if ((widget.memberStatusInfo?.trialed ?? false)) {
- ///正在使用
- if ((widget.memberStatusInfo?.level ?? 0) == 20) {
- _countdownisInProgress();
- } else {
- _timer.cancel();
- if (widget.trialHasExpiredCallBack != null) {
- widget.trialHasExpiredCallBack!();
- }
- //已经使用完了
- _countdownText = StringName.memberTrialHasExpired;
- }
- }
- if (mounted) {
- setState(() {});
- }
- }
- ///正在倒计时
- void _countdownisInProgress() {
- if (widget.memberStatusInfo?.trialEndTimestamp == null) {
- _countdownText = StringName.memberExperienceVip;
- return;
- }
- // 将时间戳转换为DateTime
- /*DateTime endTime;
- if (widget.timestampInSeconds) {
- // 时间戳单位为秒
- endTime = DateTime.fromMillisecondsSinceEpoch(widget.memberStatusInfo.endTimestamp! * 1000);
- } else {
- // 时间戳单位为毫秒
- endTime = DateTime.fromMillisecondsSinceEpoch(widget.memberStatusInfo.endTimestamp!);
- }*/
- DateTime endTime = DateTime.fromMillisecondsSinceEpoch(widget.memberStatusInfo!.trialEndTimestamp ?? 0);
- Duration remaining = endTime.difference(DateTime.now());
- if (remaining.inSeconds <= 0) {
- _countdownText = StringName.memberTrialHasExpired;
- _timer.cancel();
- } else {
- _countdownText = _formatDuration(remaining);
- _countdownText = '${StringName.memberCountdownRemaining} ${_countdownText} ${StringName.memberCountdownExperienceTime}';
- }
- }
- String _formatDuration(Duration duration) {
- String twoDigits(int n) => n.toString().padLeft(2, '0');
- String hours = twoDigits(duration.inHours);
- String minutes = twoDigits(duration.inMinutes.remainder(60));
- String seconds = twoDigits(duration.inSeconds.remainder(60));
- return '$hours:$minutes:$seconds';
- }
- @override
- void dispose() {
- _timer.cancel();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return Text(
- _countdownText,
- style: TextStyle(
- fontSize: 13.sp,
- color: "#8A5F03".color,
- fontWeight: FontWeight.bold
- )
- );
- }
- }
|