Reputation: 1484
The documentation says:
If the function has a declared return type, then update the type to be
Future<T>
, whereT
is the type of the value that the function returns.
When I do that with this code, I get an error: A value of type 'String?
' can't be returned from the method 'amethod' because it has a return type of Future < String>?
.
Why is it giving that error and what is the correct way to return a non-void value from an async
function? Thanks.
class Demo{
Future<String>? amethod() async{
String? variable1;
//await ...
return variable1;
}
}
Upvotes: 4
Views: 12333
Reputation: 89926
Your function wants to return variable1
, which is of type String?
. Since the function is asynchronous, its return type must be Future<String?>
, not Future<String>?
. The two are not the same:
Future<String>?
means that the function returns either null
or a Future
. That Future
completes to a non-nullable String
. This is almost never what you want as a return type.Future<String?>
means that the function always returns a Future
, never null
. That Future
completes to either null
or a String
.Upvotes: 12
Reputation: 1981
You need change Future<String>?
to Future<String?>?
or Future<String?>
Upvotes: 3