PreviewProvider 在小部件扩展中不起作用

Pau*_* T. 3 swift widgetkit swiftui

我有这样的看法

import SwiftUI

struct CurrentOrderView: View {
  let order: CurrentOrder

  var body: some View {
    VStack(alignment: .leading, spacing: 4) {
      HStack {
        Text("Order:")
        Text(order.orderId)
      }

      HStack {
        Image(uiImage: deliveryImage)
          .resizable()
          .aspectRatio(contentMode: .fit)
          .frame(width: 50.0, height: 50.0)
        Text(order.formattedDeliveryTimeString)
      }
    }
    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
    .padding()
    .background(LinearGradient(gradient: Gradient(colors: [.orange, .yellow]), startPoint: .top, endPoint: .bottom))
  }
}

// MARK: - Private

private extension CurrentOrderView {
  private var deliveryImage: UIImage {
    switch order.status {
    case .driverOnTheWayToRestaurant:
      return UIImage(named: "pin-restaurant") ?? UIImage()
    case .driverOnTheWayToUser:
      return UIImage(named: "rider") ?? UIImage()
    }
  }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    Group {
      CurrentOrderView(
        order: CurrentOrderEntryPlaceholderBuilder()
          .entry(with: .snapshot).order
      )
      .previewLayout(.fixed(width: 200, height: 100))
    }
  }
}
#endif
Run Code Online (Sandbox Code Playgroud)

在画布上我看到:

在此输入图像描述

Lem*_*mon 5

而不是使用previewLayout,使用WidgetPreviewContext

下面将添加一个中等小部件的预览。.systemMedium也可以是.systemSmall.systemLarge

#if DEBUG
struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    Group {
      CurrentOrderView(
        order: CurrentOrderEntryPlaceholderBuilder()
          .entry(with: .snapshot).order
      )
      .previewContext(WidgetPreviewContext(family: .systemMedium))
    }
  }
}
#endif
Run Code Online (Sandbox Code Playgroud)