Package io.flutter.embedding.android

# Class FlutterView

java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
io.flutter.embedding.android.FlutterView

All Implemented Interfaces:
  `Drawable.Callback`, `AccessibilityEventSource`, `KeyEvent.Callback`, `ViewManager`, `ViewParent`, `KeyboardManager.ViewDelegate`, `io.flutter.plugin.mouse.MouseCursorPlugin.MouseCursorViewDelegate`

public class FlutterView extends FrameLayout implements io.flutter.plugin.mouse.MouseCursorPlugin.MouseCursorViewDelegate, KeyboardManager.ViewDelegate
Displays a Flutter UI on an Android device.

A `FlutterView`'s UI is painted by a corresponding `FlutterEngine`.

A `FlutterView` can operate in 2 different `RenderMode`s:

1. `RenderMode.surface`, which paints a Flutter UI to a `SurfaceView`. This mode has the best performance, but a `FlutterView` in this mode cannot be positioned between 2 other Android `View`s in the z-index, nor can it be animated/transformed. Unless the special capabilities of a `SurfaceTexture` are required, developers should strongly prefer this render mode.
2. `RenderMode.texture`, which paints a Flutter UI to a `SurfaceTexture`. This mode is not as performant as `RenderMode.surface`, but a `FlutterView` in this mode can be animated and transformed, as well as positioned in the z-index between 2+ other Android `Views`. Unless the special capabilities of a `SurfaceTexture` are required, developers should strongly prefer the `RenderMode.surface` render mode.

See https://source.android.com/devices/graphics/arch-tv#surface_or_texture for more information comparing `SurfaceView` and `TextureView`.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static interface`
  `FlutterView.FlutterEngineAttachmentListener`
  Listener that is notified when a `FlutterEngine` is attached to/detached from a given `FlutterView`.
  `static enum`
  `FlutterView.ZeroSides`

  ## Nested classes/interfaces inherited from class android.widget.FrameLayout

  `FrameLayout.LayoutParams`

  ## Nested classes/interfaces inherited from class android.view.ViewGroup

  `ViewGroup.MarginLayoutParams, ViewGroup.OnHierarchyChangeListener`

  ## Nested classes/interfaces inherited from class android.view.View

  `View.AccessibilityDelegate, View.BaseSavedState, View.DragShadowBuilder, View.MeasureSpec, View.OnApplyWindowInsetsListener, View.OnAttachStateChangeListener, View.OnCapturedPointerListener, View.OnClickListener, View.OnContextClickListener, View.OnCreateContextMenuListener, View.OnDragListener, View.OnFocusChangeListener, View.OnGenericMotionListener, View.OnHoverListener, View.OnKeyListener, View.OnLayoutChangeListener, View.OnLongClickListener, View.OnScrollChangeListener, View.OnSystemUiVisibilityChangeListener, View.OnTouchListener, View.OnUnhandledKeyEventListener`

