I am trying to display my selected video as preview before it uploaded, just like my preview of the image is being shown in the image below the image preview
I am not able to display my selected video in screen as preview because of these errors.
Result of ‘VideoPlayer’ initializer is unused
VideoPlayer(player: AVPlayer(url: url))
@State var url: URL?
var body: some View {
if let url {
VideoPlayer(player: AVPlayer(url: url))
}
Full Code
import AVKit
struct CreateView: View {
@State var url: URL?
private var user: User? {
return UserService.shared.currentUser
}
var body: some View {
NavigationStack {
VStack {
HStack(alignment: .top) {
RectangularImageSize( size: .small)
VStack(alignment: .leading, spacing: 4) {
Text(user?.username ?? "")
.fontWeight(.semibold)
TextField("Type Something", text: $viewModel.text, axis: .vertical)
Spacer()
}
.font(.footnote)
if !viewModel.text.isEmpty {
Button {
viewModel.text = ""
} label: {
Image(systemName: "xmark")
.resizable()
.frame(width: 12, height: 12)
.foregroundColor(.gray)
Button(action: {
viewModel.selectedImage = nil
}, label: {
Image(systemName: "xmark")
.resizable()
.scaledToFit()
.frame(width: 10, height: 10)
.padding(8)
})
.background(Color(.gray))
.foregroundColor(.white)
.clipShape(Circle())
}
.padding(8)
Spacer()
} else {
if viewModel.text.isEmpty {
PhotosPicker(
selection: $viewModel.selectedImage,
matching: .any(of: [.images,.videos, .not(.livePhotos)]),
photoLibrary: .shared()) {
Image(systemName: "photo")
}
}
}
Spacer()
}
.padding()
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button("Cancel") {
dismiss()
}
.font(.subheadline)
.foregroundStyle(Color.black)
}
ToolbarItem(placement: .navigationBarTrailing) {
Button("Post") {
Task {
try await viewModel.uploadPost(caption: captionText)
dismiss()
}
}
.opacity(viewModel.text.isEmpty ? 0.5 : 1.0)
.disabled(viewModel.text.isEmpty)
.font(.subheadline)
.fontWeight(.semibold)
.foregroundStyle(Color.green)
}
}
.onDisappear { tabIndex = 0 }
}
Divider()
if uiImage != nil {
Image(uiImage: uiImage!)
.resizable()
.scaledToFit()
.frame(width: 200, height: 200)
}
}
.onChange(of: viewModel.selectedImage) { result in
Task {
do {
if let data = try await viewModel.selectedImage?.loadTransferable(type: Data.self) {
if let uiImage = UIImage(data: data) {
self.uiImage = uiImage
if let url {
}
}
}
} catch {
print(error.localizedDescription)
viewModel.selectedImage = nil
}
if let url {
VideoPlayer(player: AVPlayer(url: url))
}