Измените содержимое конфигурации настраиваемого виджета на основе WidgetFamily.IOS

Программируем под IOS
Ответить
Anonymous
 Измените содержимое конфигурации настраиваемого виджета на основе WidgetFamily.

Сообщение Anonymous »

Я сделал динамический виджет и успешно отобразил данные CoreData в динамической конфигурации. Я хочу отфильтровать данные CoreData на основе WidgetFamily виджета, например:

Отображает данные на .accessoryRectangular с forMainScreen, равным true.

Отображает данные на .systemLarge с forMainScreen, равным false.

Буду благодарен, если кто-нибудь поможет, вот мой код:
struct Provider: IntentTimelineProvider {
typealias Entry = CountingEntry
typealias Intent = CountingConfigurationIntent

func getSnapshot(for configuration: CountingConfigurationIntent, in context: Context, completion: @escaping (CountingEntry) -> Void) {
let entry = CountingEntry(date: Date(), configuration: configuration)
completion(entry)
}
func placeholder(in context: Context) -> CountingEntry {
let entry = CountingEntry(date: Date(), configuration: CountingConfigurationIntent())
return entry
}
func getTimeline(for configuration: CountingConfigurationIntent, in context: Context, completion: @escaping (Timeline) -> Void) {
let entry = CountingEntry(date: Date(), configuration: configuration)
let timeline = Timeline(entries: [entry], policy: .never)
completion(timeline)
}
}

struct CountingEntry: TimelineEntry {
let date: Date
let configuration: CountingConfigurationIntent
}

struct CountingWidgetEntryView : View {
@Environment(\.widgetFamily) var family: WidgetFamily
var entry: Provider.Entry

var body: some View {
switch family {
//....
}
}
}

struct CountingWidget: Widget {
let kind: String = "CountingWidget"

var body: some WidgetConfiguration {
IntentConfiguration(kind: kind, intent: CountingConfigurationIntent.self, provider: Provider()) { entry in
CountingWidgetEntryView(entry: entry)
}
.supportedFamilies([.accessoryRectangular, .accessoryCircular, .systemSmall, .systemMedium, .systemLarge])
.contentMarginsDisabled()
}
}

class IntentHandler: INExtension, CountingConfigurationIntentHandling {
func provideWidgetTypeOptionsCollection(for intent: CountingConfigurationIntent, with completion: @escaping (INObjectCollection?, Error?) -> Void) {
if let data = getWidgetData() {
let categories = data.map { item in
let categorie = CountingType(identifier: String(item.id), display: item.name ?? "nil")
categorie.countingType = item.image
return categorie
}
completion(INObjectCollection(items: categories), nil)
}
}

override func handler(for intent: INIntent) -> Any {
return self
}

func getWidgetData() -> [WidgetModel]? {
let viewContext = PersistenceController.shared.container.viewContext
let request = NSFetchRequest(entityName: "WidgetModel")
//here
request.predicate = NSPredicate(format: "forMainscreen == %@", NSNumber(value: true))
request.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]
do {
return try viewContext.fetch(request)
} catch {
print(error.localizedDescription)
return nil
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... he-widgetf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»