Reputation: 11
How do you check if an async void method is completed in Dart?
Upvotes: 1
Views: 2045
Reputation: 1216
Method 1:
await voidFoo();
print("the above function was completed");
Future<void> voidFoo() async{
await Future.delayed(Duration(seconds:1));
}
Method 2:
Using a boolean variable like this,
bool isCompleted = false;
...
await voidFoo();
Future<void> voidFoo() async{
await Future.delayed(Duration(seconds:1));
isCompleted = true; //assuming isCompleted can be accessed here
}
Edit: I recommend @pskink's comment.
async method return a Future so use Future.then method
Here is an example of that
Future<void> voidFoo() async {
await Future.delayed(Duration(seconds: 1));
}
voidFoo().then((_) {
print("done");
});
Upvotes: 0
Reputation: 443
You can create an extension function on future and use Extension function like below:
extension FutureExtension<T> on Future<T> {
Future<T> timed(String tag) {
var start = DateTime.now();
return whenComplete(() {
var d = DateTime.now().difference(start);
print("$tag finished in ${d.inMilliseconds / 1000}s");
});
}
}
Future<void> foo() async {
await Future.delayed(Duration(seconds: 3), () {
print('foo completed');
});
}
void main() {
foo().timed("Foo");
}
Output:
foo completed
Foo finished in 3.644s
Upvotes: 0
Reputation: 59
There are too many methods to do this i prefer to do this
Future<void> myFunction() async {
await Future.delayed(Duration(seconds: 3)); // your future operation
}
main() async {
await myFunction();
print("finished");
}
Upvotes: 0
Reputation: 1783
You can use dart Completer.
import 'dart:async';
void main() async {
final completer = Completer<String>();
Future<String> getHttpData()async{
return Future.delayed(const Duration(seconds: 1), () => "Future Result");
}
Future<String> asyncQuery()async {
final httpResponse = await getHttpData();
completer.complete(httpResponse);
return completer.future;
}
print('IsCompleted: ${completer.isCompleted}');
await asyncQuery();
print('IsCompleted: ${completer.isCompleted}');
}
Result;
IsCompleted: false
IsCompleted: true
Upvotes: -1