post static method

Future<Map<String, dynamic>?> post({
  1. required String bridgeIpAddr,
  2. String? pathToResource,
  3. required String applicationKey,
  4. required ResourceType? resourceType,
  5. required String body,
  6. String decrypter(
    1. String ciphertext
    )?,
})

Create a new resource.

bridgeIpAddr is the IP address of the target bridge.

If a specific resource is being queried, include pathToResource. This is most likely the resource's ID.

applicationKey is the key associated with this devices in the bridge's whitelist.

The resourceType is used to let the bridge know what type of resource is being queried.

body is the actual content being sent to the bridge.

decrypter When the old tokens are read from local storage, they are decrypted. This parameter allows you to provide your own decryption method. This will be used in addition to the default decryption method. This will be performed after the default decryption method.

May throw ExpiredAccessTokenException if trying to connect to the bridge remotely and the token is expired. If this happens, refresh the token with TokenRepo.refreshRemoteToken.

Implementation

static Future<Map<String, dynamic>?> post({
  required String bridgeIpAddr,
  String? pathToResource,
  required String applicationKey,
  required ResourceType? resourceType,
  required String body,
  String Function(String ciphertext)? decrypter,
}) async {
  return await HueHttpClient.post(
    url: getTargetUrl(
      bridgeIpAddr: bridgeIpAddr,
      resourceType: resourceType,
      pathToResource: pathToResource,
      isRemote: false,
    ),
    applicationKey: applicationKey,
    token: null,
    body: body,
  ).timeout(
    const Duration(seconds: 1),
    onTimeout: () async {
      String? token = await TokenRepo.fetchToken(decrypter: decrypter);

      return await HueHttpClient.post(
        url: getTargetUrl(
          bridgeIpAddr: bridgeIpAddr,
          resourceType: resourceType,
          pathToResource: pathToResource,
          isRemote: true,
        ),
        applicationKey: applicationKey,
        token: token,
        body: body,
      );
    },
  );
}