When you embed Flutter into an existing iOS app, one common pattern is to place a FlutterViewController on top of native UIKit content as an overlay. Visually, this is straightforward: make the Flutter view transparent and render only the pieces of UI you want to show.
The tricky part is touch handling.
Even when the Flutter overlay is visually transparent, it still sits on top of the native view hierarchy. That means touches inside the overlay’s frame are usually captured by the Flutter view instead of reaching the UIViews underneath. If your design expects native controls below the transparent parts of Flutter to remain tappable, visual transparency alone is not enough.
This post explains the problem, the recommended solution, and a sample implementation for both iOS and Flutter.