- ## Field Summary

  ### Fields inherited from class android.view.ViewGroup

  `CLIP_TO_PADDING_MASK, FOCUS_AFTER_DESCENDANTS, FOCUS_BEFORE_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS, LAYOUT_MODE_CLIP_BOUNDS, LAYOUT_MODE_OPTICAL_BOUNDS, PERSISTENT_ALL_CACHES, PERSISTENT_ANIMATION_CACHE, PERSISTENT_NO_CACHE, PERSISTENT_SCROLLING_CACHE`

  ### Fields inherited from class android.view.View

  `ACCESSIBILITY_DATA_SENSITIVE_AUTO, ACCESSIBILITY_DATA_SENSITIVE_NO, ACCESSIBILITY_DATA_SENSITIVE_YES, ACCESSIBILITY_LIVE_REGION_ASSERTIVE, ACCESSIBILITY_LIVE_REGION_NONE, ACCESSIBILITY_LIVE_REGION_POLITE, ALPHA, AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH, AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR, AUTOFILL_HINT_CREDIT_CARD_NUMBER, AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE, AUTOFILL_HINT_EMAIL_ADDRESS, AUTOFILL_HINT_NAME, AUTOFILL_HINT_PASSWORD, AUTOFILL_HINT_PHONE, AUTOFILL_HINT_POSTAL_ADDRESS, AUTOFILL_HINT_POSTAL_CODE, AUTOFILL_HINT_USERNAME, AUTOFILL_TYPE_DATE, AUTOFILL_TYPE_LIST, AUTOFILL_TYPE_NONE, AUTOFILL_TYPE_TEXT, AUTOFILL_TYPE_TOGGLE, CONTENT_SENSITIVITY_AUTO, CONTENT_SENSITIVITY_NOT_SENSITIVE, CONTENT_SENSITIVITY_SENSITIVE, DRAG_FLAG_ACCESSIBILITY_ACTION, DRAG_FLAG_GLOBAL, DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION, DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION, DRAG_FLAG_GLOBAL_SAME_APPLICATION, DRAG_FLAG_GLOBAL_URI_READ, DRAG_FLAG_GLOBAL_URI_WRITE, DRAG_FLAG_HIDE_CALLING_TASK_ON_DRAG_START, DRAG_FLAG_OPAQUE, DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG, DRAWING_CACHE_QUALITY_AUTO, DRAWING_CACHE_QUALITY_HIGH, DRAWING_CACHE_QUALITY_LOW, EMPTY_STATE_SET, ENABLED_FOCUSED_SELECTED_STATE_SET, ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, ENABLED_FOCUSED_STATE_SET, ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET, ENABLED_SELECTED_STATE_SET, ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET, ENABLED_STATE_SET, ENABLED_WINDOW_FOCUSED_STATE_SET, FIND_VIEWS_WITH_CONTENT_DESCRIPTION, FIND_VIEWS_WITH_TEXT, FOCUS_BACKWARD, FOCUS_DOWN, FOCUS_FORWARD, FOCUS_LEFT, FOCUS_RIGHT, FOCUS_UP, FOCUSABLE, FOCUSABLE_AUTO, FOCUSABLES_ALL, FOCUSABLES_TOUCH_MODE, FOCUSED_SELECTED_STATE_SET, FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, FOCUSED_STATE_SET, FOCUSED_WINDOW_FOCUSED_STATE_SET, GONE, HAPTIC_FEEDBACK_ENABLED, IMPORTANT_FOR_ACCESSIBILITY_AUTO, IMPORTANT_FOR_ACCESSIBILITY_NO, IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, IMPORTANT_FOR_ACCESSIBILITY_YES, IMPORTANT_FOR_AUTOFILL_AUTO, IMPORTANT_FOR_AUTOFILL_NO, IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS, IMPORTANT_FOR_AUTOFILL_YES, IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS, IMPORTANT_FOR_CONTENT_CAPTURE_AUTO, IMPORTANT_FOR_CONTENT_CAPTURE_NO, IMPORTANT_FOR_CONTENT_CAPTURE_NO_EXCLUDE_DESCENDANTS, IMPORTANT_FOR_CONTENT_CAPTURE_YES, IMPORTANT_FOR_CONTENT_CAPTURE_YES_EXCLUDE_DESCENDANTS, INVISIBLE, KEEP_SCREEN_ON, LAYER_TYPE_HARDWARE, LAYER_TYPE_NONE, LAYER_TYPE_SOFTWARE, LAYOUT_DIRECTION_INHERIT, LAYOUT_DIRECTION_LOCALE, LAYOUT_DIRECTION_LTR, LAYOUT_DIRECTION_RTL, MEASURED_HEIGHT_STATE_SHIFT, MEASURED_SIZE_MASK, MEASURED_STATE_MASK, MEASURED_STATE_TOO_SMALL, NO_ID, NOT_FOCUSABLE, OVER_SCROLL_ALWAYS, OVER_SCROLL_IF_CONTENT_SCROLLS, OVER_SCROLL_NEVER, PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET, PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_ENABLED_FOCUSED_STATE_SET, PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET, PRESSED_ENABLED_SELECTED_STATE_SET, PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_ENABLED_STATE_SET, PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET, PRESSED_FOCUSED_SELECTED_STATE_SET, PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_FOCUSED_STATE_SET, PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET, PRESSED_SELECTED_STATE_SET, PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET, PRESSED_STATE_SET, PRESSED_WINDOW_FOCUSED_STATE_SET, REQUESTED_FRAME_RATE_CATEGORY_DEFAULT, REQUESTED_FRAME_RATE_CATEGORY_HIGH, REQUESTED_FRAME_RATE_CATEGORY_LOW, REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE, REQUESTED_FRAME_RATE_CATEGORY_NORMAL, ROTATION, ROTATION_X, ROTATION_Y, SCALE_X, SCALE_Y, SCREEN_STATE_OFF, SCREEN_STATE_ON, SCROLL_AXIS_HORIZONTAL, SCROLL_AXIS_NONE, SCROLL_AXIS_VERTICAL, SCROLL_CAPTURE_HINT_AUTO, SCROLL_CAPTURE_HINT_EXCLUDE, SCROLL_CAPTURE_HINT_EXCLUDE_DESCENDANTS, SCROLL_CAPTURE_HINT_INCLUDE, SCROLL_INDICATOR_BOTTOM, SCROLL_INDICATOR_END, SCROLL_INDICATOR_LEFT, SCROLL_INDICATOR_RIGHT, SCROLL_INDICATOR_START, SCROLL_INDICATOR_TOP, SCROLLBAR_POSITION_DEFAULT, SCROLLBAR_POSITION_LEFT, SCROLLBAR_POSITION_RIGHT, SCROLLBARS_INSIDE_INSET, SCROLLBARS_INSIDE_OVERLAY, SCROLLBARS_OUTSIDE_INSET, SCROLLBARS_OUTSIDE_OVERLAY, SELECTED_STATE_SET, SELECTED_WINDOW_FOCUSED_STATE_SET, SOUND_EFFECTS_ENABLED, STATUS_BAR_HIDDEN, STATUS_BAR_VISIBLE, SYSTEM_UI_FLAG_FULLSCREEN, SYSTEM_UI_FLAG_HIDE_NAVIGATION, SYSTEM_UI_FLAG_IMMERSIVE, SYSTEM_UI_FLAG_IMMERSIVE_STICKY, SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION, SYSTEM_UI_FLAG_LAYOUT_STABLE, SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR, SYSTEM_UI_FLAG_LOW_PROFILE, SYSTEM_UI_FLAG_VISIBLE, SYSTEM_UI_LAYOUT_FLAGS, TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_GRAVITY, TEXT_ALIGNMENT_INHERIT, TEXT_ALIGNMENT_TEXT_END, TEXT_ALIGNMENT_TEXT_START, TEXT_ALIGNMENT_VIEW_END, TEXT_ALIGNMENT_VIEW_START, TEXT_DIRECTION_ANY_RTL, TEXT_DIRECTION_FIRST_STRONG, TEXT_DIRECTION_FIRST_STRONG_LTR, TEXT_DIRECTION_FIRST_STRONG_RTL, TEXT_DIRECTION_INHERIT, TEXT_DIRECTION_LOCALE, TEXT_DIRECTION_LTR, TEXT_DIRECTION_RTL, TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, VIEW_LOG_TAG, VISIBLE, WINDOW_FOCUSED_STATE_SET, X, Y, Z`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `FlutterView(Context context)`
  Constructs a `FlutterView` programmatically, without any XML attributes.
  `FlutterView(Context context, AttributeSet attrs)`
  Constructs a `FlutterView` in an XML-inflation-compliant manner.
  `FlutterView(Context context, FlutterImageView flutterImageView)`
  Constructs a `FlutterView` programmatically, without any XML attributes, uses the given `FlutterImageView` to render the Flutter UI.
  `FlutterView(Context context, FlutterSurfaceView flutterSurfaceView)`
  Constructs a `FlutterView` programmatically, without any XML attributes, uses the given `FlutterSurfaceView` to render the Flutter UI, and allows selection of a `transparencyMode`.
  `FlutterView(Context context, FlutterTextureView flutterTextureView)`
  Constructs a `FlutterView` programmatically, without any XML attributes, uses the given `FlutterTextureView` to render the Flutter UI, and allows selection of a `transparencyMode`.
  `FlutterView(Context context, RenderMode renderMode)`
  Deprecated.
  `FlutterView(Context context, RenderMode renderMode, TransparencyMode transparencyMode)`
  Deprecated.
  `FlutterView(Context context, TransparencyMode transparencyMode)`
  Deprecated.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `acquireLatestImageViewFrame()`
  `void`
  `addFlutterEngineAttachmentListener(FlutterView.FlutterEngineAttachmentListener listener)`
  Adds a `FlutterView.FlutterEngineAttachmentListener`, which is notified whenever this `FlutterView` attached to/detaches from a `FlutterEngine`.
  `void`
  `addOnFirstFrameRenderedListener(FlutterUiDisplayListener listener)`
  Adds the given `listener` to this `FlutterView`, to be notified upon Flutter's first rendered frame.
  `void`
  `attachOverlaySurfaceToRender(FlutterImageView view)`
  `void`
  `attachToFlutterEngine(FlutterEngine flutterEngine)`
  Connects this `FlutterView` to the given `FlutterEngine`.
  `void`
  `autofill(SparseArray<AutofillValue> values)`
  `FlutterView.ZeroSides`
  `calculateShouldZeroSides()`
  This method can be run on APIs 30 and above but its intended use is for 30 and below.
  `boolean`
  `checkInputConnectionProxy(View view)`
  Allows a `View` that is not currently the input connection target to invoke commands on the `InputMethodManager`, which is otherwise disallowed.
  `void`
  `convertToImageView()`
  Converts the current render surface to a `FlutterImageView` if it's not one already.
  `FlutterImageView`
  `createImageView()`
  `protected WindowInfoRepositoryCallbackAdapterWrapper`
  `createWindowInfoRepo()`
  `void`
  `detachFromFlutterEngine()`
  Disconnects this `FlutterView` from a previously attached `FlutterEngine`.
  `boolean`
  `dispatchKeyEvent(KeyEvent event)`
  Invoked when a hardware key is pressed or released.
  `View`
  `findViewByAccessibilityIdTraversal(int accessibilityId)`
  Prior to Android Q, it's impossible to add real views as descendants of virtual nodes.
  `AccessibilityNodeProvider`
  `getAccessibilityNodeProvider()`
  `FlutterEngine`
  `getAttachedFlutterEngine()`
  Returns the `FlutterEngine` to which this `FlutterView` is currently attached, or null if this `FlutterView` is not currently attached to a `FlutterEngine`.
  `BinaryMessenger`
  `getBinaryMessenger()`
  Returns a `BinaryMessenger` to send platform messages with.
  `FlutterImageView`
  `getCurrentImageSurface()`
  `PointerIcon`
  `getSystemPointerIcon(int type)`
  Gets a system pointer icon object for the given `type`.
  `FlutterRenderer.ViewportMetrics`
  `getViewportMetrics()`
  Allow access to the viewport metrics so that tests can set them to be valid with nonzero dimensions.
  `boolean`
  `hasRenderedFirstFrame()`
  Returns true if an attached `FlutterEngine` has rendered at least 1 frame to this `FlutterView`.
  `boolean`
  `isAttachedToFlutterEngine()`
  Returns true if this `FlutterView` is currently attached to a `FlutterEngine`.
  `final WindowInsets`
  `onApplyWindowInsets(WindowInsets insets)`
  Invoked when Android's desired window insets change, i.e., padding.
  `protected void`
  `onAttachedToWindow()`
  Invoked when this is attached to the window.
  `protected void`
  `onConfigurationChanged(Configuration newConfig)`
  Sends relevant configuration data from Android to Flutter when the Android `Configuration` changes.
  `InputConnection`
  `onCreateInputConnection(EditorInfo outAttrs)`
  Creates an `InputConnection` to work with a `InputMethodManager`.
  `protected void`
  `onDetachedFromWindow()`
  Invoked when this is detached from the window.
  `boolean`
  `onGenericMotionEvent(MotionEvent event)`
  Invoked by Android when a generic motion event occurs, e.g., joystick movement, mouse hover, track pad touches, scroll wheel movements, etc.
  `boolean`
  `onHoverEvent(MotionEvent event)`
  Invoked by Android when a hover-compliant input system causes a hover event.
  `void`
  `onProvideAutofillVirtualStructure(ViewStructure structure, int flags)`
  `protected void`
  `onSizeChanged(int width, int height, int oldWidth, int oldHeight)`
  Invoked when this `FlutterView` changes size, including upon initial measure.
  `boolean`
  `onTextInputKeyEvent(KeyEvent keyEvent)`
  Send a `KeyEvent` that is not handled by the keyboard responders to the text input system.
  `boolean`
  `onTouchEvent(MotionEvent event)`
  Invoked by Android when a user touch event occurs.
  `void`
  `redispatch(KeyEvent keyEvent)`
  Send a `KeyEvent` that is not handled by Flutter back to the platform.
  `void`
  `removeFlutterEngineAttachmentListener(FlutterView.FlutterEngineAttachmentListener listener)`
  Removes a `FlutterView.FlutterEngineAttachmentListener` that was previously added with `addFlutterEngineAttachmentListener(FlutterEngineAttachmentListener)`.
  `void`
  `removeOnFirstFrameRenderedListener(FlutterUiDisplayListener listener)`
  Removes the given `listener`, which was previously added with `addOnFirstFrameRenderedListener(FlutterUiDisplayListener)`.
  `void`
  `revertImageView(Runnable onDone)`
  If the surface is rendered by a `FlutterImageView`, then calling this method will stop rendering to a `FlutterImageView`, and render on the previous surface instead.
  `void`
  `setDelegate(FlutterViewDelegate delegate)`
  `void`
  `setVisibility(int visibility)`
  `protected void`
  `setWindowInfoListenerDisplayFeatures(androidx.window.layout.WindowLayoutInfo layoutInfo)`
  Refresh `WindowInfoTracker` and `DisplayCutout` display features.

  ### Methods inherited from class android.widget.FrameLayout

  `checkLayoutParams, generateDefaultLayoutParams, generateLayoutParams, generateLayoutParams, getAccessibilityClassName, getConsiderGoneChildrenWhenMeasuring, getMeasureAllChildren, onLayout, onMeasure, setForegroundGravity, setMeasureAllChildren, shouldDelayChildPressedState`

  ### Methods inherited from class android.view.ViewGroup

  `addChildrenForAccessibility, addExtraDataToAccessibilityNodeInfo, addFocusables, addKeyboardNavigationClusters, addStatesFromChildren, addTouchables, addView, addView, addView, addView, addView, addViewInLayout, addViewInLayout, attachLayoutAnimationParameters, attachViewToParent, bringChildToFront, canAnimate, childDrawableStateChanged, childHasTransientStateChanged, cleanupLayoutState, clearChildFocus, clearDisappearingChildren, clearFocus, debug, detachAllViewsFromParent, detachViewFromParent, detachViewFromParent, detachViewsFromParent, dispatchApplyWindowInsets, dispatchCapturedPointerEvent, dispatchConfigurationChanged, dispatchCreateViewTranslationRequest, dispatchDisplayHint, dispatchDragEvent, dispatchDraw, dispatchDrawableHotspotChanged, dispatchFinishTemporaryDetach, dispatchFreezeSelfOnly, dispatchGenericFocusedEvent, dispatchGenericPointerEvent, dispatchHoverEvent, dispatchKeyEventPreIme, dispatchKeyShortcutEvent, dispatchPointerCaptureChanged, dispatchProvideAutofillStructure, dispatchProvideStructure, dispatchRestoreInstanceState, dispatchSaveInstanceState, dispatchScrollCaptureSearch, dispatchSetActivated, dispatchSetPressed, dispatchSetSelected, dispatchStartTemporaryDetach, dispatchSystemUiVisibilityChanged, dispatchThawSelfOnly, dispatchTouchEvent, dispatchTrackballEvent, dispatchUnhandledMove, dispatchVisibilityChanged, dispatchWindowFocusChanged, dispatchWindowInsetsAnimationEnd, dispatchWindowInsetsAnimationPrepare, dispatchWindowInsetsAnimationProgress, dispatchWindowInsetsAnimationStart, dispatchWindowSystemUiVisiblityChanged, dispatchWindowVisibilityChanged, drawableStateChanged, drawChild, endViewTransition, findFocus, findOnBackInvokedDispatcherForChild, findViewsWithText, focusableViewAvailable, focusSearch, gatherTransparentRegion, getChildAt, getChildCount, getChildDrawingOrder, getChildDrawingOrder, getChildMeasureSpec, getChildStaticTransformation, getChildVisibleRect, getClipChildren, getClipToPadding, getDescendantFocusability, getFocusedChild, getLayoutAnimation, getLayoutAnimationListener, getLayoutMode, getLayoutTransition, getNestedScrollAxes, getOverlay, getPersistentDrawingCache, getTouchscreenBlocksFocus, hasFocus, hasTransientState, indexOfChild, invalidateChild, invalidateChildInParent, isAlwaysDrawnWithCacheEnabled, isAnimationCacheEnabled, isChildrenDrawingOrderEnabled, isChildrenDrawnWithCacheEnabled, isLayoutSuppressed, isMotionEventSplittingEnabled, isTransitionGroup, jumpDrawablesToCurrentState, layout, measureChild, measureChildren, measureChildWithMargins, notifySubtreeAccessibilityStateChanged, offsetDescendantRectToMyCoords, offsetRectIntoDescendantCoords, onCreateDrawableState, onDescendantInvalidated, onInterceptHoverEvent, onInterceptTouchEvent, onNestedFling, onNestedPreFling, onNestedPrePerformAccessibilityAction, onNestedPreScroll, onNestedScroll, onNestedScrollAccepted, onRequestFocusInDescendants, onRequestSendAccessibilityEvent, onResolvePointerIcon, onStartNestedScroll, onStopNestedScroll, onViewAdded, onViewRemoved, propagateRequestedFrameRate, recomputeViewAttributes, removeAllViews, removeAllViewsInLayout, removeDetachedView, removeView, removeViewAt, removeViewInLayout, removeViews, removeViewsInLayout, requestChildFocus, requestChildRectangleOnScreen, requestDisallowInterceptTouchEvent, requestFocus, requestSendAccessibilityEvent, requestTransparentRegion, restoreDefaultFocus, scheduleLayoutAnimation, setAddStatesFromChildren, setAlwaysDrawnWithCacheEnabled, setAnimationCacheEnabled, setChildrenDrawingCacheEnabled, setChildrenDrawingOrderEnabled, setChildrenDrawnWithCacheEnabled, setClipChildren, setClipToPadding, setDescendantFocusability, setLayoutAnimation, setLayoutAnimationListener, setLayoutMode, setLayoutTransition, setMotionEventSplittingEnabled, setOnHierarchyChangeListener, setPersistentDrawingCache, setRequestedFrameRate, setStaticTransformationsEnabled, setTouchscreenBlocksFocus, setTransitionGroup, setWindowInsetsAnimationCallback, showContextMenuForChild, showContextMenuForChild, startActionModeForChild, startActionModeForChild, startLayoutAnimation, startViewTransition, suppressLayout, updateViewLayout`

  ### Methods inherited from class android.view.View

  `addFocusables, addOnAttachStateChangeListener, addOnLayoutChangeListener, addOnUnhandledKeyEventListener, animate, announceForAccessibility, autofill, awakenScrollBars, awakenScrollBars, awakenScrollBars, bringToFront, buildDrawingCache, buildDrawingCache, buildLayer, callOnClick, cancelDragAndDrop, cancelLongPress, cancelPendingInputEvents, canResolveLayoutDirection, canResolveTextAlignment, canResolveTextDirection, canScrollHorizontally, canScrollVertically, clearAnimation, clearPendingCredentialRequest, clearViewTranslationCallback, combineMeasuredStates, computeHorizontalScrollExtent, computeHorizontalScrollOffset, computeHorizontalScrollRange, computeScroll, computeSystemWindowInsets, computeVerticalScrollExtent, computeVerticalScrollOffset, computeVerticalScrollRange, createAccessibilityNodeInfo, createContextMenu, destroyDrawingCache, dispatchGenericMotionEvent, dispatchNestedFling, dispatchNestedPreFling, dispatchNestedPrePerformAccessibilityAction, dispatchNestedPreScroll, dispatchNestedScroll, dispatchPopulateAccessibilityEvent, draw, drawableHotspotChanged, findOnBackInvokedDispatcher, findViewById, findViewWithTag, fitSystemWindows, focusSearch, forceHasOverlappingRendering, forceLayout, generateDisplayHash, generateViewId, getAccessibilityDelegate, getAccessibilityLiveRegion, getAccessibilityPaneTitle, getAccessibilityTraversalAfter, getAccessibilityTraversalBefore, getAllowedHandwritingDelegatePackageName, getAllowedHandwritingDelegatorPackageName, getAlpha, getAnimation, getAnimationMatrix, getApplicationWindowToken, getAttributeResolutionStack, getAttributeSourceResourceMap, getAutofillHints, getAutofillId, getAutofillType, getAutofillValue, getBackground, getBackgroundTintBlendMode, getBackgroundTintList, getBackgroundTintMode, getBaseline, getBottom, getBottomFadingEdgeStrength, getBottomPaddingOffset, getCameraDistance, getClipBounds, getClipBounds, getClipToOutline, getContentCaptureSession, getContentDescription, getContentSensitivity, getContext, getContextMenuInfo, getDefaultFocusHighlightEnabled, getDefaultSize, getDisplay, getDrawableState, getDrawingCache, getDrawingCache, getDrawingCacheBackgroundColor, getDrawingCacheQuality, getDrawingRect, getDrawingTime, getElevation, getExplicitStyle, getFilterTouchesWhenObscured, getFitsSystemWindows, getFocusable, getFocusables, getFocusedRect, getForeground, getForegroundGravity, getForegroundTintBlendMode, getForegroundTintList, getForegroundTintMode, getFrameContentVelocity, getGlobalVisibleRect, getGlobalVisibleRect, getHandler, getHandwritingBoundsOffsetBottom, getHandwritingBoundsOffsetLeft, getHandwritingBoundsOffsetRight, getHandwritingBoundsOffsetTop, getHandwritingDelegateFlags, getHandwritingDelegatorCallback, getHasOverlappingRendering, getHeight, getHitRect, getHorizontalFadingEdgeLength, getHorizontalScrollbarHeight, getHorizontalScrollbarThumbDrawable, getHorizontalScrollbarTrackDrawable, getId, getImportantForAccessibility, getImportantForAutofill, getImportantForContentCapture, getKeepScreenOn, getKeyDispatcherState, getLabelFor, getLayerType, getLayoutDirection, getLayoutParams, getLeft, getLeftFadingEdgeStrength, getLeftPaddingOffset, getLocalVisibleRect, getLocationInSurface, getLocationInWindow, getLocationOnScreen, getMatrix, getMeasuredHeight, getMeasuredHeightAndState, getMeasuredState, getMeasuredWidth, getMeasuredWidthAndState, getMinimumHeight, getMinimumWidth, getNextClusterForwardId, getNextFocusDownId, getNextFocusForwardId, getNextFocusLeftId, getNextFocusRightId, getNextFocusUpId, getOnFocusChangeListener, getOutlineAmbientShadowColor, getOutlineProvider, getOutlineSpotShadowColor, getOverScrollMode, getPaddingBottom, getPaddingEnd, getPaddingLeft, getPaddingRight, getPaddingStart, getPaddingTop, getParent, getParentForAccessibility, getPendingCredentialCallback, getPendingCredentialRequest, getPivotX, getPivotY, getPointerIcon, getPreferKeepClearRects, getReceiveContentMimeTypes, getRequestedFrameRate, getResources, getRevealOnFocusHint, getRight, getRightFadingEdgeStrength, getRightPaddingOffset, getRootSurfaceControl, getRootView, getRootWindowInsets, getRotation, getRotationX, getRotationY, getScaleX, getScaleY, getScrollBarDefaultDelayBeforeFade, getScrollBarFadeDuration, getScrollBarSize, getScrollBarStyle, getScrollCaptureHint, getScrollIndicators, getScrollX, getScrollY, getSolidColor, getSourceLayoutResId, getStateDescription, getStateListAnimator, getSuggestedMinimumHeight, getSuggestedMinimumWidth, getSupplementalDescription, getSystemGestureExclusionRects, getSystemUiVisibility, getTag, getTag, getTextAlignment, getTextDirection, getTooltipText, getTop, getTopFadingEdgeStrength, getTopPaddingOffset, getTouchables, getTouchDelegate, getTransitionAlpha, getTransitionName, getTranslationX, getTranslationY, getTranslationZ, getUniqueDrawingId, getVerticalFadingEdgeLength, getVerticalScrollbarPosition, getVerticalScrollbarThumbDrawable, getVerticalScrollbarTrackDrawable, getVerticalScrollbarWidth, getViewTranslationResponse, getViewTreeObserver, getVisibility, getWidth, getWindowAttachCount, getWindowId, getWindowInsetsController, getWindowSystemUiVisibility, getWindowToken, getWindowVisibility, getWindowVisibleDisplayFrame, getX, getY, getZ, hasExplicitFocusable, hasFocusable, hasNestedScrollingParent, hasOnClickListeners, hasOnLongClickListeners, hasOverlappingRendering, hasPointerCapture, hasWindowFocus, inflate, invalidate, invalidate, invalidate, invalidateDrawable, invalidateOutline, isAccessibilityDataSensitive, isAccessibilityFocused, isAccessibilityHeading, isActivated, isAttachedToWindow, isAutoHandwritingEnabled, isClickable, isContentSensitive, isContextClickable, isCredential, isDirty, isDrawingCacheEnabled, isDuplicateParentStateEnabled, isEnabled, isFocusable, isFocusableInTouchMode, isFocused, isFocusedByDefault, isForceDarkAllowed, isHandwritingDelegate, isHapticFeedbackEnabled, isHardwareAccelerated, isHorizontalFadingEdgeEnabled, isHorizontalScrollBarEnabled, isHovered, isImportantForAccessibility, isImportantForAutofill, isImportantForContentCapture, isInEditMode, isInLayout, isInTouchMode, isKeyboardNavigationCluster, isLaidOut, isLayoutDirectionResolved, isLayoutRequested, isLongClickable, isNestedScrollingEnabled, isOpaque, isPaddingOffsetRequired, isPaddingRelative, isPivotSet, isPreferKeepClear, isPressed, isSaveEnabled, isSaveFromParentEnabled, isScreenReaderFocusable, isScrollbarFadingEnabled, isScrollContainer, isSelected, isShowingLayoutBounds, isShown, isSoundEffectsEnabled, isTemporarilyDetached, isTextAlignmentResolved, isTextDirectionResolved, isVerticalFadingEdgeEnabled, isVerticalScrollBarEnabled, isVisibleToUserForAutofill, keyboardNavigationClusterSearch, measure, mergeDrawableStates, offsetLeftAndRight, offsetTopAndBottom, onAnimationEnd, onAnimationStart, onCancelPendingInputEvents, onCapturedPointerEvent, onCheckIsTextEditor, onCreateContextMenu, onCreateViewTranslationRequest, onCreateVirtualViewTranslationRequests, onDisplayHint, onDragEvent, onDraw, onDrawForeground, onDrawScrollBars, onFilterTouchEventForSecurity, onFinishInflate, onFinishTemporaryDetach, onFocusChanged, onHoverChanged, onInitializeAccessibilityEvent, onInitializeAccessibilityNodeInfo, onKeyDown, onKeyLongPress, onKeyMultiple, onKeyPreIme, onKeyShortcut, onKeyUp, onOverScrolled, onPointerCaptureChange, onPopulateAccessibilityEvent, onProvideAutofillStructure, onProvideContentCaptureStructure, onProvideStructure, onProvideVirtualStructure, onReceiveContent, onRestoreInstanceState, onRtlPropertiesChanged, onSaveInstanceState, onScreenStateChanged, onScrollCaptureSearch, onScrollChanged, onSetAlpha, onStartTemporaryDetach, onTrackballEvent, onViewTranslationResponse, onVirtualViewTranslationResponses, onVisibilityAggregated, onVisibilityChanged, onWindowFocusChanged, onWindowSystemUiVisibilityChanged, onWindowVisibilityChanged, overScrollBy, performAccessibilityAction, performClick, performContextClick, performContextClick, performHapticFeedback, performHapticFeedback, performLongClick, performLongClick, performReceiveContent, playSoundEffect, post, postDelayed, postInvalidate, postInvalidate, postInvalidateDelayed, postInvalidateDelayed, postInvalidateOnAnimation, postInvalidateOnAnimation, postOnAnimation, postOnAnimationDelayed, refreshDrawableState, releasePointerCapture, removeCallbacks, removeOnAttachStateChangeListener, removeOnLayoutChangeListener, removeOnUnhandledKeyEventListener, reportAppJankStats, requestApplyInsets, requestFitSystemWindows, requestFocus, requestFocus, requestFocusFromTouch, requestLayout, requestPointerCapture, requestRectangleOnScreen, requestRectangleOnScreen, requestUnbufferedDispatch, requestUnbufferedDispatch, requireViewById, resetPivot, resolveSize, resolveSizeAndState, restoreHierarchyState, saveAttributeDataForStyleable, saveHierarchyState, scheduleDrawable, scrollBy, scrollTo, sendAccessibilityEvent, sendAccessibilityEventUnchecked, setAccessibilityDataSensitive, setAccessibilityDelegate, setAccessibilityHeading, setAccessibilityLiveRegion, setAccessibilityPaneTitle, setAccessibilityTraversalAfter, setAccessibilityTraversalBefore, setActivated, setAllowClickWhenDisabled, setAllowedHandwritingDelegatePackage, setAllowedHandwritingDelegatorPackage, setAlpha, setAnimation, setAnimationMatrix, setAutofillHints, setAutofillId, setAutoHandwritingEnabled, setBackground, setBackgroundColor, setBackgroundDrawable, setBackgroundResource, setBackgroundTintBlendMode, setBackgroundTintList, setBackgroundTintMode, setBottom, setCameraDistance, setClickable, setClipBounds, setClipToOutline, setContentCaptureSession, setContentDescription, setContentSensitivity, setContextClickable, setDefaultFocusHighlightEnabled, setDrawingCacheBackgroundColor, setDrawingCacheEnabled, setDrawingCacheQuality, setDuplicateParentStateEnabled, setElevation, setEnabled, setFadingEdgeLength, setFilterTouchesWhenObscured, setFitsSystemWindows, setFocusable, setFocusable, setFocusableInTouchMode, setFocusedByDefault, setForceDarkAllowed, setForeground, setForegroundTintBlendMode, setForegroundTintList, setForegroundTintMode, setFrameContentVelocity, setHandwritingBoundsOffsets, setHandwritingDelegateFlags, setHandwritingDelegatorCallback, setHapticFeedbackEnabled, setHasTransientState, setHorizontalFadingEdgeEnabled, setHorizontalScrollBarEnabled, setHorizontalScrollbarThumbDrawable, setHorizontalScrollbarTrackDrawable, setHovered, setId, setImportantForAccessibility, setImportantForAutofill, setImportantForContentCapture, setIsCredential, setIsHandwritingDelegate, setKeepScreenOn, setKeyboardNavigationCluster, setLabelFor, setLayerPaint, setLayerType, setLayoutDirection, setLayoutParams, setLeft, setLeftTopRightBottom, setLongClickable, setMeasuredDimension, setMinimumHeight, setMinimumWidth, setNestedScrollingEnabled, setNextClusterForwardId, setNextFocusDownId, setNextFocusForwardId, setNextFocusLeftId, setNextFocusRightId, setNextFocusUpId, setOnApplyWindowInsetsListener, setOnCapturedPointerListener, setOnClickListener, setOnContextClickListener, setOnCreateContextMenuListener, setOnDragListener, setOnFocusChangeListener, setOnGenericMotionListener, setOnHoverListener, setOnKeyListener, setOnLongClickListener, setOnReceiveContentListener, setOnScrollChangeListener, setOnSystemUiVisibilityChangeListener, setOnTouchListener, setOutlineAmbientShadowColor, setOutlineProvider, setOutlineSpotShadowColor, setOverScrollMode, setPadding, setPaddingRelative, setPendingCredentialRequest, setPivotX, setPivotY, setPointerIcon, setPreferKeepClear, setPreferKeepClearRects, setPressed, setRenderEffect, setRevealOnFocusHint, setRight, setRotation, setRotationX, setRotationY, setSaveEnabled, setSaveFromParentEnabled, setScaleX, setScaleY, setScreenReaderFocusable, setScrollBarDefaultDelayBeforeFade, setScrollBarFadeDuration, setScrollbarFadingEnabled, setScrollBarSize, setScrollBarStyle, setScrollCaptureCallback, setScrollCaptureHint, setScrollContainer, setScrollIndicators, setScrollIndicators, setScrollX, setScrollY, setSelected, setSoundEffectsEnabled, setStateDescription, setStateListAnimator, setSupplementalDescription, setSystemGestureExclusionRects, setSystemUiVisibility, setTag, setTag, setTextAlignment, setTextDirection, setTooltipText, setTop, setTouchDelegate, setTransitionAlpha, setTransitionName, setTransitionVisibility, setTranslationX, setTranslationY, setTranslationZ, setVerticalFadingEdgeEnabled, setVerticalScrollBarEnabled, setVerticalScrollbarPosition, setVerticalScrollbarThumbDrawable, setVerticalScrollbarTrackDrawable, setViewTranslationCallback, setWillNotCacheDrawing, setWillNotDraw, setX, setY, setZ, showContextMenu, showContextMenu, startActionMode, startActionMode, startAnimation, startDrag, startDragAndDrop, startNestedScroll, stopNestedScroll, toString, transformMatrixToGlobal, transformMatrixToLocal, unscheduleDrawable, unscheduleDrawable, updateDragShadow, verifyDrawable, willNotCacheDrawing, willNotDraw`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface io.flutter.plugin.mouse.MouseCursorPlugin.MouseCursorViewDelegate

  `setPointerIcon`

  ### Methods inherited from interface android.view.ViewParent

  `canResolveLayoutDirection, canResolveTextAlignment, canResolveTextDirection, createContextMenu, getLayoutDirection, getParent, getParentForAccessibility, getTextAlignment, getTextDirection, isLayoutDirectionResolved, isLayoutRequested, isTextAlignmentResolved, isTextDirectionResolved, keyboardNavigationClusterSearch, requestFitSystemWindows, requestLayout`

