Hey thanks for answering @Claude31 but that does not fit with I what I want. There is the all code of the page and a brief resumé of the idea. It's and AddView called AddExhibView to implement new element in a Database, so I want after pressing the save button to show the ListView called ExhibitView where I display all the data. There is the code :
import SwiftUI
import CoreData
struct AddExhibView: View {
@Environment(\.dismiss) var dismiss
@Environment(\.managedObjectContext) private var viewContext
@State private var name: String = ""
@State private var info: String = ""
@State private var isOnline: Bool = false
@State private var startDate: Date = Date()
@State private var endDate: Date = Date()
@State private var contactBuyer = false
@State private var showAlert: Bool = false
@State private var alertMessage: String = "Il en manque ..."
//MARK: Drag&Drop Stuff
@State var firstImage = NSImage(named: "image")
@State var firstUrl: URL?
@State var secondImage = NSImage(named: "image")
@State var secondUrl: URL?
@State var thirdImage = NSImage(named: "image")
@State var thirdUrl: URL?
//MARK: Aheviement Stuff
@State private var showAchievement: Bool = false
let achievement = Achievement(title: "Succès", description: "L'élément a été ajouté avec succès")
@State private var showExhibitView: Bool = false
var body: some View {
HStack{
DropImage(image: $firstImage, url: $firstUrl)
if firstImage != nil {
DropImage(image: $secondImage, url: $secondUrl)
if secondImage != nil{
DropImage(image: $thirdImage, url: $thirdUrl)
}
}
}
Form{
VStack{
TextField("Titre", text: $name)
.textFieldStyle(.roundedBorder)
HStack{
DatePicker("Début", selection: $startDate)
DatePicker("Fin", selection: $endDate)
Spacer()
Toggle("Informer les acheteurs", isOn: $contactBuyer)
Toggle("Mettre en ligne", isOn: $isOnline)
}
HStack{
VStack{
Text("Description")
Spacer()
}
TextEditor(text:$info)
.textFieldStyle(.roundedBorder)
}
}
}
.padding()
//MARK: Save
HStack{
Button("Validez"){
print("validez")
checkCondition()
if !showAlert{
addToBase()
showAchievement = true
Timer.scheduledTimer(withTimeInterval: 1.01, repeats: false) { _ in
showExhibitView = true
}
}
}
.alert(isPresented: $showAlert){
Alert(title: Text("Oops ?"),
message: Text(alertMessage))
}
.sheet(isPresented: $showAchievement) {
AchievementPopView(achievement: achievement, isPresented: $showAchievement)
}
}
.padding()
if showExhibitView{
ExhibitView()
}
}
private func checkCondition(){
if name == "" || firstImage == nil {
showAlert = true
return
}
}
private func addToBase(){
let firstImageData = jpegDataFrom(image: firstImage!)
if secondImage != nil && thirdImage == nil{
let secondImageData = jpegDataFrom(image: secondImage!)
DataController().addExhibit(name: name,
info: info,
firstImage: firstImageData,
secondImage: secondImageData,
thirdImage:nil,
startDate: startDate,
endDate: endDate,
isOnline: isOnline,
contactBuyer: contactBuyer,
context:viewContext)
print("2")
return
}
if secondImage != nil && thirdImage != nil {
let secondImageData = jpegDataFrom(image: secondImage!)
let thirdImageData = jpegDataFrom(image: thirdImage!)
DataController().addExhibit(name: name,
info: info,
firstImage: firstImageData,
secondImage: secondImageData,
thirdImage:thirdImageData,
startDate: startDate,
endDate: endDate,
isOnline: isOnline,
contactBuyer: contactBuyer,
context:viewContext)
print("3")
return
}
DataController().addExhibit(name: name,
info: info,
firstImage: firstImageData,
secondImage: nil,
thirdImage:nil,
startDate: startDate,
endDate: endDate,
isOnline: isOnline,
contactBuyer: contactBuyer,
context:viewContext)
print("1")
return
}
}