CarbsView.swift 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import SwiftUI
  2. struct CarbsView: View {
  3. @EnvironmentObject var state: WatchStateModel
  4. @State var amount = 0.0
  5. var numberFormatter: NumberFormatter {
  6. let formatter = NumberFormatter()
  7. formatter.numberStyle = .decimal
  8. formatter.minimum = 0
  9. formatter.maximum = 120
  10. formatter.maximumFractionDigits = 0
  11. formatter.allowsFloats = false
  12. return formatter
  13. }
  14. var body: some View {
  15. VStack(spacing: 16) {
  16. HStack {
  17. Button {
  18. let newValue = amount - 5
  19. amount = max(newValue, 0)
  20. } label: { Image(systemName: "minus") }
  21. .frame(width: 50)
  22. Spacer()
  23. Text(numberFormatter.string(from: amount as NSNumber)! + " g")
  24. .font(.title2)
  25. .focusable(true)
  26. .digitalCrownRotation(
  27. $amount,
  28. from: 0,
  29. through: 120,
  30. by: 1,
  31. sensitivity: .medium,
  32. isContinuous: false,
  33. isHapticFeedbackEnabled: true
  34. )
  35. Spacer()
  36. Button {
  37. let newValue = amount + 5
  38. amount = min(newValue, 120)
  39. } label: { Image(systemName: "plus") }
  40. .frame(width: 50)
  41. }
  42. Button {
  43. state.addCarbs(10)
  44. }
  45. label: {
  46. HStack {
  47. Image("carbs", bundle: nil)
  48. .renderingMode(.template)
  49. .resizable()
  50. .frame(width: 24, height: 24)
  51. .foregroundColor(.loopGreen)
  52. Text("Add Carbs")
  53. }
  54. }
  55. .disabled(amount <= 0)
  56. }
  57. .navigationTitle("Add Carbs")
  58. }
  59. }
  60. struct CarbsView_Previews: PreviewProvider {
  61. static var previews: some View {
  62. CarbsView().environmentObject(WatchStateModel())
  63. }
  64. }