NavigationStack: пункт назначения не обновляется при удалении пути во время анимации

В моем приложении я использую настраиваемую панель навигации, которая, помимо других функций, позволяет пользователю вернуться назад. Я использую NavigationStack с массивом с перечислениями в качестве пути. При переходе назад я просто удаляю последний элемент пути. Это работает хорошо, пока кнопка для перехода назад не нажата, а стек навигации еще не перемещается назад, т.е. не работает быстрое нажатие кнопки «Назад» 2+ раза. В этом случае NavigationStack отображает не пункт назначения верхнего пути, а предыдущий.

Простой пример, показывающий такое поведение:

      struct ContentView: View {
    @State var navigationPath: [Int] = []

    var body: some View {
        VStack {
            if !navigationPath.isEmpty {
                Button {
                    navigationPath.removeLast()
                } label: {
                    Text("Remove Last")
                }
            }

            NavigationStack(path: $navigationPath) {
                NavigationLink(value: 1) {
                    Text("Navigate to \(1)")
                }
                .navigationDestination(for: Int.self) { value in
                    NavigationLink(value: value+1) {
                        Text("Navigate to \(value+1)")
                    }
                    .toolbar(.hidden, for: .navigationBar)
                }
            }.onChange(of: navigationPath) { newValue in
                print("Path: \(newValue)")
            }
        }
    }
}

При нажатии на ссылку навигации два раза (значение 2 -> отображается переход к значению 3), а затем два щелчка (значение 0) на кнопке «Назад», я ожидаю, что начальная страница будет показана снова. Но пока панель навигации реагирует как ожидание (кнопка исчезает). Он по-прежнему будет показывать «Перейти к значению 2». Массив путей обновляется правильно.

0 ответов

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