Flutter中如何实现iOS 16锁屏小组件?是否有适配插件?
适配iOS 16锁屏小组件的Flutter方案
可用适配插件
目前已有不少Flutter插件更新支持iOS 16锁屏小组件,比如你提到的home_widget,其后续版本(高于0.1.6)已经添加了锁屏小组件的适配支持;另外flutter_app_builder这类插件也能实现锁屏小组件的开发需求。
具体实现步骤
iOS原生端配置
- 打开Flutter项目的iOS模块(用Xcode),新建一个Widget Extension目标,按需勾选「Include Configuration Intent」(用于小组件的动态配置)。
- 在Extension的
Info.plist里,找到NSExtension下的NSExtensionAttributes,添加widgetFamily数组,包含accessoryCircular(圆形锁屏组件)、accessoryRectangular(矩形锁屏组件)、accessoryInline(行内锁屏组件)这几个值,声明支持的锁屏组件尺寸。 - 配置App Group:在Xcode的项目设置中,给主App和Widget Extension都添加同一个App Group ID,用来实现Flutter和小组件之间的数据共享。
- 编写小组件的原生代码(Swift/OC),通过App Group读取Flutter侧传递的数据,完成锁屏小组件的UI渲染。
Flutter侧代码实现
- 引入适配后的插件(比如更新
home_widget到最新版本),在项目中配置好对应的App Group ID。 - 使用插件API向小组件传递数据,示例代码:
await HomeWidget.saveWidgetData<String>(key: 'lockscreen_content', value: '今日待办:3项'); - 触发锁屏小组件刷新:
await HomeWidget.updateWidget(name: 'LockScreenWidget');
关键注意点
- 锁屏小组件的布局受iOS系统限制,只能使用苹果提供的固定尺寸模板,无法自定义任意布局样式。
- Flutter和锁屏小组件之间的数据交互必须通过App Group完成,不能直接共享内存数据。
- 测试时务必使用iOS 16及以上版本的真机,部分模拟器可能存在锁屏小组件的渲染或数据同步问题。
内容的提问来源于stack exchange,提问作者Anandh Krishnan
相关产品推荐
相关产品推荐

