Как использовать NavigationStack в iOS 16, чтобы мне не приходилось явно создавать ссылку с меткой, которую нужно нажать?

У меня есть представление с анимацией загрузки, в основном, когда этот вызов выполняется, я хочу автоматически перейти к следующему экрану. Раньше с параметром isActive я мог создать пустое представление для ссылки и легко переключать логическое значение в конце вызова.

Я сделал, чтобы DoneLoading переключался так, что когда это правда, приложение будет переходить к ContentView, так как isPresented будет удовлетворен. Однако, когда я запускаю приложение и окончательная анимация заканчивается, представление начинается с начальной анимации.

      @State var show = false
@State var isDone: Bool = false
@State var doneLoading = false
@StateObject var viewModel: BumperScreenViewModel
@StateObject var sheetManager = SheetManager()

init(viewModel: @autoclosure @escaping () -> BumperScreenViewModel) {
    self._viewModel = .init(wrappedValue: viewModel())
}

var body: some View {
    NavigationStack {
        VStack {
            ZStack {
                Color(.trulliGold)
                    .ignoresSafeArea()
                VStack {
                    if show {
                        Spacer()
                        loadAnimation
                            .frame(width: 150, height: 150)
                            .task {
                                try? await viewModel.getDataFromAPI()
                                try? await Task.sleep(for: Duration.seconds(1))
                                doneLoading.toggle()
                                show.toggle()
                                print("Done")
                            }
                        Spacer()
                    } else {
                        launchAnimation
                    }
                }
            }
        }
    }
    .navigationDestination(isPresented: $doneLoading) {
        ContentView()
            .environmentObject(sheetManager)
    }
}

Единственная эффективная «Навигация», которую мне удалось выполнить, - это вызов ContentView с объектом среды в качестве дополнительного, если еще так это выглядит больше похоже на это (все остальное то же самое, не хотел добавлять еще больше кода) :

                      doneLoading.toggle()
                show.toggle()
                print("Done")
            }
        Spacer()
        
    } else if doneLoading {
        ContentView()
            .environmentObject(sheetManager)
    } else {
        launchAnimation
    }
}

это хак, которым я не горжусь и не хочу использовать его в приложении.

0 ответов

Другие вопросы по тегам