fix: 修复导出诊断包点击后黑屏问题

将 .sheet(isPresented:) + if let 改为 .sheet(item:) 模式,
消除 feedbackPackageURL 与 showingShareSheet 的状态时序竞争。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
empty
2026-02-08 00:43:43 +08:00
parent c826689ee4
commit 2f6c2d9557

View File

@@ -13,8 +13,7 @@ struct SettingsView: View {
@State private var cacheSize: String = String(localized: "common.calculating") @State private var cacheSize: String = String(localized: "common.calculating")
@State private var showingClearCacheAlert = false @State private var showingClearCacheAlert = false
@State private var showingClearRecentWorksAlert = false @State private var showingClearRecentWorksAlert = false
@State private var feedbackPackageURL: URL? @State private var feedbackPackageURL: IdentifiableURL?
@State private var showingShareSheet = false
@State private var showingLanguageChangeAlert = false @State private var showingLanguageChangeAlert = false
@State private var showingFeedbackConfirmAlert = false @State private var showingFeedbackConfirmAlert = false
@State private var pendingLanguage: LanguageManager.Language? @State private var pendingLanguage: LanguageManager.Language?
@@ -182,10 +181,8 @@ struct SettingsView: View {
} message: { } message: {
Text(String(localized: "settings.feedbackConfirmMessage")) Text(String(localized: "settings.feedbackConfirmMessage"))
} }
.sheet(isPresented: $showingShareSheet) { .sheet(item: $feedbackPackageURL) { item in
if let url = feedbackPackageURL { ShareSheet(activityItems: [item.url])
ShareSheet(activityItems: [url])
}
} }
} }
@@ -299,8 +296,7 @@ struct SettingsView: View {
let url = await createFeedbackPackage() let url = await createFeedbackPackage()
await MainActor.run { await MainActor.run {
if let url { if let url {
feedbackPackageURL = url feedbackPackageURL = IdentifiableURL(url: url)
showingShareSheet = true
} }
} }
} }
@@ -425,6 +421,12 @@ extension PHAuthorizationStatus: @retroactive CustomStringConvertible {
} }
} }
// MARK: - Identifiable URL Wrapper
struct IdentifiableURL: Identifiable {
let id = UUID()
let url: URL
}
// MARK: - Share Sheet // MARK: - Share Sheet
struct ShareSheet: UIViewControllerRepresentable { struct ShareSheet: UIViewControllerRepresentable {
let activityItems: [Any] let activityItems: [Any]