Brak opisu

FlowerCard.swift 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. //
  2. // FowerCard.swift
  3. // Flowerdex
  4. //
  5. // Created by Víctor A. Hernández on 10/25/20.
  6. //
  7. import SwiftUI
  8. struct FlowerCard: View {
  9. var flower: Flower
  10. @ObservedObject var imageManager = ImageManager()
  11. var size: CGFloat = 150
  12. @Environment(\.colorScheme) var colorScheme
  13. var body: some View {
  14. HStack {
  15. HStack(alignment: .top, spacing: 0) {
  16. // TODO: make placeholder and actual image look equally good
  17. Image(uiImage: self.imageManager.image!)
  18. .resizable()
  19. // .scaledToFit()
  20. .aspectRatio(contentMode: .fill)
  21. .frame(width: self.size, height: self.size)
  22. .background(colorScheme == .dark ? Constants.Colors.darkGrayColor : Color.white)
  23. CardDescription(flower: flower, size: size, isFavoriteLocal: flower.isFavorite)
  24. }
  25. }
  26. .cornerRadius(15)
  27. .shadow(radius: 5)
  28. .padding(.horizontal, 20)
  29. .padding(.vertical, 5)
  30. .onAppear {
  31. self.imageManager.fetchImage(self.flower.imageURL)
  32. }
  33. }
  34. }
  35. struct CardDescription: View {
  36. var flower: Flower
  37. var size: CGFloat
  38. @State var isFavoriteLocal: Bool
  39. @EnvironmentObject var fModel: FlowerService
  40. @Environment(\.colorScheme) var colorScheme
  41. var body: some View {
  42. VStack(alignment: .leading) {
  43. Text(self.flower.commonName.capitalized)
  44. .font(.headline)
  45. Spacer()
  46. HStack {
  47. Text(self.flower.genus + " > " + self.flower.family)
  48. .font(.caption)
  49. Spacer()
  50. Button(action: {
  51. // Depending on past value
  52. if self.isFavoriteLocal {
  53. fModel.removeFavorite(self.flower.id)
  54. } else {
  55. fModel.putFavorite(self.flower.id)
  56. }
  57. // Change value after request
  58. self.isFavoriteLocal.toggle()
  59. }) {
  60. if self.isFavoriteLocal {
  61. Image(systemName: "star.fill")
  62. .foregroundColor(.yellow)
  63. } else {
  64. Image(systemName: "star")
  65. .foregroundColor(.black)
  66. }
  67. }
  68. }
  69. }
  70. .padding(.vertical, 20)
  71. .padding(.horizontal, 15)
  72. .frame(maxWidth: .infinity, maxHeight: self.size, alignment: .topLeading)
  73. .background(colorScheme == .dark ? Constants.Colors.darkGrayColor : Color.white)
  74. }
  75. }
  76. struct FowerCardView_Previews: PreviewProvider {
  77. static var previews: some View {
  78. Group {
  79. FlowerCard(flower: dummyFlowers[0])
  80. FlowerCard(flower: dummyFlowers[1])
  81. }
  82. .previewLayout(.sizeThatFits)
  83. }
  84. }