【发布时间】:2018-10-21 17:10:26
【问题描述】:
当我的无状态小部件构建时,我使用以下代码按顺序播放一些声音:
await _audioPlayer.play(contentPath1, isLocal: true);
await Future.delayed(Duration(seconds: 4));
await _audioPlayer.play(contentPath2, isLocal: true);
await Future.delayed(Duration(seconds: 4));
await _audioPlayer.play(contentPath3, isLocal: true);
当用户在播放完声音之前关闭当前小部件时,使用此代码关闭当前路由后声音仍然有效:
Navigator.pop(context);
我的解决方法是使用布尔变量来指示关闭操作是否已完成。
播放声音代码:
await _audioPlayer.play(contentPath1, isLocal: true);
if (closed) return;
await Future.delayed(Duration(seconds: 4));
if (closed) return;
await _audioPlayer.play(contentPath2, isLocal: true);
if (closed) return;
await Future.delayed(Duration(seconds: 4));
if (closed) return;
await _audioPlayer.play(contentPath3, isLocal: true);
关闭当前小部件:
closed = true;
_audioPlayer.stop();
如果我的小部件关闭,是否有更好的方法来停止异步方法?
【问题讨论】:
-
dispose 是一个来自 State 的方法,所以你应该使用 StatefulWidget
-
我已将小部件更改为有状态小部件并覆盖“dispose”方法以更改“关闭”值并且它可以工作,但是这种解决方案减少了他们需要从关闭按钮更改“关闭”值,但我正在寻找一种方法来避免声明“关闭”变量并在所有未来调用之后进行“if”检查。我需要一种方法来取消所有未来的电话。@diegoveloper