ios – How to preview selected video from the gallery


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))
                        }
                    

Latest articles

spot_imgspot_img

Related articles

Leave a reply

Please enter your comment!
Please enter your name here

spot_imgspot_img