如何在命名构造函数中使用异步?

时间:2019-09-18 03:23:55

标签: flutter dart

我创建了一个类,并且我想在命名构造函数中使用异步,或者要在该类之外访问该类中的方法。使命名构造函数返回evaluate()类型时,出现错误消息:Function

然后我尝试删除Future类型,但仍然收到错误消息Constructors can't have a return type

如何在命名构造函数中使用异步?

Future

我是新手,所以我可能使用错了吗?接受任何指导。

2 个答案:

答案 0 :(得分:2)

构造函数不能异步。如果发现自己需要异步构造函数,则可以制作一个像异步工厂一样的static异步方法。从调用者的角度来看,there isn't much difference(以及有什么区别主要是偏爱使用static方法)。您还可以使所有其他constructors (including the default constructor) private强制调用者使用static方法来获取您的类的实例。

也就是说,在您的情况下,您甚至根本不需要一个类。您是否打算在HttpService上使用其他方法?您的HttpService是否保持任何内部状态?如果没有,那么拥有独立功能会更好。

答案 1 :(得分:0)

您不能在构造函数中使用async。您应该为此创建一个单独的方法。

解决方案:1(推荐)

class Foo {
  static Future<void> fetch() async { // method
    await future();
  }
}

解决方案:2

class Foo {
  Foo.named() { // named constructor
    future().then((_) {
      // future is completed do whatever you need
    });
  }
}