Flutter 如何在命名构造函数中使用async?

Flutter 如何在命名构造函数中使用async?,flutter,dart,Flutter,Dart,我创建了一个类,我想在命名构造函数中使用async,或者在类外部可访问的类中使用方法。当使命名构造函数返回未来类型时,我得到一个错误,它说:构造函数不能有返回类型 然后,我尝试删除Future类型,但仍然得到一个错误,即修饰符'async'不能应用于构造函数的主体 如何在命名构造函数中使用async class HttpService { Future<void> HttpService.getAll() async { final response = await ht

我创建了一个类,我想在命名构造函数中使用async,或者在类外部可访问的类中使用方法。当使命名构造函数返回
未来
类型时,我得到一个错误,它说:
构造函数不能有返回类型

然后,我尝试删除
Future
类型,但仍然得到一个错误,即
修饰符'async'不能应用于构造函数的主体

如何在命名构造函数中使用async

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) {}
  }
}
class-HttpService{
未来的HttpService.getAll()异步{
最终响应=等待http.get(
Uri.encodeFull('http://localhost:4000/'),
标题:{'headers':'application/json'},
);
如果(response.statusCode==200){}
}
}

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

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

解决方案:1(推荐)


构造函数不能是异步的。如果您发现自己需要一个异步构造函数,那么可以创建一个类似于异步工厂的
静态
异步方法。从调用者的角度来看,(以及有什么区别主要是支持使用
静态方法)。此外,您还可以使所有其他调用程序强制调用方使用
static
方法来获取类的实例


也就是说,在你的情况下,你甚至可能根本不需要上课。您是否打算在
HttpService
上使用其他方法?您的
HttpService
是否保持任何内部状态?如果没有,那么最好使用独立函数。

不要使用async to构造函数,为此创建一个单独的方法并在构造函数中调用它。如何才能在构造函数中异步调用?我是否可以在构造函数中调用它,然后当我调用该类时,我应该在那里添加
wait
?@Blasanka同样,这是最佳实践吗?如果您想要实现自己的方法,您可能需要看一看<代码>等待Dio()。获取(“http://www.google.com");实例化后调用异步方法是正确的方法。它将有其他方法,但不会保留任何内部状态。我是oop新手,我认为创建一个类来组合所有与http相关的方法是个好主意。什么是最佳实践?@Jessica总的来说,不同的方法适合不同的情况。如果您只想将一组函数组合在一起。
class Foo {
  static Future<void> fetch() async { // method
    await future();
  }
}
class Foo {
  Foo.named() { // named constructor
    future().then((_) {
      // future is completed do whatever you need
    });
  }
}