При изменении ContentView перестает отображаться список роликов с youtube


#1

Всем привет!
С помощью YouTube api загружаю список роликов с youtube. При запуске приложения все ОК, но стоит только что-то изменить в ContentView (в том числе при вызове .actionSheet), то список роликов пропадает…
Может нужно делать refresh/reload для моего Movielist?
Подскажите, пожалуйста, в чем проблема.

import SwiftUI

struct MovieList: View {

@ObservedObject var store: MovieStore
let layout = [
    GridItem(.flexible()),
    GridItem(.flexible())
]

var body: some View {
    NavigationView {
        ScrollView {
            LazyVGrid(columns: layout, spacing: 10) {
            ForEach(store.movies ?? [Movie]()) { movie in
                NavigationLink (destination: WebView(webViewURL: "https://www.youtube.com/embed/\(movie.videoId)")) {

                   URLImage(url: movie.thumbnail)
                }
            }
            }
        }
        .padding()
        .navigationBarTitle(Text("Youtube ролики"))
        .navigationBarTitleDisplayMode(.inline)
  }
    .onAppear {
       self.store.getAll()
    }
}

}

В ContetntView:

VStack {
MovieList(store: MovieStore())

        }

В WebView:

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {

var webViewURL: String = ""

func makeUIView(context: UIViewRepresentableContext<WebView>) -> WebView.UIViewType {
    WKWebView()

}

func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>) {
    let request = URLRequest(url: URL(string: webViewURL)!)
    uiView.load(request)
}

}

Благодарю!


#2

вы запрашиваете список фильмов в .onAppear, который вызывается каждый раз при перерисовке интерфейса. Зачем? Вам же нужно загрузить его один раз. Делайте это на верхней вьюшке (у вас это вроде ContetntView) при ёё инициализации, то есть в init()


#3

Записал видео, на форум вроде нельзя загружать…
При нажатии на кнопку “Отключить все” перерисовывается текст кнопки, и при этом слетает список видео… Тоже самое происходит, если при нажатии на кнопку вызвать .alert.

p.s И еще - почему при переходе в WKWebView странное разрешение превью видео?


#4
struct MovieStore {
    init() {
        getAll()
    }
}

struct ContentView: View {
    let store = MovieStore()

    var body: some View {
        VStack {
            MovieList(store: store)
        }
    }
}

#5

Благодарю! Все заработало=)