[Video Summary] Schmutzli's Naughty List - A #BuiltWithProfG SwiftUI Exam Solution
Mô tả nhanh
Video này trình bày giải pháp cho bài kiểm tra SwiftUI của Prof G, xây dựng ứng dụng "Naughty List" (Danh sách nghịch ngợm) cho nhân vật Schmutzli, phụ tá của ông già Noel Thụy Sĩ. Ứng dụng này sử dụng Swift Data để quản lý danh sách trẻ em nghịch ngợm và cho phép người dùng tương tác với danh sách, thêm/sửa/xóa thông tin cũng như thực hành "tát" các hình ảnh trẻ em.
Video
Mô tả chi tiết
Video này trình bày giải pháp cho bài kiểm tra SwiftUI của Prof G, xây dựng ứng dụng "Naughty List" (Danh sách nghịch ngợm) cho nhân vật Schmutzli, phụ tá của ông già Noel Thụy Sĩ. Ứng dụng này sử dụng Swift Data để quản lý danh sách trẻ em nghịch ngợm và cho phép người dùng tương tác với danh sách, thêm/sửa/xóa thông tin cũng như thực hành "tát" các hình ảnh trẻ em.
Các bước chi tiết để xây dựng ứng dụng:
-
Tạo dự án mới:
- Tạo một dự án Swift UI mới với tên "Naughty List".
- Tải xuống và thêm các tài nguyên (hình ảnh, âm thanh, biểu tượng) vào dự án.
- Thiết lập biểu tượng ứng dụng và màn hình chờ (launch screen).
-
Tạo class
Child:- Tạo class
Child(con trẻ) với các thuộc tính:firstName,lastName,naughty,smacks, vànotes. - Import
SwiftDatavà sử dụng@Modelmacro. - Cung cấp giá trị mặc định cho các thuộc tính và tạo
init.
- Tạo class
-
Tạo mock data:
- Thêm extension cho class
Childđể cung cấp dữ liệu mock (dữ liệu thử nghiệm) với các thuộc tính như trên. - Tạo một biến static
previewkiểuModelContainerđể chứa dữ liệu mock. - Sử dụng
container.mainContext.insertđể thêm dữ liệu mock.
- Thêm extension cho class
-
Cấu hình file app:
- Import
SwiftData. - Thêm
@mainActor @ModelContainerđể hỗ trợ Swift Data. - In đường dẫn đến thư mục lưu trữ dữ liệu Swift Data trên simulator.
- Đổi
ContentViewthànhListView.
- Import
-
Cấu hình
ListView:- Import
SwiftData. - Khai báo biến
@Querychildrenđể đọc dữ liệu từ Swift Data. - Sử dụng
modelContainermodifier để hiển thị dữ liệu mock trong preview. - Tạo một
Listđể hiển thị danh sách trẻ em, mỗi item bao gồm tên và ảnh (naughty/nice). - Sử dụng
navigationTitleđể đặt tiêu đề cho view (Schmooley's List).
- Import
-
Thêm ảnh naughty/nice:
- Thêm
Imagevào list item để hiển thị ảnh naughty/nice dựa trên giá trịnaughtycủa mỗi child. - Sử dụng
resizablevàscaleToFitđể chỉnh kích thước ảnh, đặtframechiều cao là 30.
- Thêm
-
Tạo
DetailView:- Tạo một SwiftUI View mới tên
DetailView - Khai báo
@StatevariablechildkiểuChild. - Khai báo các State private variable như
firstName,lastName,naughty,smacks,notesđể tạo form nhập liệu. - Thêm
@Environment(\.modelContext)và@Environment(\.dismiss)để làm việc với swift data và điều khiển việc đóng màn hình. - Tạo form nhập liệu bằng các
TextFieldvàToggle. - Sử dụng
Stepperđể chọn số smacks (từ 0 đến 5). - Hiển thị số smacks đã chọn ở giữa màn hình bằng 1
Textview với font chữ lớn. - Thêm 2 ảnh boy/girl để phục vụ cho việc thực hành ''tát''. Các hình này cần có độ cao là 250 và nằm cạnh nhau, căn giữa màn hình.
- Tạo một SwiftUI View mới tên
-
Chức năng DetailView:
*Khi toggle
naughtyđược tắt, số smacks sẽ là 0. Ngược lại, khi bật, smacks sẽ là 1 (nếu trước đó là 0).
*Khi stepper smacks là 0, toggle naughty sẽ tắt. Khi smacks tăng lên 1 hoặc hơn, toggle naughty sẽ được bật.
*Sử dụng toán tử 3 ngôi (? :) thay choifhoặcswitchstatements để xử lý các điều kiện trên.- Thêm chức năng play sound khi chạm vào hình của bé trai/gái bằng cách sử dụng
gesture. - Thêm animation cho hình ảnh khi bị touch (giãn nở ra từ 0.9 lên 1).
- Thêm chức năng play sound khi chạm vào hình của bé trai/gái bằng cách sử dụng
-
Toolbar Detail View:
- Thêm toolbar với nút "Cancel" (top bar leading) và "Save" (top bar trailing).
- Khi nhấn cancel, đóng màn hình và về lại list view.
- Khi nhấn save, update data và đóng màn hình.
- Ẩn nút back mặc định của navigation bar.
- Load data từ
childvào các State private variable khi view xuất hiện. - Lưu data từ các State private variable vào
childkhi bấm save. Sử dụngmodelContext.insert(child)để tạo hoặc cập nhật record.
-
Toolbar List View:
- Thêm toolbar với nút "+" (top bar trailing).
- Khi nút "+" được nhấn, hiển thị
DetailViewtrong một sheet để tạo record mới. - Sử dụng
navigationLinkđể dẫn đếnDetailViewkhi click vào 1 item trong list.
-
Xóa record: Implement swipe to delete trên list item bằng cách sử dụng
swipeActions. Khi swipe và click delete thì record tương ứng bị xóa. -
Thêm âm thanh:
- Import avFoundation.
- Tạo variable
audioPlayerkiểuAVAudioPlayervàplaySoundfunction như trongDetailView. - Khi app vừa mở, chơi âm thanh
riff.
Chúc bạn thành công và luôn tìm thấy những điều thú vị trong thế giới lập trình!