在动态数据的 WidgetKit 中,如何为新的 widget 指定默认的 IntentConfiguration?

In WidgetKit with dynamic data, how to specify the default IntentConfiguration for new widgets?

Apple Notes 小部件展示了理想的示例。添加 Apple Notes 小部件时,WidgetKit 会继续为新小部件分配一个 IntentConfiguration。您可以通过编辑小部件看到这一点,并注意到选择元素没有显示为“选择”,而是包含自动选择为新小部件默认值的笔记或文件夹的名称。您还会注意到,此占位符小部件的数据源不会从一个来源更改为另一个来源 - 分配的 IntentConfiguration 得到遵守。

我们如何在我们的小部件中做到这一点?它应该看起来像这样:有人创建了一个新的小部件,我们使用他们最近的数据项作为占位符,并且该项目是 1) 保留在小部件中直到他们更改它 2) 反映在编辑小部件对话框中。

我一直在寻找同样的东西,试图为动态类型设置一个默认值,所以我的想法是设置一个默认值,就像在意图定义文件中使用枚举一样。 简短的回答我们需要在代码中设置动态类型默认值。

所以经过一番挖掘后发现了这个(我命令点击我的代码中的 ConfigurationIntent 参考并获得自动生成的苹果 ConfigurationIntent.swift)

/*! @abstract Default values for parameters with dynamic options
 @discussion Called to query the parameter default value.
 */
@available(iOS 14.0, macOS 10.16, watchOS 7.0, *)
@objc(defaultChartTypeForConfiguration:)    
optional func defaultChartType(for intent: ConfigurationIntent) -> Chart?

这里我们有“optional fund defaultChartType” 所以我将其植入将为您生成的 intenthandler.swift 中,然后您必须在其中添加代码以检索和 return 动态类型。在小部件配置屏幕中显示动态的任何教程中都应该涵盖这一点。 所以现在在这个文件中我也刚刚添加了上面的可选功能。 ChartType 是我在 intentDefinition 文件中创建的动态类型。你的名字会有所不同,以匹配你的名字

它是这样工作的。希望对您有所帮助,您可以关注它。