flutter - 如何在 dart/flutter 中收听流值

代码 代码 1456 人阅读 | 0 人回复

<
flutter - 怎样正在 dart/flutter 中支听流值

任何人协助逃踪音频的地位(即)
  1.    if(durationtoOne(position==5)){
  2. FlutterToast.Showtoast(msg:"I am At 5 sec");
  3. }
复造代码
假如正在 initstate 中增加呈现毛病,我会被困正在那边增加此代码,
我念经由过程音频仄台支听地位
代码从那里开端
  1.   import &#39;dart:async&#39;;
  2.     import &#39;package:assets_audio_player/assets_audio_player.dart&#39;;
  3.     import &#39;package:flutter/material.dart&#39;;
  4.     import &#39;package:fluttertoast/fluttertoast.dart&#39;;
  5.     class SmartMantra extends StatefulWidget {
  6.     @override
  7.   _SmartMantraState createState() => _SmartMantraState();
  8. }
  9. class _SmartMantraState extends State<SmartMantra> {
  10.   StreamSubscription _positionSubscription;
  11.   Duration position;
  12.   AssetsAudioPlayer _assetsAudioPlayer;
  13.   stream() {
  14.     _positionSubscription = _assetsAudioPlayer.currentPosition
  15.         .listen((p) => setState(() => position = p),);
  16.   }
  17.   @override
  18.   void initState() {
  19.     _assetsAudioPlayer.open("assets/shivamantra.mp3");
  20.     stream();
  21.     _assetsAudioPlayer.finished.listen((finished) {
  22.       print(finished);
  23. //      print(count);
  24.     });
  25.     super.initState();
  26.   }
  27.   @override
  28.   void dispose() {
  29.     _positionSubscription.cancel();
  30.     super.dispose();
  31.   }
  32.   @override
  33.   Widget build(BuildContext context) {
  34.     return Scaffold(
  35.         body: Column(
  36.           children: <Widget>[
  37.             SizedBox(
  38.               height: 70,
  39.             ),
  40.             Center(
  41.               child: Text(
  42.                durationToone(position).toString(),
  43.                 style: TextStyle(color: Colors.black, fontSize: 12),
  44.               ),
  45.             ),
  46.             //getTextContainer()
  47.           ],
  48.         ));
  49.   }
  50. int durationToone(Duration duration) {
  51.   int twoDigits(int n) {
  52.     if (n >= 10) return n;
  53.     return n;
  54.   }
  55.   int twoDigitSeconds =
  56.       twoDigits(duration.inSeconds.remainder(Duration.secondsPerMinute));
  57.   return twoDigitSeconds;
  58. }
  59. }
复造代码
代码到此完毕
总结:正在特定地位需求正在地位变革时触收一些函数(即)
  1. if(durationtoOne(position==5)){
  2. FlutterToast.Showtoast(msg:"I am At 5 sec");
  3. }
复造代码
经由过程音频播放或使用法式正在前台
最好谜底
假如流没有是播送流,则您只能支听一次。
请参阅此 Medium post 以了解有闭 Streams 的更多疑息。
支听 stream 时,您需求正在 _assetsAudioPlayer.currentPosition 函数中增加您的代码。
  1. import &#39;dart:async&#39;;
  2. import &#39;package:assets_audio_player/assets_audio_player.dart&#39;;
  3. import &#39;package:flutter/material.dart&#39;;
  4. import &#39;package:fluttertoast/fluttertoast.dart&#39;;
  5. class SmartMantra extends StatefulWidget {
  6.     @override
  7.     _SmartMantraState createState() => _SmartMantraState();
  8. }
  9. class _SmartMantraState extends State<SmartMantra> {
  10.     StreamSubscription _positionSubscription;
  11.     Duration position;
  12.     AssetsAudioPlayer _assetsAudioPlayer;
  13.     stream() {
  14.         _positionSubscription = _assetsAudioPlayer.currentPosition
  15.             .listen((p) {
  16.                 setState(() => position = p));
  17.                 // You should add your code here
  18.                 if(durationtoOne(position==5)){
  19.                     FlutterToast.Showtoast(msg:"I am At 5 sec");
  20.                 }
  21.             }
  22.     }
  23.     @override
  24.     void initState() {
  25.         _assetsAudioPlayer.open("assets/shivamantra.mp3");
  26.         stream();
  27.         _assetsAudioPlayer.finished.listen((finished) {
  28.             print(finished);
  29. //          print(count);
  30.         });
  31.         super.initState();
  32.     }
  33.     @override
  34.     void dispose() {
  35.         _positionSubscription.cancel();
  36.         super.dispose();
  37.     }
  38.     @override
  39.     Widget build(BuildContext context) {
  40.         return Scaffold(
  41.             body: Column(
  42.                 children: <Widget>[
  43.                 SizedBox(
  44.                     height: 70,
  45.                 ),
  46.                 Center(
  47.                     child: Text(
  48.                         durationToone(position).toString(),
  49.                         style: TextStyle(color: Colors.black, fontSize: 12),
  50.                     ),
  51.                 ),
  52.                 //getTextContainer()
  53.             ],
  54.         ));
  55.     }
  56.     int durationToone(Duration duration) {
  57.         int twoDigits(int n) {
  58.             if (n >= 10) return n;
  59.             return n;
  60.         }
  61.         int twoDigitSeconds =
  62.             twoDigits(duration.inSeconds.remainder(Duration.secondsPerMinute));
  63.         return twoDigitSeconds;
  64.     }
  65. }
复造代码
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则