As per the Flutter documentation, the following steps are required to implement Flutter State Restoration in a Flutter iOS project:
- Open ios/Runner.xcodeproj in Xcode.
- Select Main.storyboard under Runner/Runner in the Project Navigator on the left.
- Select the Flutter View Controller under Flutter View Controller Scene in the view hierarchy.
- Navigate to the Identity Inspector in the panel on the right.
- Enter a unique restoration ID in the provided field.
- Save the project.
However, we are not using FlutterViewController
in Main.storyboard
. Instead, we use MainViewController
, which extends UIViewController
. In SceneDelegate
, we have the following code:
class SceneDelegate: UIResponder {
var window: UIWindow?
lazy var flutterEngineManager = FlutterEngineManager.shared
func insertMapViewIfNeeded() {
if let mapView = mapController?.view {
controller.view.insertContainedSubview(mapView)
}
}
}
extension SceneDelegate: UIWindowSceneDelegate {
func scene(_ scene: UIScene, willConnectTo _: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if (scene as? UIWindowScene) == nil { return }
let flutterViewController = flutterEngineManager.flutterViewController
guard let controller = window?.rootViewController else {
return
}
if let appDelegate = UIApplication.shared.delegate as? AppDelegate,
!appDelegate.appColdStarted {
flutterViewController.loadDefaultSplashScreenView()
}
flutterViewController.isViewOpaque = false
controller.addViewController(flutterViewController, toContainerView: controller.view)
}
}
I have tried setting restorationIdentifier
to MainViewController
and FlutterViewController
, but it does not work. When I debugged RestorationBucket
in Flutter code, it was null. Can anyone help me achieve this?
Note: Flutter State Restoration changes are working with the Android app.