此方法提交一个简单的HTTP请求,并调用成功或错误回调:

  void _getSimpleReply( String command, callback, errorCallback ) async {

    try {

      HttpClientRequest request = await _myClient.get( _serverIPAddress, _serverPort, '/' );

      HttpClientResponse response = await request.close();

      response.transform( utf8.decoder ).listen( (onData) { callback( onData ); } );

    } on SocketException catch( e ) {

      errorCallback( e.toString() );

    }
  }

如果服务器没有运行,Android应用程序或多或少会立即调用errorCallback.

在iOS上,errorCallback需要很长的时间-超过20秒-直到调用任何回调.

May I set for HttpClient() a maximum number of seconds to wait for the server side to return a reply - if any?

推荐答案

有两种不同的方法可以在Dart中配置此行为

设置每个请求的超时时间

您可以使用Future.timeout方法设置任何Future的超时.这将在给定的持续时间过后通过抛出TimeoutException而短路.

try {
  final request = await client.get(...);
  final response = await request.close()
    .timeout(const Duration(seconds: 2));
  // rest of the code
  ...
} on TimeoutException catch (_) {
  // A timeout occurred.
} on SocketException catch (_) {
  // Other exception
}

在HttpClient上设置超时

您还可以使用HttpClient.connectionTimeout在HttpClient本身上设置超时.这将适用于设置超时后由同一客户端发出的所有请求.当请求超过此超时时间时,将抛出SocketException.

final client = new HttpClient();
client.connectionTimeout = const Duration(seconds: 5);

Flutter相关问答推荐

如何让GridView.builder用另外两个小部件来占据屏幕的剩余部分

MobX Build_Runner问题:不生成.G文件(Flutter )

自定义ItemBuilderFlutter

分页控制器在到达页面末尾之前或在初始化页面时对每个索引调用API

在选项卡栏视图中搜索和筛选不起作用

无法在仿真器上运行Flutter 项目-文件名太长错误

如何处理平台游戏的对象冲突?

Flutter 附近的连接

Flutter:我应该使用哪种应用内购买服务?

为什么我们需要使用ChangeNotifierProvider而不是仅仅使用ChangeNotifier?

从所有设备注销,因为用户帐户已从 firebase flutter 中删除

Flutter Firebase 升级后出现问题? ARC 语义问题 (Xcode): Select 器appleCredentialWithIDToken:rawNonce:fullName:没有已知的类方法

从子集合sem中获取参考学年&&课程名称的值

如何在 Flutter 中使用 drawLine() 和 drawCircle() 绘制等距离的 4 条线

在 Flutter 中读取 Firebase 数据库数据时遇到问题

如何格式化网址?

如何在 flutter 的 onChanged(更改字符)处更改 TextField 边框 colored颜色 ?

如何将金钱格式化为数以百万计的Flutter 动?

Firestore:缓存和读取数据

使用 Firebase/Flutter 进行应用判断 - 100% 无效请求