taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit 148cf1b624d27377cebb2560754f33d92a4a8232
parent 6471011a803be639ac9ab37bba0ebc91283238c1
Author: Marc Stibane <marc@taler.net>
Date:   Thu, 15 Feb 2024 06:53:42 +0100

popToRootView Banking

Diffstat:
MTalerWallet1/Controllers/TalerWallet1App.swift | 21++++++++++++++++++---
MTalerWallet1/Views/Main/MainView.swift | 4+++-
2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/TalerWallet1/Controllers/TalerWallet1App.swift b/TalerWallet1/Controllers/TalerWallet1App.swift @@ -17,7 +17,8 @@ import SymLog struct TalerWallet1App: App { private let symLog = SymLogV() @Environment(\.scenePhase) private var phase - @StateObject private var viewState = ViewState.shared // popToRootView() + @StateObject private var viewState = ViewState.shared // popToRootView() + @StateObject private var viewState2 = ViewState2.shared // popToRootView() @State private var isActive = true @State private var soundPlayed = false @@ -39,6 +40,7 @@ struct TalerWallet1App: App { MainView(logger: logger, stack: CallStack("App"), soundPlayed: $soundPlayed) .environmentObject(debugViewC) // change viewID / sheetID .environmentObject(viewState) // popToRoot + .environmentObject(viewState2) // popToRoot .environmentObject(controller) .environmentObject(model) /// external events are taler:// or payto:// URLs passed to this app @@ -104,9 +106,22 @@ final class ViewState : ObservableObject { @Published var rootViewId = UUID() let logger = Logger(subsystem: "net.taler.gnu", category: "ViewState") - public func popToRootView(_ stack: CallStack) -> Void { + public func popToRootView(_ stack: CallStack?) -> Void { logger.info("popToRootView") - rootViewId = UUID() // setting a new ID will cause tableView popToRootView behaviour + rootViewId = UUID() // setting a new ID will cause 1st NavStack popToRootView behaviour + } + + private init() { } +} + +final class ViewState2 : ObservableObject { + static let shared = ViewState2() + @Published var rootViewId = UUID() + let logger = Logger(subsystem: "net.taler.gnu", category: "ViewState2") + + public func popToRootView(_ stack: CallStack?) -> Void { + logger.info("popToRootView") + rootViewId = UUID() // setting a new ID will cause 2nd NavStack popToRootView behaviour } private init() { } diff --git a/TalerWallet1/Views/Main/MainView.swift b/TalerWallet1/Views/Main/MainView.swift @@ -89,6 +89,7 @@ extension MainView { @EnvironmentObject private var controller: Controller @EnvironmentObject private var model: WalletModel @EnvironmentObject private var viewState: ViewState // popToRootView() + @EnvironmentObject private var viewState2: ViewState2 // popToRootView() let balancesTitle = String(localized: "TitleBalances", defaultValue: "Balances") let exchangesTitle = String(localized: "TitleExchanges", defaultValue: "Banking") let settingsTitle = String(localized: "TitleSettings", defaultValue: "Settings") @@ -166,7 +167,8 @@ extension MainView { ExchangeListView(stack: stack.push(exchangesTitle), balances: $balances, navTitle: exchangesTitle) - }.navigationViewStyle(.stack) + }.id(viewState2.rootViewId) // any change to rootViewId triggers popToRootView behaviour + .navigationViewStyle(.stack) .tabItem { Image(systemName: "building.columns") // "arrow.triangle.2.circlepath") .accessibilityLabel(exchangesTitle)