One way to solve your issue is creating a sharable object and move onAdd into the object.
You can extend CardsInfo.
Something like this:
class CardsInfo: ObservableObject {
		@Published var newCard: CardInfo = CardInfo()
		@Published var cards: [Card] = [] //<-
		
		//↓ Move `onAdd` here (and renamed)
		func add() {
				cards.append(Card(title: "Card #\(cards.count)"))
		}
}
Your AddView would look like this sharing CardsInfo:
struct AddView: View {
		@ObservedObject var cardsInfo: CardsInfo //<- Hold shared object here
		
		var body: some View {
				NavigationView {
						VStack {
								CardView(name: cardsInfo.newCard.name, id: cardsInfo.newCard.id) //<-
								TextField("Name", text: $cardsInfo.newCard.name) //<-
										.textFieldStyle(RoundedBorderTextFieldStyle())
										.shadow(radius: 10)
								TextField("ID", text: $cardsInfo.newCard.id) //<-
										.textFieldStyle(RoundedBorderTextFieldStyle())
										.shadow(radius: 10)
								TextField("Card Name", text: $cardsInfo.newCard.cname) //<-
										.textFieldStyle(RoundedBorderTextFieldStyle())
										.shadow(radius: 10)
								Button(action: {
										cardsInfo.add() //<- You can call methods in a shared object
								}) {
										Text("Create")
												.bold()
								}
								.disabled(self.cardsInfo.newCard.name.isEmpty self.cardsInfo.newCard.id.isEmpty 		self.cardsInfo.newCard.cname.isEmpty) //<-
								.foregroundColor(.white)
								.padding()
								.padding(.horizontal, 100)
								.background(Color.accentColor)
								.cornerRadius(10)
						}.padding()
						.navigationTitle(cardsInfo.newCard.cname) //<-
						.navigationBarTitleDisplayMode(.inline)
				}
		}
}
And your CardsView as:
struct CardsView: View {
		@StateObject var cardsInfo = CardsInfo() //<- Share this object
		@State var showSheetView = false
		@State private var editMode = EditMode.inactive
		//↓ Move `cards` into `CardsInfo`
		//@State private var cards: [Card] = []
		//↓ You have no need to have `count` where you can easily access `cards.count`
				//private static var count = 0
		var body: some View {
				NavigationView {
						List {
								ForEach(cardsInfo.cards) { card in
										NavigationLink(destination: CardFullView(cname: cardsInfo.newCard.cname, name: cardsInfo.newCard.name, id: cardsInfo.newCard.id)) {
												CardRow(cname: cardsInfo.newCard.cname, name: cardsInfo.newCard.name, id: cardsInfo.newCard.id)
										}
								}
								.onDelete(perform: onDelete)
								.onMove(perform: onMove)
						}
								.navigationTitle("Cards")
								.toolbar {
										ToolbarItem(placement: .navigationBarLeading) {
												EditButton()
										}
										ToolbarItem(placement: .navigationBarTrailing) {
												Button(action: {
														self.showSheetView.toggle()
												}) {
														Image(systemName: "plus")
												}.sheet(isPresented: $showSheetView) {
														AddView(cardsInfo: cardsInfo) //<- Pass the shared object
										}
								}
						}
						.environment(\.editMode, $editMode)
				}
		}
		//↓ Remove this method
//		private var addButton: some View {
//				switch editMode {
//				case .inactive:
//						return AnyView(Button(action: onAdd) { Image(systemName: "plus") })
//				default:
//						return AnyView(EmptyView())
//				}
//		}
		//↓ Move this into the shared object
//		func onAdd() {
//				withAnimation {
//						cards.append(Card(title: "Card #\(Self.count)"))
//								Self.count += 1
//				}
//		}
	
		private func onDelete(offsets: IndexSet) {
				cardsInfo.cards.remove(atOffsets: offsets) //<-
		}
		
		private func onMove(source: IndexSet, destination: Int) {
				cardsInfo.cards.move(fromOffsets: source, toOffset: destination) //<-
		}
}
There may be many parts to fix to make this work, but please try.