[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
Listvà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ảngreviewslấy từ Firestore. - Sử dụng
NavigationLinkđể chuyển đếnReviewViewkhi 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ị
ReviewViewkhi 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ừ
SpotViewModelvà 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 lettránh lỗinilvà trả về giá trịBooleanbáo hiệu thành công hay không.
- Copy code từ
-
Lưu review:
- Trong
ReviewView, gọireviewVM.saveReviewkhi người dùng nhấn nút "Lưu". - Sử dụng
awaitvìsaveReviewlà async function. - Sửa lỗi không cập nhật rating bằng cách chuyển
@Statethành@BindingtrongStarSelectionView. - 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@Bindingthay 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ị!
