banyaro-ios/BanYaroGo/Views/MainTabView.swift
rene d807db57a2 1.1: Home-Screen-Widget + Siri-Kurzbefehl „Gassi gehen"
App Group group.app.banyaro.ios verbindet App und Widget-Extension
(Entitlements in beiden Targets, CODE_SIGN_ENTITLEMENTS fürs Widget).

Home-Screen-Widget (D):
- BanYaroHomeWidget (klein + mittel): Tagesfoto, Hundename, nächster Termin.
- App schreibt beim Heim-Laden einen Snapshot (HomeWidgetData) in die App
  Group und triggert WidgetCenter-Reload; Snapshot wird bei Logout/401 geleert.

Siri-/Kurzbefehl (E):
- StartWalkIntent „Gassi gehen" + AppShortcutsProvider (öffnet die App).
- WalkLauncher überbrückt Intent → UI: Flag in der App Group, beim Aktivwerden
  eingelöst → Aufnehmen-Tab + Aufnahme-Start (TrackingView.startFresh).
- MainTabView mit Tab-Auswahl (Tags), BanYaroGoApp liest scenePhase.
2026-06-02 20:01:16 +02:00

38 lines
1.2 KiB
Swift

import SwiftUI
import SwiftData
struct MainTabView: View {
@Environment(AuthSession.self) private var auth
@Environment(\.modelContext) private var ctx
@State private var selectedTab = 0
private let launcher = WalkLauncher.shared
var body: some View {
TabView(selection: $selectedTab) {
HeimView()
.tabItem { Label("Heim", systemImage: "house.fill") }
.tag(0)
RoutesListView()
.tabItem { Label("Touren", systemImage: "map.fill") }
.tag(1)
TrackingView()
.tabItem { Label("Aufnehmen", systemImage: "figure.walk") }
.tag(2)
SettingsView()
.tabItem { Label("Mehr", systemImage: "person.crop.circle") }
.tag(3)
}
.task {
await auth.loadProfile()
// Offline gesicherte Touren beim Start hochladen (falls online).
await OfflineCache.syncPendingRoutes(in: ctx)
launcher.consumePendingFlag()
}
.onChange(of: launcher.pendingStart) { _, pending in
if pending { selectedTab = 2 }
}
}
}