“字符串?”类型的值 无法返回,因为函数的返回类型为“Future<String>?”

use*_*563 3 future async-await dart flutter

文档说:

如果函数具有声明的返回类型,则将类型更新为Future<T>,其中T是函数返回值的类型。

当我使用此代码执行此操作时,出现错误:无法从方法“amethod”返回类型为“”的值,因为它的返回类型为。String?Future < String>?

为什么会出现该错误?从函数返回非空值的正确方法是什么async?谢谢。

class Demo{
  
 Future<String>? amethod() async{
 String? variable1;
   
   //await ...
   
  return variable1;    
 }
}
Run Code Online (Sandbox Code Playgroud)

jam*_*lin 11

您的函数想要返回variable1类型为 的函数String?。由于该函数是异步的,因此其返回类型必须是Future<String?>, 而不是Future<String>?。两者并不相同:

  • 返回类型Future<String>?意味着该函数返回null或 a Future。这就Future完成了一个不可为空的String。这几乎不是您想要的返回类型。
  • 返回类型Future<String?>意味着该函数始终返回 a Future,从不返回null。这样就Future完成了null或 a String