iOS FlutterViewController splashScreenView 设为可空
摘要
#FlutterViewController
属性 splashScreenView
已从 nonnull
更改为 nullable
。
splashScreenView
的旧声明
objc
@property(strong, nonatomic) UIView* splashScreenView;
splashScreenView
的新声明
objc
@property(strong, nonatomic, nullable) UIView* splashScreenView;
上下文
#在此更改之前,在 iOS 上,当未设置启动屏幕视图时,splashScreenView
属性返回 nil
,并将该属性设置为 nil
会删除启动屏幕视图。但是,splashScreenView
API 被错误地标记为 nonnull
。此属性最常用于在 iOS 添加到应用场景中过渡到 Flutter 视图时。
更改说明
#虽然在 Objective-C 中可以通过将 splashScreenView
设置为 nil
UIView
来解决不正确的 nonnull
注解,但在 Swift 中会导致编译错误
error build: Value of optional type 'UIView?' must be unwrapped to a value of type 'UIView'
PR #34743 将属性属性更新为 nullable
。它可以返回 nil
,并且可以设置为 nil
以在 Objective-C 和 Swift 中删除视图。
迁移指南
#如果 splashScreenView
在 Swift 中存储在 UIView
变量中,请更新为可选类型 UIView?
。
迁移前的代码
swift
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'
迁移后的代码
swift
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 {
}
时间线
#稳定版发布:3.7
参考资料
#相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-04-04。 查看源代码 或 报告问题.