📜  如何仅在颤振中显示日期 - Dart (1)

📅  最后修改于: 2023-12-03 14:51:44.615000             🧑  作者: Mango

如何仅在颤振中显示日期 - Dart

在某些场景下,我们只需要在颤振或者其他动画效果中显示当前的日期,而不需要一直实时更新,可以使用Flutter中的AnimationController来实现。

步骤
  1. 首先,我们需要创建一个AnimationController,并定义一个时长,例如使用Duration(seconds: 1)表示1秒钟切换一次。
AnimationController _controller;

@override
void initState() {
  super.initState();
  _controller = AnimationController(
    vsync: this,
    duration: Duration(seconds: 1),
  )..repeat();
}
  1. 然后,我们需要定义一个Animation,该Animation的动画值将在每次动画循环中更新,并用于显示当前的日期。
Animation<double> _animation;

@override
void initState() {
  super.initState();
  _controller = AnimationController(
    vsync: this,
    duration: Duration(seconds: 1),
  )..repeat();

  _animation = Tween<double>(begin: 0, end: 1).animate(_controller);
}
  1. 最后,我们可以使用TickerProviderStateMixin中的TickerProviderStateMixin来将自定义的State混入到SingleTickerProviderStateMixin中,以便于AnimationController获取Ticker并进行更新。
class _DateShakeWidgetState extends State<DateShakeWidget>
    with SingleTickerProviderStateMixin {
  AnimationController _controller;
  Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: 1),
    )..repeat();

    _animation = Tween<double>(begin: 0, end: 1).animate(_controller);
  }

  @override
  Widget build(BuildContext context) {
    return Text(
      DateTime.now().toString(),
      style: TextStyle(
        fontWeight: FontWeight.bold,
        fontSize: 24.0,
        color: Colors.black.withOpacity(_animation.value),
      ),
    );
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}
结论

使用AnimationControllerAnimation可以快速实现在动画中显示当前的日期,本例演示的方法可以应用于其他需要在动画中显示固定内容的场景。