Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

Widgets Intent Handler Dynamic Data (IntentConfiguration)

Why spinner is not showing while downloading dynamic data. User can select multiple time Choose and most up to date data is not showing.

Below methods are never get called? optional func handle(intent: optional func confirm(intent:

only: provideDeviceOptionsCollection(for intent:

Gonna need a bit more context on this, and preferably some code...

I think I experienced the same problem @darkpaw .

I have a widget app and custom intents with a dynamic parameters (selectedFollowing shown in the image). The options is fetched from an API and obviously it will wait for some time before the list options fetched.

it's working just fine if the user (upon editing the widget) click the following option just once and wait for the data to be fetched. But the problem is if the user click the option more than once to open the list (because intuitively we will re-click the option as it's now showing immediately!) and in results, which is I believe is the bug, the option shown is not clickable (even the default cancel button is not clickable)

how I fetch the options:

class IntentHandler: INExtension, BoxOneConfigurationIntentHandling {
  let defaultLanguage = Locale.preferredLanguages.first?.prefix(2).lowercased() ?? "en"

  func provideSelectedFollowingOptionsCollection(for intent: BoxOneConfigurationIntent) async throws -> INObjectCollection<Following> {
      do {
        
        if savedFollowingList?.isEmpty ?? true {
          followingList = try await AssetFetcher.fetchFollowingList()
          UserDefaults.saveFollowingList(followingList)
        } else {
          followingList = savedFollowingList ?? []
        }
       //..... some data processing here
        var allItems = [geolocationItem] + followings


        if let previousID = previousSelectedFollowing,
           let index = allItems.firstIndex(where: { $0.identifier == previousID }) {
            let previousItem = allItems[index]
            allItems.remove(at: index)
            allItems.insert(previousItem, at: 0)
        }

        UserDefaults.setIsFetching(false)
        return INObjectCollection(items: allItems)
    } catch {
        UserDefaults.setIsFetching(false)
//        return INObjectCollection(items: [])
    }
  }

the custom intents:

Widgets Intent Handler Dynamic Data (IntentConfiguration)
 
 
Q