# setWatermark method Null safety

Future<void> setWatermark(

1. String assetUrl,
2. int streamType,
3. double x,
4. double y,
5. double width

)

Add watermark

The watermark position is determined by the `x`, `y`, and `width` parameters.

- x: X coordinate of watermark, which is a floating point number between 0 and 1.
- y: Y coordinate of watermark, which is a floating point number between 0 and 1.
- width: width of watermark, which is a floating point number between 0 and 1.

For example, if the current encoding resolution is 540x960 and `(x, y, width)` is set to (0.1, 0.1, 0.2), then the coordinates of the top-left point of the watermark will be (540 * 0.1, 960 * 0.1), i.e., (54, 96), the watermark width will be 540 * 0.2 = 108 px, and the height will be calculated automatically.

Parameters:

`assetUrl` can be an asset resource address defined in Flutter such as 'images/watermark_img.png' or an online image address

streamType `setWatermark` needs to be called twice if the screen sharing channel also requires a watermark. For more information, please see `TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG`

x Unified X coordinate of the watermark position. Value range: `0,1`

y Unified Y coordinate of the watermark position. Value range: `0,1`

width Unified width of the watermark. Value range: `0,1`

## Implementation

    Future<void> setWatermark(
        String assetUrl, // Resource address in `assets`
        int streamType,
        double x,
        double y,
        double width) async {
      String imageUrl = assetUrl;
      String type = 'network'; // Online image by default
      if (assetUrl.indexOf('http') != 0) {
        type = 'local';
      }
      return _channel.invokeMethod('setWatermark', {
        "type": type,
        "imageUrl": imageUrl,
        "streamType": streamType,
        "x": x.toString(),
        "y": y.toString(),
        "width": width.toString()
      });
    }