The `FlutterViewController` property `splashScreenView` has been changed from `nonnull` to `nullable`.
Original behavior
Prior to this change, on iOS the `splashScreenView` property returned `nil` when no splash screen view was set, and setting the property to `nil` removed the splash screen view. However, the `splashScreenView` API was incorrectly marked `nonnull`. This property is most often used when transitioning to Flutter views in iOS add-to-app scenarios.
New behavior
While it was possible in Objective-C to work around the incorrect `nonnull` annotation by setting `splashScreenView` to a `nil` `UIView`, in Swift this caused a compilation error:
- Who is affected
- Applications and packages relying on the previous behaviour or signature. Code that uses FlutterViewController, UIView.
- Practical impact
- Behaviour or API differences that can break builds or change runtime behaviour.
- What action should I take?
- Follow the official migration guide below, update affected call sites, run `dart fix --apply` where a fix is available, then run your tests.
Before and after (from the official guide)
| 1 | − | var splashScreenView = UIView() |
| 2 | var flutterEngine = FlutterEngine(name: "my flutter engine") | |
| 3 | let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil) | |
| 4 | − | splashScreenView = flutterViewController.splashScreenView // compilation error: Value of optional type 'UIView?' must be unwrapped to a value of type 'UIView' |
| 1 | + | var splashScreenView : UIView? = UIView() |
| 2 | var flutterEngine = FlutterEngine(name: "my flutter engine") | |
| 3 | let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil) | |
| 4 | + | let splashScreenView = flutterViewController.splashScreenView // compiles successfully |
| 5 | + | if let splashScreenView = splashScreenView { |
| 6 | + | } |
Raw before / after
var splashScreenView = UIView() var flutterEngine = FlutterEngine(name: "my flutter engine") let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil) splashScreenView = flutterViewController.splashScreenView // compilation error: Value of optional type 'UIView?' must be unwrapped to a value of type 'UIView'
var splashScreenView : UIView? = UIView()
var flutterEngine = FlutterEngine(name: "my flutter engine")
let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)
let splashScreenView = flutterViewController.splashScreenView // compiles successfully
if let splashScreenView = splashScreenView {
}Official migration guide (excerpt, © The Flutter Authors, CC BY 3.0)
If splashScreenView is stored in a UIView variable in Swift,
update to an optional type UIView?.
Code before migration:
var splashScreenView = UIView()
var flutterEngine = FlutterEngine(name: "my flutter engine")
let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)
splashScreenView = flutterViewController.splashScreenView // compilation error: Value of optional type 'UIView?' must be unwrapped to a value of type 'UIView'Code after migration:
var splashScreenView : UIView? = UIView()
var flutterEngine = FlutterEngine(name: "my flutter engine")
let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)
let splashScreenView = flutterViewController.splashScreenView // compiles successfully
if let splashScreenView = splashScreenView {
}AI_PROVIDER (for example to openai-compatible with a local Ollama or LM Studio endpoint) to enable grounded explanations. Everything else on this page works without an AI provider.Listed in the official breaking-changes index (docs.flutter.dev/release/breaking-changes).
An official announcement or migration guide documents an intended behaviour or API change. A verified source change (git diff) shows code changed but does not by itself prove a public API is breaking. AI interpretations are labelled and never used to classify a change.
- Source commit
- b3045439b7c0
- Source last updated
- Oct 21, 2026
- Last synchronized
- Oct 21, 2026
- Publication status
- published
Publication history
- Oct 21, 2026, 8:31 PM: new → published (ingestion) — Backed by an official breaking-change/migration guide.
AI_PROVIDER (for example to openai-compatible with a local Ollama or LM Studio endpoint) to enable grounded explanations. Everything else on this page works without an AI provider.