如何创建在使用 AnimationController 创建的倒数计时器期间发出的警报?

Posted

技术标签:

【中文标题】如何创建在使用 AnimationController 创建的倒数计时器期间发出的警报?【英文标题】:How to create an alarm that goes during a countdown timer created with an AnimationController? 【发布时间】:2020-08-23 15:14:21 【问题描述】:

我使用动画控制器创建了一个倒数计时器,方法如下(发布在下面)。我知道在计时器完成时执行代码,但我想知道是否有办法在倒数计时器仍在运行时在一定时间后执行函数。在这种情况下,我想在计时器完成前 10 秒发出警报声,让用户知道他们的时间快到了。任何帮助将不胜感激。

class Timer extends StatefulWidget 
  @override
  State<StatefulWidget> createState() 
    return _TimerState();
  


class _TimerState extends State<Timer> with SingleTickerProviderStateMixin 
  AnimationController _controller;
  int _timerDuration = 2;
  @override
  void initState() 
    super.initState();

    _controller = AnimationController(
        vsync: this, duration: Duration(minutes: _timerDuration));
  

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Countdown(
            animation: StepTween(
              begin: _timerDuration * 60,
              end: 0,
            ).animate(_controller),
          ),
        ),
      ),
    );
  

  @override
  void dispose() 
    _controller.dispose();
    super.dispose();
  



class Countdown extends AnimatedWidget 
  Countdown(Key key, this.animation) : super(key: key, listenable: animation);
  Animation<int> animation;

  @override
  build(BuildContext context) 
    Duration clockTimer = Duration(seconds: animation.value);

    String timerText =
        '$clockTimer.inMinutes.remainder(60).toString():$(clockTimer.inSeconds.remainder(60) % 60).toString().padLeft(2, '0')';

    return Text(
      "$timerText",
    );
  

 

【问题讨论】:

【参考方案1】:

你需要设置一个定时器并设置回调来播放声音:

Timer(Duration(<Your duration minus 10 sec>), () 
      // play the sound here
    );

要播放声音,请查看此帖子:https://fluttercentral.com/Articles/Post/1234/How_to_play_an_audio_file_in_flutter

【讨论】:

我试了你贴的方法,在动画倒计时所反映的指定时间,定时器和回调没有播放。在这种情况下,它应该在时钟出现 10 秒时播放,但计时器本身直到 8 秒标记才工作。 你的问题似乎是同步。问题是 AnimatedWidget 与时间和帧速率不完全同步。您将需要一种方法来跟踪帧速率内的时间(在构建方法内)。我建议您跟踪初始时间戳 (DateTime.now()) 并在 build 方法中调用一个函数,该函数将计算经过的时间并在时间超过所需持续时间时开始播放声音。我可以在下班时发布一个示例。 不要忘记之前加载声音,如果在声音应该开始播放的那一刻加载,可能会导致延迟。 谢谢,我们将不胜感激。期待这个例子。

以上是关于如何创建在使用 AnimationController 创建的倒数计时器期间发出的警报?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac 上的“邮件”中创建和使用电子邮件签名?

如何使用动态用户输入在 plsql 中使用函数/过程创建表

如何创建在使用 AnimationController 创建的倒数计时器期间发出的警报?

在 R 中使用“foreach()”函数时如何创建进度条?

如何使用本机反应创建登录以及如何验证会话

如何在 Android 中使用 xml 创建这个特定的形状?