mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Add support for countdown posts
This commit is contained in:
		@@ -15,6 +15,7 @@ import 'package:comunic/models/post.dart';
 | 
			
		||||
import 'package:comunic/models/user.dart';
 | 
			
		||||
import 'package:comunic/ui/tiles/comment_tile.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/account_image_widget.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/countdown_widget.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/network_image_widget.dart';
 | 
			
		||||
import 'package:comunic/ui/widgets/survey_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/date_utils.dart';
 | 
			
		||||
@@ -176,6 +177,10 @@ class _PostTileState extends State<PostTile> {
 | 
			
		||||
        postContent = _buildPostWebLink();
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case PostKind.COUNTDOWN:
 | 
			
		||||
        postContent = _buildCountDownTimer();
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
      case PostKind.SURVEY:
 | 
			
		||||
        postContent = _buildPostSurvey();
 | 
			
		||||
        break;
 | 
			
		||||
@@ -320,6 +325,13 @@ class _PostTileState extends State<PostTile> {
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Widget _buildCountDownTimer() {
 | 
			
		||||
    return CountdownWidget(
 | 
			
		||||
      startTime: widget.post.timeSent,
 | 
			
		||||
      endTime: widget.post.timeEnd,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Build post survey
 | 
			
		||||
  Widget _buildPostSurvey() {
 | 
			
		||||
    return SurveyWidget(
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										84
									
								
								lib/ui/widgets/countdown_widget.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								lib/ui/widgets/countdown_widget.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
import 'dart:async';
 | 
			
		||||
 | 
			
		||||
import 'package:comunic/utils/date_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
/// Countdown widget
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre HUBERT
 | 
			
		||||
 | 
			
		||||
class CountdownWidget extends StatefulWidget {
 | 
			
		||||
  final int startTime;
 | 
			
		||||
  final int endTime;
 | 
			
		||||
 | 
			
		||||
  const CountdownWidget({
 | 
			
		||||
    Key key,
 | 
			
		||||
    @required this.startTime,
 | 
			
		||||
    @required this.endTime,
 | 
			
		||||
  })  : assert(startTime != null),
 | 
			
		||||
        assert(endTime != null),
 | 
			
		||||
        super(key: key);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  _CountdownWidgetState createState() => _CountdownWidgetState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _CountdownWidgetState extends State<CountdownWidget> {
 | 
			
		||||
  int get remainingTime => widget.endTime - time();
 | 
			
		||||
 | 
			
		||||
  int get totalDuration => (widget.endTime - widget.startTime).abs();
 | 
			
		||||
 | 
			
		||||
  String get remainingTimeStr {
 | 
			
		||||
    final remaining = Duration(seconds: remainingTime);
 | 
			
		||||
 | 
			
		||||
    return tr(
 | 
			
		||||
      "%days% Days %hours% Hours %minutes% Minutes %seconds% Seconds",
 | 
			
		||||
      args: {
 | 
			
		||||
        "days": remaining.inDays.toString(),
 | 
			
		||||
        "hours": (remaining.inHours % 24).toString(),
 | 
			
		||||
        "minutes": (remaining.inMinutes % 60).toString(),
 | 
			
		||||
        "seconds": (remaining.inSeconds % 60).toString(),
 | 
			
		||||
      },
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void initState() {
 | 
			
		||||
    super.initState();
 | 
			
		||||
 | 
			
		||||
    Timer.periodic(Duration(seconds: 1), _timerCb);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _timerCb(Timer timer) {
 | 
			
		||||
    if (!mounted) timer.cancel();
 | 
			
		||||
 | 
			
		||||
    setState(() {});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Container(
 | 
			
		||||
      width: 300,
 | 
			
		||||
      child: Column(
 | 
			
		||||
        children: <Widget>[
 | 
			
		||||
          Padding(
 | 
			
		||||
            padding: const EdgeInsets.all(8.0),
 | 
			
		||||
            child: Text(remainingTimeStr),
 | 
			
		||||
          ),
 | 
			
		||||
          Padding(
 | 
			
		||||
            padding: const EdgeInsets.all(8.0),
 | 
			
		||||
            child: LinearProgressIndicator(
 | 
			
		||||
              value: remainingTime <= 0
 | 
			
		||||
                  ? 1.0
 | 
			
		||||
                  : 1 - (remainingTime / totalDuration),
 | 
			
		||||
              backgroundColor: Theme.of(context).accentColor,
 | 
			
		||||
              valueColor: AlwaysStoppedAnimation<Color>(
 | 
			
		||||
                  Theme.of(context).backgroundColor),
 | 
			
		||||
            ),
 | 
			
		||||
          )
 | 
			
		||||
        ],
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user