Widget 就像一个迷你版的 App,可以快速访问它所提供的信息—比如天气、日历事件、笔记等。Widget 还可以充当“快捷方式”,点击它会立即跳转到 App 的指定位置。
Widget 寄宿于 App,所以首先必须将 App 功能实现。
可以通过网络和本地数据两种方式进行数据的***享。本地数据***享可以通过 App Groups,它是 iOS 8 之后推出的在 App 之间***享数据的方式,只需要简单的配置就可以实现数据的***享。
配置完成以后,可以通过 UserDefaults 或 FileManager 来实现 App 与 Widget 的数据***享,这里以 UserDefaults 为例,因为 SwiftUI 提供了 @AppStorage 来简化操作。
不论是哪种配置,都需要提供以下内容。
渲染 Widget 所需的数据模型,需要遵守 TimelineEntry 协议。
遵守 TimelineProvider 协议,告诉 WidgetKit 何时渲染与刷新 Widget。需要实现以下两个方法:
占位视图,是一个标准的 SwiftUI View,当第一次展示或者发生错误时都会展示该 View。
屏幕上 Widget 显示的内容,需要使用 SwiftUI 构建,可以针对不同尺寸的 Widget 设置不同的 View。
只能点击,点击会打开 App 。也可以通过 .widgetURL(myDeeplink) 方法配置当 Widget 被点击时触发哪个 Deep Linking,也可以通过使用链接使 Widget 的不同部分触发不同的 Deep Linking。
Widget案例