ContentView.swift
//
// ContentView.swift
// Swiftuitest
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@EnvironmentObject var order: Order
private var badgePosition: CGFloat = 2
private var tabsCount: CGFloat = 3
var body: some View {
GeometryReader { geometry in
ZStack(alignment: .bottomLeading) {
// TabView
TabView {
MenuView()
.tabItem {
Image(systemName: "list.dash")
Text("Menu")
}.tag(0)
OrderView()
.tabItem {
Image(systemName: "cart")
Text("Order")
}.tag(1)
Text("Favourite")
.tabItem {
Image(systemName: "star")
Text("Favourite")
}.tag(2)
}
// Badge View
ZStack {
Circle()
.foregroundColor(.red)
Text("\(self.order.items.count)")
.foregroundColor(.white)
.font(Font.system(size: 12))
}
.frame(width: 15, height: 15)
.offset(x: ( ( 2 * self.badgePosition) - 0.95 ) * ( geometry.size.width / ( 2 * self.tabsCount ) ) + 2, y: -25)
.opacity(self.order.items.count == 0 ? 0 : 1.0)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static let order = Order()
static var previews: some View {
ContentView().environmentObject(order)
}
}
MenuView.swift
//
// MenuView.swift
// Swiftuitest
//
// Created by Cairocoders
//
import SwiftUI
struct MenuView: View {
@EnvironmentObject var order: Order
var body: some View {
VStack {
Button(action:{
self.order.add(item: "Order Item")
}) {
Image(systemName: "cart.badge.plus")
Text("Add to cart")
}.padding(.bottom, 30.0)
Button(action:{
self.order.remove(item: "Order Item")
}) {
Image(systemName: "cart.badge.minus")
Text("Remove from cart")
}
}
}
}
struct MenuView_Previews: PreviewProvider {
static let order = Order()
static var previews: some View {
MenuView().environmentObject(order)
}
}
OrderView.swift
//
// OrderView.swift
// Swiftuitest
//
// Created by Cairocoders
//
import SwiftUI
struct OrderView: View {
@EnvironmentObject var order: Order
var body: some View {
List {
ForEach(order.items, id: \.self) { item in
Text(item)
}
}
}
}
struct OrderView_Previews: PreviewProvider {
static let order = Order()
static var previews: some View {
OrderView().environmentObject(order)
}
}
Order.swift
//
// Order.swift
// Swiftuitest
//
// Created by Cairocoders
//
import SwiftUI
class Order: ObservableObject {
@Published var items = [String]()
func add(item: String) {
items.append(item)
print(items)
}
func remove(item: String) {
if let index = items.firstIndex(of: item) {
items.remove(at: index)
print(items)
}
}
}
SwiftuitestApp.swift
//
// SwiftuitestApp.swift
// Swiftuitest
//
// Created by Cairocoders
//
import SwiftUI
@main
struct SwiftuitestApp: App {
@StateObject private var order = Order()
var body: some Scene {
WindowGroup {
ContentView().environmentObject(order)
}
}
}
