Package io.flutter.view

# Interface TextureRegistry.SurfaceProducer

All Superinterfaces:
  `TextureRegistry.TextureEntry`

Enclosing interface:
  TextureRegistry

public static interface TextureRegistry.SurfaceProducer extends TextureRegistry.TextureEntry
Uses a Surface to populate the texture.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Interface
  Description
  `static interface`
  `TextureRegistry.SurfaceProducer.Callback`
  Callback invoked by `setCallback(Callback)`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `getHeight()`
  `Surface`
  `getSurface()`
  Direct access to the surface object.
  `int`
  `getWidth()`
  `boolean`
  `handlesCropAndRotation()`
  Returns whether the current rendering path handles crop and rotation metadata.
  `void`
  `scheduleFrame()`
  This method is not officially part of the public API surface and will be deprecated.
  `void`
  `setCallback(TextureRegistry.SurfaceProducer.Callback callback)`
  Sets a callback that is notified when a previously created `Surface` returned by `getSurface()` is no longer valid due to being destroyed, or a new surface is now available (after the previous one was destroyed) for rendering.
  `void`
  `setSize(int width, int height)`
  Specify the size of this texture in physical pixels

  ### Methods inherited from interface io.flutter.view.TextureRegistry.TextureEntry

  `id, release`

- ## Method Details

  - ### setSize

    void setSize(int width, int height)
    Specify the size of this texture in physical pixels

  - ### getWidth

    int getWidth()
    Returns:
      The currently specified width (physical pixels)

  - ### getHeight

    int getHeight()
    Returns:
      The currently specified height (physical pixels)

  - ### getSurface

    Surface getSurface()
    Direct access to the surface object.

    When using this API, you will usually need to implement `TextureRegistry.SurfaceProducer.Callback` and provide it to `setCallback(Callback)` in order to be notified when an existing surface has been destroyed (such as when the application goes to the background) or a new surface has been created (such as when the application is resumed back to the foreground).

    NOTE: You should not cache the returned surface but instead invoke `getSurface` each time you need to draw. The surface may change when the texture is resized or has its format changed.

    Returns:
      a Surface to use for a drawing target for various APIs.

  - ### setCallback

    void setCallback(TextureRegistry.SurfaceProducer.Callback callback)
    Sets a callback that is notified when a previously created `Surface` returned by `getSurface()` is no longer valid due to being destroyed, or a new surface is now available (after the previous one was destroyed) for rendering.
    Parameters:
      `callback` - The callback to notify, or null to remove the callback.

  - ### scheduleFrame

    void scheduleFrame()
    This method is not officially part of the public API surface and will be deprecated.

  - ### handlesCropAndRotation

    boolean handlesCropAndRotation()
    Returns whether the current rendering path handles crop and rotation metadata.

    On most newer Android devices (API 29+), a `ImageReader` backend is used, which has more features, works in new graphic backends directly (such as Impeller's Vulkan backend), and is the Android recommended solution. However, crop and rotation metadata are not handled automatically, and require plugin authors to make appropriate changes ().

         void example(SurfaceProducer producer) {
           bool supported = producer.handlesCropAndRotation();
           if (!supported) {
               // Manually rotate/crop, either in the Android plugin or in the Dart framework layer.
           }
         }

    Returns:
      `true` if crop and rotation is handled automatically, `false` otherwise.