- ## Constructor Details

  - ### FlutterView

    public FlutterView(@NonNull Context context)
    Constructs a `FlutterView` programmatically, without any XML attributes.

    - A `FlutterSurfaceView` is used to render the Flutter UI.
    - `transparencyMode` defaults to `TransparencyMode.opaque`.
    `FlutterView` requires an `Activity` instead of a generic `Context` to be compatible with `PlatformViewsController`.

  - ### FlutterView

    @Deprecated public FlutterView(@NonNull Context context, @NonNull RenderMode renderMode)
    Deprecated.
    Deprecated - use `FlutterView(Context, FlutterSurfaceView)` or `FlutterView(Context, FlutterTextureView)` or `FlutterView(Context, FlutterImageView)` instead.

  - ### FlutterView

    @Deprecated public FlutterView(@NonNull Context context, @NonNull TransparencyMode transparencyMode)
    Deprecated.
    Deprecated - use `FlutterView(Context, FlutterSurfaceView)` or `FlutterView(Context, FlutterTextureView)` instead, and configure the incoming `FlutterSurfaceView` or `FlutterTextureView` for transparency as desired.

    Constructs a `FlutterView` programmatically, without any XML attributes, uses a `FlutterSurfaceView` to render the Flutter UI, and allows selection of a `transparencyMode`.

    `FlutterView` requires an `Activity` instead of a generic `Context` to be compatible with `PlatformViewsController`.

  - ### FlutterView

    public FlutterView(@NonNull Context context, @NonNull FlutterSurfaceView flutterSurfaceView)
    Constructs a `FlutterView` programmatically, without any XML attributes, uses the given `FlutterSurfaceView` to render the Flutter UI, and allows selection of a `transparencyMode`.

    `FlutterView` requires an `Activity` instead of a generic `Context` to be compatible with `PlatformViewsController`.

  - ### FlutterView

    public FlutterView(@NonNull Context context, @NonNull FlutterTextureView flutterTextureView)
    Constructs a `FlutterView` programmatically, without any XML attributes, uses the given `FlutterTextureView` to render the Flutter UI, and allows selection of a `transparencyMode`.

    `FlutterView` requires an `Activity` instead of a generic `Context` to be compatible with `PlatformViewsController`.

  - ### FlutterView

    public FlutterView(@NonNull Context context, @NonNull FlutterImageView flutterImageView)
    Constructs a `FlutterView` programmatically, without any XML attributes, uses the given `FlutterImageView` to render the Flutter UI.

    `FlutterView` requires an `Activity` instead of a generic `Context` to be compatible with `PlatformViewsController`.

  - ### FlutterView

    public FlutterView(@NonNull Context context, @Nullable AttributeSet attrs)
    Constructs a `FlutterView` in an XML-inflation-compliant manner.

    `FlutterView` requires an `Activity` instead of a generic `Context` to be compatible with `PlatformViewsController`.

  - ### FlutterView

    @Deprecated public FlutterView(@NonNull Context context, @NonNull RenderMode renderMode, @NonNull TransparencyMode transparencyMode)
    Deprecated.
    Deprecated - use `FlutterView(Context, FlutterSurfaceView)` or `FlutterView(Context, FlutterTextureView)` instead, and configure the incoming `FlutterSurfaceView` or `FlutterTextureView` for transparency as desired.

