Flutter - Create a countdown widget

前端 未结 5 1919
没有蜡笔的小新
没有蜡笔的小新 2021-02-05 20:58

I am trying to build a countdown widget. Currently, I got the structure to work. I only struggle with the countdown itself. I tried this approach using the countdown plugin:

5条回答
  •  不思量自难忘°
    2021-02-05 21:45

    It sounds like you are trying to show an animated text widget that changes over time. I would use an AnimatedWidget with a StepTween to ensure that the countdown only shows integer values.

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(new MaterialApp(
        home: new MyApp(),
      ));
    }
    
    class Countdown extends AnimatedWidget {
      Countdown({ Key key, this.animation }) : super(key: key, listenable: animation);
      Animation animation;
    
      @override
      build(BuildContext context){
        return new Text(
          animation.value.toString(),
          style: new TextStyle(fontSize: 150.0),
        );
      }
    }
    
    class MyApp extends StatefulWidget {
      State createState() => new _MyAppState();
    }
    
    class _MyAppState extends State with TickerProviderStateMixin {
      AnimationController _controller;
    
      static const int kStartValue = 4;
    
      @override
      void initState() {
        super.initState();
        _controller = new AnimationController(
          vsync: this,
          duration: new Duration(seconds: kStartValue),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          floatingActionButton: new FloatingActionButton(
            child: new Icon(Icons.play_arrow),
            onPressed: () => _controller.forward(from: 0.0),
          ),
          body: new Container(
            child: new Center(
              child: new Countdown(
                animation: new StepTween(
                  begin: kStartValue,
                  end: 0,
                ).animate(_controller),
              ),
            ),
          ),
        );
      }
    }
    

提交回复
热议问题