[Video Summary] Ch. 8.12 Part I - SwiftUI @FirestoreQuery - Adding & Viewing Reviews (Snacktacular app)
Mô tả nhanh
Video này hướng dẫn cách sử dụng property wrapper @FirestoreQuery
trong SwiftUI để truy cập một collection lồng nhau bên trong một document, cũng như cách thêm và hiển thị các review (đánh giá) trong ứng dụng Snacktacular.
Video
Mô tả chi tiết
Video này hướng dẫn cách sử dụng @FirestoreQuery
để truy cập collection lồng nhau trong Firestore, cụ thể là các review
của một spot
(nhà hàng). Video cũng hướng dẫn cách thêm và xem các review, cũng như cách xử lý lỗi crash preview provider.
Các bước chính bao gồm:
-
Cấu trúc dữ liệu Firestore:
- Giải thích cấu trúc lồng nhau của dữ liệu: collection
spots
, documentspot
, collectionreviews
. - Đường dẫn truy cập sẽ có dạng:
spots/{spotId}/reviews
.
- Giải thích cấu trúc lồng nhau của dữ liệu: collection
-
Sử dụng
@FirestoreQuery
:- Import
FirebaseFirestoreSwift
. - Khai báo
@FirestoreQuery
để lấy danh sáchreviews
. - Khắc phục lỗi không truy cập được
spot.id
ở cấp khai báo thuộc tính bằng cách khởi tạo path sai và sau đó hiệu chỉnh trongonAppear
. - Thêm điều kiện kiểm tra
preview running
để tránh crash preview provider.
- Import
-
Hiển thị danh sách reviews:
- Sử dụng
List
vàSection
để hiển thị review, có header chứa thông tin đánh giá trung bình và nút "Rate it". - Sử dụng
ForEach
để lặp qua mảngreviews
lấy từ Firestore. - Sử dụng
NavigationLink
để chuyển đếnReviewView
khi click vào một review.
- Sử dụng
-
Tạo giao diện nhập review:
- Thêm
@State
để quản lý việc hiển thị sheet ReviewView - Thêm một sheet modifier để hiển thị
ReviewView
khi người dùng ấn nút "Rate it". - Chuyển navigation stack vào review view trong sheet.
- Thêm
-
Tạo
ReviewViewModel
:- Copy code từ
SpotViewModel
và sửa lại cho phù hợp vớiReview
. - Tạo hàm
saveReview
để thêm hoặc cập nhật review vào Firestore. - Sử dụng
collectionString
để xác định đường dẫn collection một cách rõ ràng. - Cập nhật lại hàm
saveReview
để sử dụngguard let
tránh lỗinil
và trả về giá trịBoolean
báo hiệu thành công hay không.
- Copy code từ
-
Lưu review:
- Trong
ReviewView
, gọireviewVM.saveReview
khi người dùng nhấn nút "Lưu". - Sử dụng
await
vìsaveReview
là async function. - Sửa lỗi không cập nhật rating bằng cách chuyển
@State
thành@Binding
trongStarSelectionView
. - Cập nhật lại
ReviewView
để có thể nhận biết được việc save data review có thành công hay không.
- Trong
-
Lưu ý:
- Cần chỉnh sửa
StarSelectionView
để sử dụng@Binding
thay vì@State
để cập nhật rating. - Cần xử lý lỗi crash khi thêm mới spot chưa có ID.
- Cần chỉnh sửa
Video kết thúc với việc review hoạt động cơ bản, người dùng có thể thêm và chỉnh sửa review. Tuy nhiên, vẫn còn một số việc cần phải làm, sẽ được tiếp tục ở video tiếp theo
Chúc bạn học tập hiệu quả và có những trải nghiệm lập trình thú vị!