- ## Method Details

  - ### hasRenderedFirstFrame

    public boolean hasRenderedFirstFrame()
    Returns true if an attached `FlutterEngine` has rendered at least 1 frame to this `FlutterView`.

    Returns false if no `FlutterEngine` is attached.

    This flag is specific to a given `FlutterEngine`. The following hypothetical timeline demonstrates how this flag changes over time.

    1. `flutterEngineA` is attached to this `FlutterView`: returns false
    2. `flutterEngineA` renders its first frame to this `FlutterView`: returns true
    3. `flutterEngineA` is detached from this `FlutterView`: returns false
    4. `flutterEngineB` is attached to this `FlutterView`: returns false
    5. `flutterEngineB` renders its first frame to this `FlutterView`: returns true

  - ### addOnFirstFrameRenderedListener

    public void addOnFirstFrameRenderedListener(@NonNull FlutterUiDisplayListener listener)
    Adds the given `listener` to this `FlutterView`, to be notified upon Flutter's first rendered frame.

  - ### removeOnFirstFrameRenderedListener

    public void removeOnFirstFrameRenderedListener(@NonNull FlutterUiDisplayListener listener)
    Removes the given `listener`, which was previously added with `addOnFirstFrameRenderedListener(FlutterUiDisplayListener)`.

  - ### onConfigurationChanged

    protected void onConfigurationChanged(@NonNull Configuration newConfig)
    Sends relevant configuration data from Android to Flutter when the Android `Configuration` changes.

    The Android `Configuration` might change as a result of device orientation change, device language change, device text scale factor change, etc.

    Overrides:
      `onConfigurationChanged` in class `View`

  - ### onSizeChanged

    protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight)
    Invoked when this `FlutterView` changes size, including upon initial measure.

    The initial measure reports an `oldWidth` and `oldHeight` of zero.

    Flutter cares about the width and height of the view that displays it on the host platform. Therefore, when this method is invoked, the new width and height are communicated to Flutter as the "physical size" of the view that displays Flutter's UI.

    Overrides:
      `onSizeChanged` in class `View`

  - ### createWindowInfoRepo

    @VisibleForTesting protected WindowInfoRepositoryCallbackAdapterWrapper createWindowInfoRepo()

  - ### onAttachedToWindow

    @RequiresApi(28) protected void onAttachedToWindow()
    Invoked when this is attached to the window.

    We register for `WindowInfoTracker` updates.

    Overrides:
      `onAttachedToWindow` in class `ViewGroup`

  - ### onDetachedFromWindow

    protected void onDetachedFromWindow()
    Invoked when this is detached from the window.

    We unregister from `WindowInfoTracker` updates.

    Overrides:
      `onDetachedFromWindow` in class `ViewGroup`

  - ### setWindowInfoListenerDisplayFeatures

    @RequiresApi(28) protected void setWindowInfoListenerDisplayFeatures(androidx.window.layout.WindowLayoutInfo layoutInfo)
    Refresh `WindowInfoTracker` and `DisplayCutout` display features. Fold, hinge and cutout areas are populated here.

  - ### calculateShouldZeroSides

    @DeprecatedSinceApi(api=30) @VisibleForTesting public FlutterView.ZeroSides calculateShouldZeroSides()
    This method can be run on APIs 30 and above but its intended use is for 30 and below.
    Returns:
      some ZeroSides enum

  - ### onApplyWindowInsets

    @NonNull public final WindowInsets onApplyWindowInsets(@NonNull WindowInsets insets)
    Invoked when Android's desired window insets change, i.e., padding.

    Flutter does not use a standard `View` hierarchy and therefore Flutter is unaware of these insets. Therefore, this method calculates the viewport metrics that Flutter should use and then sends those metrics to Flutter.

    This callback is not present in API < 20, which means lower API devices will see the wider than expected padding when the status and navigation bars are hidden.

    Overrides:
      `onApplyWindowInsets` in class `View`

  - ### onCreateInputConnection

    @Nullable public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs)
    Creates an `InputConnection` to work with a `InputMethodManager`.

    Any `View` that can take focus or process text input must implement this method by returning a non-null `InputConnection`. Flutter may render one or many focusable and text-input widgets, therefore `FlutterView` must support an `InputConnection`.

    The `InputConnection` returned from this method comes from a `TextInputPlugin`, which is owned by this `FlutterView`. A `TextInputPlugin` exists to encapsulate the nuances of input communication, rather than spread that logic throughout this `FlutterView`.

    Overrides:
      `onCreateInputConnection` in class `View`

  - ### checkInputConnectionProxy

    public boolean checkInputConnectionProxy(View view)
    Allows a `View` that is not currently the input connection target to invoke commands on the `InputMethodManager`, which is otherwise disallowed.

    Returns true to allow non-input-connection-targets to invoke methods on `InputMethodManager`, or false to exclusively allow the input connection target to invoke such methods.

    Overrides:
      `checkInputConnectionProxy` in class `View`

  - ### dispatchKeyEvent

    public boolean dispatchKeyEvent(@NonNull KeyEvent event)
    Invoked when a hardware key is pressed or released.

    This method is typically invoked in response to the press of a physical keyboard key or a D-pad button. It is generally not invoked when a virtual software keyboard is used, though a software keyboard may choose to invoke this method in some situations.

    `KeyEvent`s are sent from Android to Flutter. `KeyboardManager` may do some additional work with the given `KeyEvent`, e.g., combine this `keyCode` with the previous `keyCode` to generate a unicode combined character.

    Overrides:
      `dispatchKeyEvent` in class `ViewGroup`

  - ### onTouchEvent

    public boolean onTouchEvent(@NonNull MotionEvent event)
    Invoked by Android when a user touch event occurs.

    Flutter handles all of its own gesture detection and processing, therefore this method forwards all `MotionEvent` data from Android to Flutter.

    Overrides:
      `onTouchEvent` in class `View`

  - ### onGenericMotionEvent

    public boolean onGenericMotionEvent(@NonNull MotionEvent event)
    Invoked by Android when a generic motion event occurs, e.g., joystick movement, mouse hover, track pad touches, scroll wheel movements, etc.

    Flutter handles all of its own gesture detection and processing, therefore this method forwards all `MotionEvent` data from Android to Flutter.

    Overrides:
      `onGenericMotionEvent` in class `View`

  - ### onHoverEvent

    public boolean onHoverEvent(@NonNull MotionEvent event)
    Invoked by Android when a hover-compliant input system causes a hover event.

    An example of hover events is a stylus sitting near an Android screen. As the stylus moves from outside a `View` to hover over a `View`, or move around within a `View`, or moves from over a `View` to outside a `View`, a corresponding `MotionEvent` is reported via this method.

    Hover events can be used for accessibility touch exploration and therefore are processed here for accessibility purposes.

    Overrides:
      `onHoverEvent` in class `View`

  - ### getAccessibilityNodeProvider

    @Nullable public AccessibilityNodeProvider getAccessibilityNodeProvider()
    Overrides:
      `getAccessibilityNodeProvider` in class `View`

  - ### findViewByAccessibilityIdTraversal

    @Nullable public View findViewByAccessibilityIdTraversal(int accessibilityId)
    Prior to Android Q, it's impossible to add real views as descendants of virtual nodes. This breaks accessibility when an Android view is embedded in a Flutter app.

    This method overrides a hidden method in `ViewGroup` to workaround this limitation. This solution is derivated from Jetpack Compose, and can be found in the Android source code as well.

    This workaround finds the descendant `View` that matches the provided accessibility id.

    Parameters:
      `accessibilityId` - The view accessibility id.
    Returns:
      The view matching the accessibility id if any.

  - ### getSystemPointerIcon

    @RequiresApi(24) @NonNull public PointerIcon getSystemPointerIcon(int type)
    Description copied from interface: `io.flutter.plugin.mouse.MouseCursorPlugin.MouseCursorViewDelegate`
    Gets a system pointer icon object for the given `type`.

    If typeis not recognized, returns the default pointer icon.

    This is typically implemented by calling `PointerIcon.getSystemIcon(android.content.Context, int)` with the context associated with this view.

    Specified by:
      `getSystemPointerIcon` in interface `io.flutter.plugin.mouse.MouseCursorPlugin.MouseCursorViewDelegate`

  - ### getBinaryMessenger

    public BinaryMessenger getBinaryMessenger()
    Description copied from interface: `KeyboardManager.ViewDelegate`
    Returns a `BinaryMessenger` to send platform messages with.
    Specified by:
      `getBinaryMessenger` in interface `KeyboardManager.ViewDelegate`

  - ### onTextInputKeyEvent

    public boolean onTextInputKeyEvent(@NonNull KeyEvent keyEvent)
    Description copied from interface: `KeyboardManager.ViewDelegate`
    Send a `KeyEvent` that is not handled by the keyboard responders to the text input system.
    Specified by:
      `onTextInputKeyEvent` in interface `KeyboardManager.ViewDelegate`
    Parameters:
      `keyEvent` - the `KeyEvent` that should be processed by the text input system. It must not be null.
    Returns:
      Whether the text input handles the key event.

  - ### redispatch

    public void redispatch(@NonNull KeyEvent keyEvent)
    Description copied from interface: `KeyboardManager.ViewDelegate`
    Send a `KeyEvent` that is not handled by Flutter back to the platform.
    Specified by:
      `redispatch` in interface `KeyboardManager.ViewDelegate`

  - ### attachToFlutterEngine

    @RequiresApi(24) public void attachToFlutterEngine(@NonNull FlutterEngine flutterEngine)
    Connects this `FlutterView` to the given `FlutterEngine`.

    This `FlutterView` will begin rendering the UI painted by the given `FlutterEngine`. This `FlutterView` will also begin forwarding interaction events from this `FlutterView` to the given `FlutterEngine`, e.g., user touch events, accessibility events, keyboard events, and others.

    See `detachFromFlutterEngine()` for information on how to detach from a `FlutterEngine`.

  - ### detachFromFlutterEngine

    @RequiresApi(24) public void detachFromFlutterEngine()
    Disconnects this `FlutterView` from a previously attached `FlutterEngine`.

    This `FlutterView` will clear its UI and stop forwarding all events to the previously-attached `FlutterEngine`. This includes touch events, accessibility events, keyboard events, and others.

    See `attachToFlutterEngine(FlutterEngine)` for information on how to attach a `FlutterEngine`.

  - ### createImageView

    @VisibleForTesting @NonNull public FlutterImageView createImageView()

  - ### getCurrentImageSurface

    @VisibleForTesting public FlutterImageView getCurrentImageSurface()

  - ### convertToImageView

    public void convertToImageView()
    Converts the current render surface to a `FlutterImageView` if it's not one already. Otherwise, it resizes the `FlutterImageView` based on the current view size.

  - ### revertImageView

    public void revertImageView(@NonNull Runnable onDone)
    If the surface is rendered by a `FlutterImageView`, then calling this method will stop rendering to a `FlutterImageView`, and render on the previous surface instead.
    Parameters:
      `onDone` - a callback called when Flutter UI is rendered on the previous surface. Use this callback to perform cleanups. For example, destroy overlay surfaces.

  - ### attachOverlaySurfaceToRender

    public void attachOverlaySurfaceToRender(@NonNull FlutterImageView view)

  - ### acquireLatestImageViewFrame

    public boolean acquireLatestImageViewFrame()

  - ### isAttachedToFlutterEngine

    @VisibleForTesting public boolean isAttachedToFlutterEngine()
    Returns true if this `FlutterView` is currently attached to a `FlutterEngine`.

  - ### getAttachedFlutterEngine

    @VisibleForTesting @Nullable public FlutterEngine getAttachedFlutterEngine()
    Returns the `FlutterEngine` to which this `FlutterView` is currently attached, or null if this `FlutterView` is not currently attached to a `FlutterEngine`.

  - ### addFlutterEngineAttachmentListener

    @VisibleForTesting public void addFlutterEngineAttachmentListener(@NonNull FlutterView.FlutterEngineAttachmentListener listener)
    Adds a `FlutterView.FlutterEngineAttachmentListener`, which is notified whenever this `FlutterView` attached to/detaches from a `FlutterEngine`.

  - ### removeFlutterEngineAttachmentListener

    @VisibleForTesting public void removeFlutterEngineAttachmentListener(@NonNull FlutterView.FlutterEngineAttachmentListener listener)
    Removes a `FlutterView.FlutterEngineAttachmentListener` that was previously added with `addFlutterEngineAttachmentListener(FlutterEngineAttachmentListener)`.

  - ### setDelegate

    @VisibleForTesting public void setDelegate(@NonNull FlutterViewDelegate delegate)

  - ### onProvideAutofillVirtualStructure

    public void onProvideAutofillVirtualStructure(@NonNull ViewStructure structure, int flags)
    Overrides:
      `onProvideAutofillVirtualStructure` in class `View`

  - ### autofill

    public void autofill(@NonNull SparseArray<AutofillValue> values)
    Overrides:
      `autofill` in class `View`

  - ### setVisibility

    public void setVisibility(int visibility)
    Overrides:
      `setVisibility` in class `View`

  - ### getViewportMetrics

    @VisibleForTesting public FlutterRenderer.ViewportMetrics getViewportMetrics()
    Allow access to the viewport metrics so that tests can set them to be valid with nonzero dimensions.