如何解决如何在widgetkit swiftui中一次显示包含所有时间线条目的大型小部件?
我有一个带有小部件的任务应用程序,它们都运行良好,但我想添加一个大型小部件,它可以一次显示许多任务(可能是 5 个),但是当从 Provider() 获取数据时,它只显示一个像其他小部件一样的时间。 在 getTimeline 和小部件代码下方。有人可以帮忙吗?
获取时间线:
func getTimeline(in context: Context,completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [WidgetContent] = []
let viewContext = PersistenceController.shared.container.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Task");
let currentDate = Date()
for hourOffset in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .hour,value: hourOffset,to: currentDate)!
var entry = snapshotEntry
var results = [Task]()
do { results = try viewContext.fetch(request) as! [Task] }
catch let error as NSError { print("Could not fetch \(error),\(error.userInfo)") }
let randomIndex = Int(arc4random_uniform(UInt32(results.count)))
let displayComplete = results[randomIndex].isComplete
let displayAdded = results[randomIndex].dateAdded
let displayName = results[randomIndex].name
let displayCategory = results[randomIndex].secondaryCategory
let displayImportance = results[randomIndex].important
let displayUrgency = results[randomIndex].urgent
entry = WidgetContent(date: entryDate,isComplete: displayComplete,dateAdded: displayAdded!,name: displayName!,secondaryCategory: displayCategory!,important: displayImportance!,urgent: displayUrgency!)
if !results[randomIndex].isComplete {
entries.append(entry)
}
}
let timeline = Timeline(entries: entries,policy: .atEnd)
completion(timeline)
}
小工具:
struct Important2DoMultipleWidget: Widget {
let kind: String = "Important2DoMultipleWidget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind,provider: Provider()) { entry in
DetailedEntryView(model: entry)
}
.configurationdisplayName("Important2Do Widget Detailed Version")
.description("Find your important and urgent things.")
.supportedFamilies([.systemLarge])
}
}
struct LargeDetailedEntryView: View {
@Environment(\.widgetFamily) var family
let model: [WidgetContent]
var body: some View {
vstack(spacing: 0) {
ForEach(0 ..< model.count) { value in
HStack(spacing: 5) {
vstack(alignment: .leading) {
Spacer()
HStack(alignment: .firstTextBaseline,spacing: 2) {
CategoryImageWidgetView(category: Category(rawValue: model[value].secondaryCategory)!)
.font(.footnote)
.padding(.all,5)
.foregroundColor(Category(rawValue: model[value].secondaryCategory)!.color)
.background(Category(rawValue: model[value].secondaryCategory)!.color.opacity(0.3))
.cornerRadius(12)
Text(model[value].secondaryCategory)
.font(.caption)
.foregroundColor(.primary)
.padding(.top,8)
}
Spacer()
...
上面的 model.count 始终只有 1 条记录,但它会正确更改时间线上每个条目显示的任务。 下面是关于它现在看起来如何的图片,作为一个常规小部件工作,我希望将多个任务放入同一个大小部件中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。