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

Jes*_*ica 2 dart flutter

我创建了一个类,我想在命名构造函数或类中可在类外访问的方法中使用异步。当进行命名的建筑工返回一个Future类型,我得到一个错误说:Constructors can't have a return type

然后我尝试删除Future类型,但我仍然收到一条错误消息,说The modifier 'async' can't be applied to the body of a constructor.

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

class HttpService {
  Future<void> HttpService.getAll() async {
    final response = await http.get(
      Uri.encodeFull('http://localhost:4000/'),
      headers: {'headers': 'application/json'},
    );

    if (response.statusCode == 200) {}
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Cop*_*oad 7

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

解决方案:1(推荐)

class Foo {
  static Future<void> fetch() async { // method
    await future();
  }
}
Run Code Online (Sandbox Code Playgroud)

解决方案:2

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


jam*_*lin 5

构造函数不能是异步的。如果您发现自己需要一个异步构造函数,您可以创建一个static像异步工厂一样工作的异步方法。从调用者的角度来看,没有太大区别(并且有哪些区别主要有利于拥有static方法)。您还可以将所有其他构造函数(包括默认构造函数)设为私有,以强制调用者使用该static方法来获取您的类的实例。

也就是说,就而言,您甚至可能根本不需要课程。您打算在 上使用其他方法HttpService吗?您是否在HttpService维护任何内部状态?如果没有,那么您最好使用独立功能。


归档时间:

查看次数:

3210 次

最近记录:

6 年,2 月 前