ensureConnected method

Future<void> ensureConnected()

确保已连接

Implementation

Future<void> ensureConnected() async {
  if (disconnected || disposed) {
    throw Exception("Peripheral has been disconnected of disposed");
  }
  if (connected) {
    return;
  }
  if (ensureConnectedFuture != null) {
    return ensureConnectedFuture;
  }
  Completer<void> completer = Completer();
  void Function()? clear;
  void connectedHandler(peripheral) {
    if (clear != null) {
      clear();
    }
    completer.complete();
  }

  void disconnectedHandler(peripheral) {
    if (clear != null) {
      clear();
    }
    completer.completeError("connect fail");
  }

  void connectedErrorHandler(peripheral, error) {
    if (clear != null) {
      clear();
    }
    completer.completeError("connect error");
  }

  clear = () {
    removeConnectedListener(connectedHandler);
    removeDisconnectedListener(disconnectedHandler);
    removeConnectErrorListener(connectedErrorHandler);
  };
  addConnectedListener(connectedHandler);
  addDisconnectedListener(disconnectedHandler);
  addConnectErrorListener(connectedErrorHandler);
  if (!connecting) {
    connect();
  }
  ensureConnectedFuture = completer.future;
  return ensureConnectedFuture!;
}