我正在切换库,但我的界面是 getDuration
返回 Duration
由于引用过多,我无法更改此设置。
所以我必须返回Duration
而不是 Future<Duration>
在 AudioPlayer
类(class)。
有什么办法吗?
这是解释我想要做什么的可执行代码。
import 'dart:core';
import 'dart:async';
// This interface is hardly to modify becase this is referenced from many place.
abstract class IAudioPlayer {
Duration getDuration();
}
// This is old library that returns `Duration`
class OldLibraryAudioPlayer {
Duration getDuration() {
return Duration(seconds: 1);
}
}
// This is new library that returns `Future<Duration>`
class NewLibraryAudioPlayer {
Future<Duration> getDuration() async {
var completer = new Completer<Duration>();
new Timer(new Duration(seconds: 1),
() => completer.complete(Duration(seconds: 1)));
return completer.future;
}
}
class AudioPlayer implements IAudioPlayer {
// OldLibraryAudioPlayer _player = OldLibraryAudioPlayer();
NewLibraryAudioPlayer _player = NewLibraryAudioPlayer();
@override
Duration getDuration() {
// I want to return Duration instead of Future<Duration>.
return _player.getDuration();
}
}
void main() {
final player = AudioPlayer();
final duration = player.getDuration();
print('$duration');
}
最佳答案
您需要将函数转换为 async
或者直接返回结果。
例子:
Future<Duration> getDuration() async {
final duration = await player.getDuration();
return duration;
}
或者
Future<Duration> getDuration() {
return player.getDuration();
}
希望有帮助!
关于flutter - 如何在 Dart 中返回 Future<T> 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022684/