ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU 2.1 Đối tượng nghiên cứu Trong đồ án này, nhóm sẽ tập trung nghiên cứu hai đối tượng chính là người dùng ứng dụng và các công nghệ để phát triển ứng dụn
Trang 1THÀNH PHỐ HỒ CHÍ MINH
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
Trang 2
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN – HỆ ĐÀO TẠO CHẤT LƯỢNG CAO
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
🙦 🙤
KHÓA LUẬN TỐT NGHIỆP CHUYÊN NGÀNH CNPM
Đề tài:
GVHD: ThS Mai Tuấn Khôi
Trang 3TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN – HỆ ĐÀO TẠO CHẤT LƯỢNG CAO
TP Hồ Chí Minh, tháng 7, năm 2024
KHÓA 2020-2024
Trang 4Trường Đại học Sư phạm Kỹ thuật
2 Cao Huỳnh Bảo An 20126087
Tên đề tài: Xây dựng ứng dụng ECommerce mua bán, quản lý giày dép
Thời gian thực hiện: 04/03/2024 đến 11/07/2024
Họ và tên Giáo viên hướng dẫn: ThS Mai Tuấn Khôi
Tp Hồ Chí Minh, ngày , tháng , năm 2024
Giảng viên hướng dẫn
(Ký & ghi rõ họ tên)
Trang 5PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
1 Nguyễn Nhật Nam 20110523
2 Cao Huỳnh Bảo An 20126087
Tên đề tài: Xây dựng ứng dụng ECommerce mua bán, quản lý giày dép
Thời gian thực hiện: 04/03/2024 đến 11/07/2024
Họ và tên Giáo viên phản biện: ThS Nguyễn Minh Đạo
Tp Hồ Chí Minh, ngày , tháng , năm 2024
Giảng viên phản biện
(Ký & ghi rõ họ tên)
Trường Đại học Sư phạm Kỹ thuật TP
Hồ Chí Minh Khoa Đào tạo Chất lượng cao
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
_
Trang 6đã tạo điều kiện để chúng em có thể tìm hiểu và thực hiện tốt đề tài Cùng với đó, chúng
em xin được gửi cảm ơn đến các bạn cùng khóa đã cung cấp nhiều thông tin và kiến thức hữu ích giúp chúng em có thể hoàn thiện hơn đề tài của mình
Mặc dù chúng em đã cố gắng hết sức để hoàn thành đồ án, tuy nhiên, vẫn còn nhiều thiếu sót về nội dung và hình thức Chúng em sẽ tiếp tục cải tiến mô hình đồ án
để nó trở nên hoàn thiện hơn Chúng em mong rằng Thầy Cô và các bạn cùng khóa sẽ tiếp tục đóng góp ý kiến và giúp đỡ chúng em trong những dự án tiếp theo Một lần nữa, chúng em muốn gửi lời cảm ơn sâu sắc đến tất cả mọi người đã giúp đỡ chúng em trong quá trình phát triển dự án
Trân trọng
Cao Huỳnh Bảo An Nguyễn Nhật Nam
Trang 7ĐỀ CƯƠNG KHÓA LUẬN TỐT NGHIỆP
Tìm hiểu về mobile framework Flutter
Tìm hiểu về các triển khai ứng dụng di động và web-app với Flutter
Tìm hiểu về Firebase và các ứng dụng của nó trong việc triển khai ứng dụng di động và web-app
Họ và Tên SV: Cao Huỳnh Bảo An Mã Số SV : 20126087
Họ và Tên SV: Nguyễn Nhật Nam Mã Số SV : 20110523
Thời gian làm luận văn : từ 04/03/2024 đến 11/07/2024
Chuyên ngành : Công nghệ phần mềm
Tên luận văn : Xây dựng ứng dụng Ecommerce mua bán, quản lý giày dép
GV hướng dẫn : ThS Mai Tuấn Khôi
Nhiệm Vụ Của Luận Văn :
1 Lý thuyết:
Trang 8CHƯƠNG 2 KHẢO SÁT HIỆN TRẠNG VÀ XÁC ĐỊNH YÊU CẦU
2.1 Thực trạng về tình hình thương mại điện tử hiện nay
2.2 Khảo sát các ứng dụng liên quan
2.3 Xác định yêu cầu
2.4 Cấu trúc hệ thống
CHƯƠNG 3 MÔ HÌNH HÓA YÊU CẦU
3.1 Lược đồ use case
3.2 Đặc tả use case, lược đồ tuần tự
CHƯƠNG 4 THIẾT KẾ HỆ THỐNG
4.1 Thiết kế class diagram
4.2 Thiết kế giao diện
CHƯƠNG 5 CÀI ĐẶT, KIỂM THỬ VÀ TRIỂN KHAI HỆ THỐNG
Khái niệm, ưu nhược điểm, các tính năng nổi bật
Cài đặt môi trường phát triển Flutter
Tạo dự án Flutter đầu tiên
o Tìm hiểu về Dart:
Khái niệm, cú pháp cơ bản, các kiểu dữ liệu
Làm quen với các khái niệm lập trình hướng đối tượng trong Dart
Tuần 2 (11/03 - 15/03):
Trang 9o Tìm hiểu về Firebase:
Các dịch vụ của Firebase (Authentication, Firestore, Storage, Functions, etc.)
Tích hợp Firebase vào dự án Flutter
Sử dụng Firebase để quản lý dữ liệu và xác thực người dùng
Tuần 3 (18/03 - 22/03):
o Tìm hiểu về kiến trúc ứng dụng Ecommerce:
Các thành phần chính của ứng dụng Ecommerce
Luồng xử lý dữ liệu trong ứng dụng Ecommerce
Các mô hình thiết kế phổ biến trong ứng dụng Ecommerce
Giai đoạn 2: Nghiên cứu và Lập kế hoạch (25/03/2024 - 12/04/2024)
o Lên ý tưởng về các tính năng chính của ứng dụng
o Thiết kế sơ bộ kiến trúc hệ thống và cơ sở dữ liệu
o Hoàn thiện tài liệu phân tích yêu cầu và kiến trúc hệ thống
o Lập kế hoạch chi tiết cho các giai đoạn tiếp theo, bao gồm các mốc thời gian quan trọng
Giai đoạn 3: Thiết kế UI/UX (15/04/2024 - 26/04/2024)
Tuần 7-8 (15/04 - 26/04):
o Thiết kế wireframes và mockups cho giao diện người dùng
o Xây dựng prototype tương tác để kiểm tra luồng người dùng
o Nhận phản hồi từ giảng viên và bạn bè để cải thiện thiết kế
o Hoàn thiện thiết kế UI/UX chi tiết
o Chuẩn bị tài liệu thiết kế UI/UX để trình bày
Trang 10Giai đoạn 4: Phát triển UI và Server (29/04/2024 - 05/07/2024)
Tuần 9-18 (29/04 - 05/07):
o Bắt đầu phát triển giao diện người dùng (UI) bằng Flutter
o Xây dựng API và các chức năng xử lý logic nghiệp vụ phía máy chủ (Server)
o Tích hợp UI với Server
o Thực hiện kiểm thử đơn vị và kiểm thử tích hợp liên tục
Giai đoạn 5: Kiểm thử và hoàn thiện (08/07/2024 - 11/07/2024)
Tuần 19 (08/07 - 11/07):
o Tiến hành kiểm thử toàn diện ứng dụng (kiểm thử chức năng, hiệu năng, bảo mật)
o Sửa lỗi và cải thiện hiệu suất ứng dụng
o Hoàn thiện tài liệu dự án và chuẩn bị cho buổi bảo vệ
Ngày 12 tháng 7 năm 2024
Người viết đề cương
Cao Huỳnh Bảo An Nguyễn Nhật Nam
Ý kiến của giảng viên hướng dẫn
(Ký và ghi rõ họ và tên)
Trang 11MỤC LỤC
LỜI CẢM ƠN 3
MỤC LỤC 8
DANH MỤC HÌNH ẢNH 10
DANH MỤC BẢNG 13
MỞ ĐẦU 15
1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI 15
2 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU 15
2.1 Đối tượng nghiên cứu 15
2.2 Phạm vi nghiên cứu 16
3 MỤC ĐÍCH CỦA ĐỀ TÀI 16
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 18
1.1 DART 18
1.1.1 Lịch sử ra đời 18
1.1.2 Cấu trúc 18
1.1.3 Các kiểu biến trong Dart 18
1.1.4 Các kiểu collection trong Dart 19
1.1.5 Kiểm soát luồng 21
1.1.6 Hàm 22
1.1.7 Null aware operation 23
1.1.8 Các Class 24
1.1.9 Hướng đối tượng 25
1.2 FLUTTER 29
1.2.1 Lịch sử ra đời 29
1.2.2 Tổng quan 30
1.2.3 BuildContext 31
1.2.4 StatelessWidget 32
1.2.5 Stateful Widget 33
1.2.6 Ưu điểm: 35
1.2.7 Nhược điểm: 35
1.2.8 Triển khai trong dự án 36
1.3 FIREBASE 36
1.3.1 Lịch sử ra đời 36
1.3.2 Tổng quan 36
Trang 121.3.3 Những service khả dụng của Firebase 36
1.3.4 So sánh với các hệ quản trị cơ sở dữ liệu khác 37
1.3.5 Ưu điểm 37
1.3.6 Nhược điểm: 38
1.3.7 Triển khai trong dự án 38
CHƯƠNG 2 KHẢO SÁT HIỆN TRẠNG VÀ XÁC ĐỊNH YÊU CẦU 40
2.1 THỰC TRẠNG VỀ TÌNH HÌNH THƯƠNG MẠI ĐIỆN TỬ HIỆN NAY 40
2.2 KHẢO SÁT CÁC ỨNG DỤNG LIÊN QUAN 41
2.3 XÁC ĐỊNH YÊU CẦU 49
2.3.1 Yêu cầu chức năng 49
2.3.2 Yêu cầu phi chức năng 52
2.4 CẤU TRÚC HỆ THỐNG 53
2.4.1 Mô Hình Client-Server 53
2.4.2 Mô hình MVC 53
2.4.3 Lý do chọn mô hình MVC: 54
2.4.4 Mô Tả Hệ Thống 54
CHƯƠNG 3 MÔ HÌNH HÓA YÊU CẦU 56
3.1 LƯỢC ĐỒ USE CASE 56
3.2 ĐẶC TẢ USE CASE, LƯỢC ĐỒ TUẦN TỰ 58
CHƯƠNG 4 THIẾT KẾ HỆ THỐNG 120
4.1 THIẾT KẾ CLASS DIAGRAM 120
4.2 THIẾT KẾ GIAO DIỆN 120
4.2.1 Ứng dụng khách hàng & cửa hàng và shipper 120
4.3.1 CMS Web 146
CHƯƠNG 5 CÀI ĐẶT, KIỂM THỬ VÀ TRIỂN KHAI HỆ THỐNG 154
5.1 CÀI ĐẶT 154
5.2 KIỂM THỬ 154
5.3 TRIỂN KHAI ỨNG DỤNG 160
5.3.1 Triển khai ở Client App 160
5.3.2 Triển khai ở phía Admin Web App 160
CHƯƠNG 6 TỔNG KẾT 163
6.1 KẾT QUẢ ĐẠT ĐƯỢC 163
6.2 ƯU ĐIỂM 164
6.3 NHƯỢC ĐIỂM 164
6.4 HƯỚNG PHÁT TRIỂN 164
TÀI LIỆU THAM KHẢO 165
Trang 13DANH MỤC HÌNH ẢNH
Hình 1 Widget Tree 31
Hình 2 Build Context Tree 32
Hình 3 Giao Diện StockX 41
Hình 4 Giao diện Ebay 42
Hình 5 Giao diện SNKRDUNK 43
Hình 6 Giao diện GOAT 44
Hình 7 Giao diện NovelShip 45
Hình 8 Giao diện NTWRK 46
Hình 9 Giao diện Adidas 47
Hình 10 Giao diện Nike 48
Hình 11 Mô hình MVC 53
Hình 12 Lược đồ Use Case Guest 56
Hình 13 Lược đồ Use Case Customer 56
Hình 14 Lược đồ Use Case Vendor 57
Hình 15 Lược đồ Use Case Shipper 57
Hình 16 Lược đồ Use Case Admin 58
Hình 17 Lược đồ tuần tự Đăng ký 60
Hình 18 Lược đồ tuần tự Đăng nhập 62
Hình 19 Lược đồ tuần tự Đăng xuất 63
Hình 20 Lược đồ tuần tự Quản lý thông tin cá nhân 64
Hình 21 Lược đồ tuần tự Load thông tin quản lý 65
Hình 22 Lược đồ tuần tự Truy cập vào Profile 65
Hình 23 Lược đồ tuần tự Chỉnh sửa thông tin cá nhân 66
Hình 24 Lược đồ tuần tự Thay đổi mật khẩu 67
Hình 25 Lược đồ tuần tự Xem danh sách sản phẩm yêu thích 68
Hình 26 Lược đồ tuần tự Xem chi tiết sản phẩm 69
Hình 27 Lược đồ tuần tự Thêm/Bỏ danh sách yêu thích 70
Hình 28 Lược đồ tuần tự Thêm sản phẩm vào giỏ hàng 71
Hình 29 Lược đồ tuần tự Xem danh mục sản phẩm 72
Hình 30 Lược đồ tuần tự Quản lý giỏ hàng 73
Hình 31 Lược đồ tuần tự Đặt hàng 75
Hình 32 Lược đồ tuần tự Tìm kiếm sản phẩm 76
Hình 33 Lược đồ tuần tự Xem danh sách đơn hàng 77
Hình 34 Lược đồ tuần tự Xóa sản phẩm khỏi giỏ hàng 78
Hình 35 Lược đồ tuần tự Đánh giá sản phẩm 79
Hình 36 Lược đồ tuần tự Yêu cầu hoàn tiền 81
Hình 37 Lược đồ tuần tự Đăng nhập 83
Hình 38 Lược đồ tuần tự Quản lý thông tin cá nhân 84
Hình 39 Lược đồ tuần tự Đăng xuất 85
Hình 40 Lược đồ tuần tự Tạo sản phẩm mới 87
Hình 41 Lược đồ tuần tự Load thông tin sản phẩm 89
Hình 42 Lược đồ tuần tự Cập nhật thông tin sản phẩm 89
Hình 43 Lược đồ tuần tự Xóa sản phẩm 91
Hình 44 Lược đồ tuần tự Phê duyệt hoàn tiền 92
Trang 14Hình 45 Lược đồ tuần tự Xem thống kê 93
Hình 46 Lược đồ tuần tự Quản lý trạng thái đơn hàng 95
Hình 47 Lược đồ tuần tự Đăng nhập 97
Hình 48 Lược đồ tuần tự Đăng xuất 98
Hình 49 Lược đồ tuần tự Thực hiện giao hàng 99
Hình 50 Lược đồ tuần tự Xem thống kê 101
Hình 51 Lược đồ tuần tự Quản lý thông tin cá nhân 102
Hình 52 Lược đồ tuần tự Đăng nhập 104
Hình 53 Lược đồ tuần tự Đăng xuất 105
Hình 54 Lược đồ tuần tự Quản lý sản phẩm 107
Hình 55 Lược đồ Load thông tin 108
Hình 56 Lược đồ tuần tự Duyệt thông tin 108
Hình 57 Lược đồ tuần tự Xóa thông tin 109
Hình 58 Lược đồ tuần tự Quản lý người bán 110
Hình 59 Lược đồ tuần tự Quản lý danh mục sản phẩm 112
Hình 60 Lược đồ tuần tự Quản lý rút tiền 114
Hình 61 Lược đồ tuần tự Quản lý người tiêu dùng 115
Hình 62 Lược đồ tuần tự Quản lý trạng thái đơn hàng 116
Hình 63 Lược đồ tuần tự Quản lý hoàn tiền 118
Hình 64 Lược đồ tuần tự Quản lý Shipper 119
Hình 65 Lược đồ Class 120
Hình 66 Giao diện phân luồng 121
Hình 67 Giao diện Trang đăng nhập 122
Hình 68 Giao diện Trang đăng ký 123
Hình 69 Giao diện Trang Home 124
Hình 70 Giao diện Trang Tìm kiếm 125
Hình 71 Giao diện trang Sản phẩm 126
Hình 72 Giao diện Trang giỏ hàng 127
Hình 73 Giao diện Trang đơn hàng 128
Hình 74 Giao diện Trang Thông tin cá nhân 129
Hình 75 Giao diện Trang Chỉnh sửa thông tin 130
Hình 76 Giao diện Trang Đơn hàng 131
Hình 77 Giao diện Trang WishList 132
Hình 78 Giao diện Trang MyChat 133
Hình 79 Giao diện Chat 134
Hình 80 Giao diện thông tin cửa hàng 135
Hình 81 Giao diện Trang Sản phẩm 136
Hình 82 Giao diện Trang đơn hàng 137
Hình 83 Giao diện Trang Tạo sản phẩm mới - Tổng quan 138
Hình 84 Giao diện Trang Tạo sản phẩm mới - Giao hàng 139
Hình 85 Giao diện Trang Tạo sản phẩm mới - Thuộc tính sản phẩm 140
Hình 86 Giao diện Trang Tạo sản phẩm mới - Hình ảnh 141
Hình 87 Giao diện Trang thống kê 142
Hình 88 Giao diện Trang Shipper Home 143
Hình 89 Giao diện Trang đơn hàng sẵn sàng để giao 144
Hình 90 Giao diện Trang đơn hàng đã giao 145
Hình 91 Giao diện Trang Thông tin Shipper 146
Hình 92 Giao diện Trang Đăng nhập 147
Trang 15Hình 93 Giao diện trang Quản lý sản phẩm 148
Hình 94 Giao diện Trang quản lý đơn hàng 148
Hình 95 Giao diện Trang Quản lý cửa hàng 149
Hình 96 Giao diện Trang quản lý Banner 149
Hình 97 Giao diện Trang quản lý danh mục 150
Hình 98 Giao diện Trang Quản lý rút tiền 150
Hình 99 Giao diện Trang Quản lý người dùng 151
Hình 100 Giao diện Trang quản lý Shipper 151
Hình 101 Giao diện Trang Xem chi tiết sản phẩm 152
Hình 102 Giao diện Trang Refund 152
Hình 103 Giao diện Trang chi tiết Refund 153
Hình 104 Hình minh họa chức năng đăng nhập 156
Hình 105 Hình minh họa chức năng Tạo sản phẩm 159
Hình 106 Hình minh họa chức năng Xóa sản phẩm 160
Hình 107 Cấu hình Web App Trên Firebase 161
Hình 108 Deploy thành công 162
Trang 16DANH MỤC BẢNG
Bảng 1 Bảng so sánh Firebase và MySQL 37
Bảng 2 Bảng so sánh Firebase và MongoDB 37
Bảng 3 Bảng miêu tả tình trạng thương mại điện tử trong 3 năm 41
Bảng 4 Bảng Yêu cầu chức năng User 50
Bảng 5 Bảng Yêu cầu chức năng Vendor 50
Bảng 6 Bảng Yêu cầu chức năng Vendor 51
Bảng 7 Bảng yêu cầu chức năng Admin 52
Bảng 8 Bảng Yêu cầu phi chức năng 53
Bảng 9 Bảng tổng hợp Use Case Guest 58
Bảng 10 Đặc tả Use Case Đăng nhập 59
Bảng 11 Bảng tổng hợp Use Case Customer 61
Bảng 12 Đặc tả Use Case Đăng nhập 62
Bảng 13 Đặc tả Use Case Đăng xuất 63
Bảng 14 Đặc tả Use Case Quản lý thông tin cá nhân 64
Bảng 15 Đặc tả Use Case Thay đổi mật khẩu 67
Bảng 16 Đặc tả Use Case Xem danh sách sản phẩm yêu thích 68
Bảng 17 Đặc tả Use Case Xem chi tiết sản phẩm 69
Bảng 18 Đặc tả Use Case Thêm sản phẩm vào danh sách yêu thích 69
Bảng 19 Đặc tả Use Case Thêm sản phẩm vào giỏ hàng 71
Bảng 20 Đặc tả Use Case Xem danh mục sản phẩm 71
Bảng 21 Đặc tả Use Case Quản lý giỏ hàng 72
Bảng 22 Đặc tả Use Case Đặt hàng 74
Bảng 23 Đặc tả Use Case Tìm kiếm sản phẩm 76
Bảng 24 Đặc tả Use Case Xem danh sách đơn hàng 77
Bảng 25 Đặc tả Use Case Xóa sản phẩm khỏi giỏ hàng 78
Bảng 26 Đặc tả Use Case Đánh giá sản phẩm 79
Bảng 27 Đặc tả Use Case Yêu cầu hoàn tiền 80
Bảng 28 Bảng tổng hợp Use Case Vendor 81
Bảng 29 Đặc tả Use Case Đăng nhập 82
Bảng 30 Đặc tả Use Case Quản lý thông tin cá nhân 84
Bảng 31 Đặc tả Use Case Đăng xuất 85
Bảng 32 Đặc tả Use Case Tạo sản phẩm mới 86
Bảng 33 Đặc tả Use Case Cập nhật thông tin sản phẩm 88
Bảng 34 Đặc tả Use Case Xóa sản phẩm 90
Bảng 35 Đặc tả Use Case Phê duyệt hoàn tiền 92
Bảng 36 Đặc tả Use Case Xem thống kê 93
Bảng 37 Đặc tả Use Case Quản lý trạng thái đơn hàng 94
Bảng 38 Bảng tổng hợp Use Case Shipper 95
Bảng 39 Đặc tả Use Case Đăng nhập 96
Bảng 40 Đặc tả Use Case Đăng xuất 98
Bảng 41 Đặc tả Use Case Thực hiện giao hàng 99
Bảng 42 Đặc tả Use Case Xem thống kê 100
Bảng 43 Đặc tả Use Case Quản lý thông tin cá nhân 102
Bảng 45 Đặc tả Use Case Đăng nhập 103
Bảng 46 Đặc tả Use Case Đăng xuất 105
Bảng 47 Đặc tả Use Case Quản lý sản phẩm 106
Bảng 48 Đặc tả Use Case Quản lý người bán 110
Trang 17Bảng 49 Đặc tả Use Case Quản lý danh mục sản phẩm 111
Bảng 50 Đặc tả Use Case Quản lý việc rút tiền 113
Bảng 51 Đặc tả Use Case Quản lý người tiêu dùng 115
Bảng 52 Đặc tả Use Case Quản lý trạng thái đơn hàng 116
Bảng 53 Đặc tả Use Case Quản lý hoàn tiền 117
Bảng 54 Đặc tả Use Case Quản lý Shipper 119
Bảng 55 Mô tả Giao diện Phân luồng 121
Bảng 56 Mô tả Giao diện Đăng nhập 122
Bảng 57 Mô tả Giao diện Đăng ký 124
Bảng 58 Mô tả Giao diện Home 124
Bảng 59 Mô tả Giao diện Tìm kiếm 125
Bảng 60 Mô tả Giao diện Sản phẩm 126
Bảng 61 Mô tả Giao diện Giỏ hàng 127
Bảng 62 Mô tả Giao diện Đơn hàng 128
Bảng 63 Mô tả Giao diện Thông tin cá nhân 129
Bảng 64 Mô tả Giao diện Chỉnh sửa thông tin 130
Bảng 65 Mô tả Giao diện Đơn hàng 131
Bảng 66 Mô tả Giao diện WishList 132
Bảng 67 Mô tả Giao diện MyChat 133
Bảng 68 Mô tả Giao diện Chat 135
Bảng 69 Mô tả Giao diện Thông tin cửa hàng 136
Bảng 70 Mô tả giao diện Sản phẩm 136
Bảng 71 Mô tả Giao diện đơn hàng 137
Bảng 72 Mô tả Giao diện Trang Tạo sản phẩm mới – Tổng quan 138
Bảng 73 Mô tả Giao diện Trang Tạo sản phẩm mới – Giao hàng 139
Bảng 74 Mô tả Giao diện Trang Tạo sản phẩm mới – Thuộc tính sản phẩm 140
Bảng 75 Mô tả Giao diện Trang Tạo sản phẩm mới – Hình ảnh 141
Bảng 76 Mô tả Giao diện Trang Thống kê 142
Bảng 77 Mô tả Giao diện Trang Shipper Home 144
Bảng 78 Mô tả Giao diện Trang đơn hàng sẵn sàng để giao 144
Bảng 79 Mô tả Giao diện Trang đơn hàng đã giao 145
Bảng 80 Mô tả Giao diện Trang Thông tin Shipper 146
Bảng 81 Mô tả Giao diện Trang Đăng nhập Admin 147
Bảng 82 Mô tả Giao diện Trang Quản lý sản phẩm 148
Bảng 83 Mô tả Giao diện Trang quản lý đơn hàng 148
Bảng 84 Mô tả Giao diện Trang quản lý cửa hàng 149
Bảng 85 Mô tả Giao diện Trang quản lý Banner 149
Bảng 86 Mô tả Giao diện Trang quản lý danh mục 150
Bảng 87 Mô tả Giao diện Trang quản lý rút tiền 150
Bảng 88 Mô tả Giao diện Trang quản lý người dùng 151
Bảng 89 Mô tả Giao diện Trang quản lý Shipper 151
Bảng 90 Mô tả Giao diện Trang Xem chi tiết sản phẩm 152
Bảng 91 Mô tả Giao diện Trang Refund 152
Bảng 92 Mô tả Giao diện Trang chi tiết Refund 153
Bảng 93 Kịch bản kiểm thử 155
Bảng 94 Kết quả kiểm thử chức năng đăng nhập 155
Bảng 95 Kết quả kiểm thử chức năng Tạo sản phẩm 159
Bảng 96 Kết quả kiểm thử chức năng xóa sản phẩm 160
Trang 18MỞ ĐẦU
1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI
Thương mại điện tử (TMĐT) đã trở thành một xu hướng tất yếu trong thời đại công nghệ 4.0, mang đến những thay đổi sâu sắc trong hành vi mua sắm của người tiêu dùng trên toàn cầu Với những ưu điểm vượt trội như tiết kiệm chi phí, nâng cao hiệu quả và tính tiện lợi, TMĐT đang ngày càng khẳng định vị thế của mình trong nền kinh
tế hiện đại
Trong bối cảnh đó, thị trường giày dép, đặc biệt là phân khúc giày sneaker, nổi lên như một lĩnh vực đầy tiềm năng Giày sneaker không chỉ đơn thuần là một sản phẩm thời trang, mà còn là biểu tượng của văn hóa và phong cách sống, thu hút sự quan tâm đặc biệt từ giới trẻ Tuy nhiên, thị trường sneaker truyền thống đang phải đối mặt với nhiều thách thức, bao gồm sự hạn chế trong việc tiếp cận sản phẩm đa dạng, thiếu minh bạch về giá cả và nguy cơ mua phải hàng giả, hàng nhái
Nhận thức được những tiềm năng và thách thức của thị trường, nhóm nghiên cứu
đã phát triển ứng dụng thương mại điện tử SneakerX, một nền tảng chuyên biệt dành cho việc trao đổi và mua bán giày dép SneakerX được kỳ vọng sẽ cung cấp một môi trường mua sắm trực tuyến đáng tin cậy, nơi người dùng có thể dễ dàng tìm kiếm, so sánh và mua bán các sản phẩm sneaker chính hãng từ nhiều thương hiệu khác nhau Đồng thời, ứng dụng cũng sẽ trang bị cho người bán những công cụ quản lý hiệu quả,
hỗ trợ họ trong việc tiếp cận khách hàng mục tiêu và tối ưu hóa hoạt động kinh doanh Bên cạnh đó, SneakerX cũng sẽ tạo ra một không gian hoạt động thuận tiện và hiệu quả cho các đối tác vận chuyển, giúp họ dễ dàng kết nối với người mua và người bán, quản
lý đơn hàng và tối ưu hóa quy trình giao nhận
Việc nghiên cứu và phát triển ứng dụng SneakerX không chỉ mang ý nghĩa thực tiễn trong việc giải quyết những vấn đề tồn tại của thị trường sneaker, mà còn đóng góp vào sự phát triển chung của lĩnh vực TMĐT tại Việt Nam
2 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU
2.1 Đối tượng nghiên cứu
Trong đồ án này, nhóm sẽ tập trung nghiên cứu hai đối tượng chính là người dùng ứng dụng và các công nghệ để phát triển ứng dụng mobile
Người dùng ứng dụng:
Trang 19 Khách hàng (Client): Những người có nhu cầu mua giày dép, đặc biệt là giày thể thao (sneaker) Đối tượng này quan tâm đến việc tìm kiếm sản phẩm, so sánh giá, xem đánh giá, đặt hàng và theo dõi đơn hàng
Người bán (Vendor): Các cửa hàng, thương hiệu hoặc cá nhân bán giày dép trên ứng dụng Đối tượng này cần các công cụ để quản lý sản phẩm, giá cả, khuyến mãi, đơn hàng và tương tác với khách hàng
Người giao hàng (Shipper): Đối tác vận chuyển chịu trách nhiệm giao hàng từ người bán đến khách hàng Đối tượng này cần thông tin về đơn hàng, địa chỉ giao hàng và các công cụ để cập nhật trạng thái giao hàng
Quản trị viên (Admin): Người quản lý hệ thống, chịu trách nhiệm giám sát hoạt động của ứng dụng, quản lý người dùng, sản phẩm, nội dung và giải quyết các vấn đề phát sinh
Công nghệ phát triển ứng dụng di động:
Flutter: Framework chính để xây dựng giao diện người dùng (UI) và logic nghiệp
vụ của ứng dụng trên cả hai nền tảng iOS và Android
Dart: Ngôn ngữ lập trình được sử dụng để phát triển ứng dụng Flutter
Firebase: Nền tảng BaaS cung cấp các dịch vụ backend như database (Firestore), authentication, storage (Cloud Storage), và cloud functions
2.2 Phạm vi nghiên cứu
Phạm vi nghiên cứu của dự án này tập trung vào việc phát triển một ứng dụng thương mại điện tử chuyên biệt cho thị trường giày dép, đặc biệt là giày thể thao (sneaker) Ứng dụng sẽ cung cấp các tính năng mua bán, trao đổi và quản lý sản phẩm giày dép, đáp ứng nhu cầu của cả người mua, người bán và quản trị viên hệ thống
3 MỤC ĐÍCH CỦA ĐỀ TÀI
Mục đích của đề tài này là xây dựng một ứng dụng thương mại điện tử chuyên biệt cho thị trường giày dép, đặc biệt là giày thể thao (sneaker), nhằm tạo ra một cầu nối vững chắc giữa người mua và người bán, giúp việc mua bán trở nên dễ dàng, thuận tiện
và minh bạch hơn Ứng dụng sẽ cung cấp một không gian mua sắm trực tuyến thân thiện, mang đến trải nghiệm mua sắm thoải mái, dễ dàng và an toàn cho người dùng, đồng thời cung cấp cho người bán một nền tảng hoạt động ổn định và các công cụ quản lý cần thiết
để bắt đầu và phát triển việc kinh doanh một cách hiệu quả
Dựa trên những kiến thức chuyên môn đã được tích lũy, dự án sẽ tập trung vào việc phân tích, thiết kế và xây dựng ứng dụng di động (mobile app) và ứng dụng web (web-app) với đầy đủ các chức năng cần thiết, đáp ứng toàn diện nhu cầu của cả người mua (client),người bán (vendor), người vận chuyển (shipper) và cả quản lý của hệ thống (admin)
Trang 20Ứng dụng sẽ được thiết kế với giao diện thân thiện, dễ sử dụng, đảm bảo tính thẩm mỹ và tối ưu trải nghiệm người dùng Đồng thời, dự án cũng đặc biệt chú trọng đến việc xây dựng một hệ thống hoạt động ổn định, đảm bảo hiệu suất cao và khả năng
mở rộng trong tương lai
Trang 21CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1 DART
1.1.1 Lịch sử ra đời
Dart được Google phát triển lần đầu tiên vào năm 2011, với mục đích tạo ra một ngôn ngữ lập trình mới cho thế hệ ứng dụng web và di động tiếp theo Dart được công bố lần đầu tiên tại hội nghị Google I/O năm 2011 và phiên bản beta đầu tiên được phát hành vào năm 2013 Phiên bản chính thức của Dart được phát hành vào năm 2015
1.1.2 Cấu trúc
Một dự án Flutter có cấu trúc cơ bản như sau:
● Thư mục bin: Chứa các file public tools để chạy Dart scripts
● Thư mục lib: Chứa các file public libraries để import vào trong các file ở thư mục bin
● Tệp pubspec.yaml:` Chứa thông tin về các dependency, phiên bản của Dart và các cấu hình khác của dự án Tệp này tương tự như gradle trong Android và được viết bằng ngôn ngữ YAML (Yet Another Markup Language hoặc YAML Ain't Markup Language)
1.1.3 Các kiểu biến trong Dart
Dart có các kiểu biến sau:
● String: Dùng để thao tác với chuỗi và ký tự
// Khai báo biến String chứa ký tự đặc biệt
String specialChar = '!@#$%^&*()';
● num: Dùng để thao tác với số
// Khai báo biến num chứa số nguyên âm
num negativeNumber = -100;
● int: Dùng để thao tác với số nguyên
// Khai báo biến int chứa số nguyên lớn
int largeNumber = 1000000;
● double: Dùng để thao tác với số thập phân
// Khai báo biến double chứa số thập phân nhỏ
Trang 22double smallDecimalNumber = 0.1;
● bool: Dùng để khai báo biến boolean
// Khai báo biến bool chứa giá trị true
bool isTrue = true;
● const: Dùng để khai báo biến hằng, không thể thay đổi giá trị sau khi khai báo
// Khai báo biến hằng chứa chuỗi
const String constantString = 'Hello, world!';
● dynamic: Có thể dùng để khai báo cả chuỗi, số và cả boolean
// Khai báo biến dynamic chứa chuỗi
dynamic string = 'Hello, world!';
● var: Dùng để khai báo biến khi chưa biết là chuỗi hay số, không thể dùng để
khai báo kiểu trả về của hàm
// Khai báo biến var chứa số nguyên
var number = 100;
● Runes: Dùng để sử dụng các emoji
// Khai báo biến Runes chứa emoji
Runes emoji = Runes('\u{1f44f}');
1.1.4 Các kiểu collection trong Dart
Dart cung cấp một số kiểu collection để lưu trữ và thao tác với dữ liệu Các kiểu
collection này bao gồm:
● Enumerated types: còn được gọi là enum, là một kiểu class đặc biệt sử dụng
để biểu diễn một tập hợp giá trị không đổi Ví dụ:
//Enum color chứa 4 giá trị không đổi
Trang 23}
● List: List là một collection thông dụng, dùng để tập hợp các phần tử vào một
mảng List trong Dart chỉ có một loại là object list List có thể chứa các phần tử
có cùng kiểu dữ liệu hoặc các phần tử có kiểu dữ liệu khác nhau Ví dụ:
//List chứa phần tử số nguyên
List<num> numbers = [0, 1, 2 3, 4 5];
//List dynamic chứa 3 phần tử thuộc số nguyên, chuỗi, boolean
List mixin = [69, 'maxin', true];
● Map: Một collection chứa cặp key-value Dart hỗ trợ map literals và kiểu dữ
liệu Map
//Map roles chứa ba cặp key-value là 'H': 'dev', 'U': 'tester', và 'Y': 'designer'
Map roles = {'H': 'dev', 'U': 'tester', 'Y': 'designer'};
● Set: Một tập hợp các giá trị không theo thứ tự và không lặp lại giá trị đã có
//Set numbers chứa bốn phần tử là 2, 3, 7
Set<int> numbers = new Set<int>();
numbers.add(3);
numbers.add(2);
numbers.add(2);
numbers.add(7);
● Queue: Queue là một collection có thể thao tác cả hai đầu vào của mình Một
đầu để đưa dữ liệu và một đầu xóa dữ liệu Hữu dụng khi xây dựng collection
theo kiểu first in, first out
//Queue numbers chứa ba phần tử là 1, 2, 3 Khi xóa phần tử đầu tiên của
Trang 24print(numbers.removeFirst()); // 1
print(numbers.first); // 2
1.1.5 Kiểm soát luồng
Dart cung cấp một số câu lệnh để kiểm soát luồng thực thi của chương trình Các câu lệnh này bao gồm:
● assert(): Ngắt thực thi thông thường khi điều kiện trả về sai
Trang 25}
○ do while: Lặp lại một khối mã cho đến khi điều kiện trả về sai, nhưng ít nhất sẽ chạy một lần
do { // do something
Khai báo hàm [kiểu trả về] [tên hàm]([danh sách tham số]) { // Thân hàm
}
● Nếu không khai báo kiểu dữ liệu thì sẽ mặc định là void hoặc tùy vào kết quả trả về của hàm
isYourName(String name) { return name == 'cao an';
}
● Để rút gọn thì ta nên dùng cú pháp => đối với hàm không có block code isYourName(String name) => name == 'cao an';
● Optional named parameter function: khi gọi hàm bạn có thể chỉ định tên tham
số đã khai báo trong hàm và gọi tham số tùy ý không cần quan tâm đến thứ tự của nó
Trang 26void declareYourCharacter(bool isHumorous, {bool isQuiet, bool isKind = false}) {
// do something
}
declareYourCharacter(true, isKind: true, isQuiet: true);
● Optional unnamed parameter function: có thể tạo ra 1 tham số tùy chọn khi
khởi tạo hàm, lúc gọi làm bạn có thể truyền hoặc không truyền đối số vào cho nó
và phải gọi đúng thứ tự như lúc khởi tạo
void declareYourCharacter(bool isHumorous, [bool isQuiet, bool isKind = false]) {
// do something
}
declareYourCharacter(true, true, true);
● Anonymous function: hầu hết mọi hàm đều có 1 cái tên để thể hiện hàm đó làm
gì nhưng chúng ta vẫn có thể khởi tạo 1 hàm không tên và gọi nó là anonymous function hoặc có thể là lambda hoặc là closure Anonymous function được khởi tạo lúc chạy runtime, nó có thể gán cho 1 biến, gọi 1 hàm khác
var alphabets = ['alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta'];
1.1.7 Null aware operation
Toán tử ?: (Ternary Operator):
Toán tử ?: còn được gọi là toán tử ba ngôi, là một toán tử ngắn gọn thay thế cho câu lệnh if-else Ví dụ:
int height = 170;
Trang 27String heightDescription = height < 175 ? 'Short' : 'Tall';
// heightDescription = 'Short'
Toán tử ??:
Toán tử ?? là toán tử kiểm tra null Nếu biến trả về bằng null thì nó sẽ gán biến đó cho một giá trị mặc định Ví dụ:
String name = user.name() ?? 'cao an';
// Nếu user.name() trả về null thì name = 'cao an'
String character = alphabet?.character;
// Tốt hơn thì nên gán giá trị mặc định nếu giá trị trả về là null
String character = alphabet?.character ?? 'alpha';
1.1.8 Các Class
Dart là một ngôn ngữ hướng đối tượng với các lớp và thừa kế dựa trên mixin (mixin-based inheritance) Mỗi đối tượng đều là thể hiện của một lớp và tất cả các lớp đều xuất phát từ lớp Object Thừa kế dựa trên mixin có nghĩa là mỗi lớp đều có một superclass (trừ lớp Object), phần bên trong của mỗi lớp đều có thể được tái sử dụng trong nhiều lớp được phân cấp
Tạo một Class
Để tạo một lớp trong Dart, chúng ta sử dụng từ khóa class Ví dụ:
Trang 28Trong Dart, tính bao đóng được thể hiện bằng cách khai báo các thuộc tính và phương thức bằng từ khóa _ Ví dụ:
class Vehicle {
Trang 29int wheel;
void countNumberOfWheels(int wheel) {
print('This vehicle has $wheel wheels');
}
}
class Bike extends Vehicle {
// Không khai báo thuộc tính và phương thức nào mới
}
Polymorphism
Tính đa hình là một trong bốn nguyên tắc cơ bản của lập trình hướng đối tượng Tính
đa hình là khả năng các đối tượng khác nhau có thể cùng thực hiện một hành động Trong Dart, tính đa hình được thể hiện bằng cách sử dụng các phương thức trừu tượng
và phương thức được định nghĩa lại
Phương thức trừu tượng
Một phương thức trừu tượng là một phương thức không có triển khai cụ thể Phương thức trừu tượng chỉ được khai báo trong lớp cha
Ví dụ:
abstract class Vehicle {
void move();
}
Phương thức được định nghĩa lại
Một phương thức được định nghĩa lại là một phương thức có cùng tên và tham số với một phương thức trong lớp cha Phương thức được định nghĩa lại có thể có triển khai khác với phương thức trong lớp cha
Trang 30void move(int speed) {
print('The vehicle is moving at speed $speed');
}
void move() {
// Phương thức này sẽ được gọi khi tham số speed không được truyền vào
print('The vehicle is moving');
}
}
Tính trừu tượng
Trang 31Tính trừu tượng là một trong bốn nguyên tắc cơ bản của lập trình hướng đối tượng Tính trừu tượng là việc tập trung vào các tính chất cốt lõi nhất của một đối tượng, loại bỏ các chi tiết không cần thiết
Trong Dart, tính trừu tượng được thể hiện bằng cách sử dụng các lớp trừu tượng
Lớp con của lớp trừu tượng
Các lớp con của lớp trừu tượng phải định nghĩa lại tất cả các phương thức trừu tượng của lớp cha
abstract class Vehicle {
Trang 32 Hiệu suất cao: Dart có khả năng biên dịch thành mã máy, giúp ứng dụng
chạy nhanh và mượt mà hơn so với các ngôn ngữ thông dịch khác
Phát triển ứng dụng đa nền tảng: Dart là ngôn ngữ chính của Flutter, cho
phép xây dựng ứng dụng di động cho cả iOS và Android từ một codebase duy nhất, tiết kiệm thời gian và công sức phát triển
Cú pháp dễ học: Cú pháp của Dart tương đồng với các ngôn ngữ phổ biến
như Java, C#, JavaScript, giúp các lập trình viên dễ dàng tiếp cận và làm
quen
Hot Reload: Tính năng Hot Reload cho phép xem ngay lập tức các thay đổi
trong ứng dụng mà không cần khởi động lại, tăng tốc quá trình phát triển
Null Safety: Dart hỗ trợ Null Safety, giúp giảm thiểu lỗi liên quan đến giá trị
null, tăng tính ổn định của ứng dụng
Thư viện phong phú: Dart có một hệ sinh thái thư viện và công cụ đa dạng,
hỗ trợ nhiều tính năng và chức năng khác nhau
1.1.11 Nhược điểm
Quản lý bộ nhớ: Dart sử dụng bộ dọn rác (garbage collector) tự động, có thể
gây ra hiện tượng "lag" trong quá trình dọn dẹp bộ nhớ, đặc biệt là trong các ứng dụng yêu cầu hiệu năng cao
Kích thước ứng dụng: Các ứng dụng được xây dựng bằng Flutter (sử dụng
Dart) có thể có kích thước lớn hơn so với các ứng dụng native, do phải tích hợp thêm runtime của Flutter
Thời gian khởi động: Ứng dụng Dart có thể mất thời gian khởi động lâu hơn
một chút so với ứng dụng native, do phải khởi động runtime của Dart và
Flutter
Khả năng tương tác với mã native: Việc tương tác giữa Dart và mã native
(ví dụ: Objective-C, Swift, Java, Kotlin) có thể phức tạp hơn so với các ngôn ngữ khác, đòi hỏi phải sử dụng các cầu nối (bridge) đặc biệt
1.2 FLUTTER
1.2.1 Lịch sử ra đời
Flutter được Google phát triển lần đầu tiên vào năm 2015, với mục đích tạo ra một framework mã nguồn mở có thể được sử dụng để xây dựng các ứng dụng đa nền
Trang 33tảng( web, mobile, desktop và IoT) với hiệu suất và chất lượng cao Flutter được công
bố lần đầu tiên tại hội nghị Google I/O năm 2017 và phiên bản beta đầu tiên được phát hành vào năm 2018 Phiên bản chính thức của Flutter được phát hành vào năm 2019
1.2.2 Tổng quan
Widget và Widget Tree:
Trong Flutter, mọi thứ đều là Widget Widget là những thành phần cơ bản tạo nên giao diện của ứng dụng Flutter Widget có thể là một phần tử giao diện, chẳng hạn như một button, một textbox, hoặc một biểu tượng Widget cũng có thể là một bố cục, chẳng hạn như một cột, một hàng, hoặc một lưới
Widget được tổ chức thành dạng cây, với mỗi Widget có thể có một hoặc nhiều Widget con Widget cha (parent Widget) là Widget chứa các Widget con Ví dụ:
Trang 34Hình 1 Widget Tree
1.2.3 BuildContext
BuildContext là một đối tượng đại diện cho vị trí của một widget trong widget tree Mỗi widget đều có một BuildContext riêng Nếu một widget có các widget con, thì BuildContext của widget đó cũng sẽ là parent BuildContext của các widget con Điều này tạo ra một cây BuildContext
Trang 35Hình 2 Build Context Tree
1.2.4 StatelessWidget
StatelessWidget là một loại widget không có trạng thái Trạng thái là những dữ liệu có thể thay đổi theo thời gian, chẳng hạn như giá trị của một biến hoặc kết quả của một cuộc gọi API StatelessWidget chỉ được tạo ra một lần và không bao giờ thay đổi trạng thái
Cấu trúc
Cấu trúc của một StatelessWidget như sau:
class MyWidget extends StatelessWidget {
MyWidget({Key key, this.param}) : super(key: key);
final String param;
Trang 36);
}
}
Lifecycle
Lifecycle của StatelessWidget gồm hai giai đoạn:
Khởi tạo: StatelessWidget được tạo ra và khởi tạo các tham số của nó
Render: StatelessWidget được vẽ trên màn hình bằng phương thức
build()
1.2.5 Stateful Widget
StatefulWidget là một loại widget có trạng thái Trạng thái là những dữ liệu có thể thay đổi theo thời gian, chẳng hạn như giá trị của một biến hoặc kết quả của một cuộc gọi API StatefulWidget có thể thay đổi trạng thái của nó, và những thay đổi này
sẽ được phản ánh trên màn hình
Cấu trúc
Cấu trúc của một StatefulWidget như sau:
class MyWidget extends StatefulWidget {
Trang 37Lifecycle của StatefulWidget gồm các giai đoạn sau:
createState(): Phương thức này được gọi khi StatefulWidget được tạo ra Nó sẽ trả
về một đối tượng State cho widget
initState(): Phương thức này được gọi một lần duy nhất, khi StatefulWidget được tạo ra lần đầu tiên Nó được sử dụng để khởi tạo trạng thái của widget
didChangeDependencies(): Phương thức này được gọi khi các dependencies của widget thay đổi Dependencies là những dữ liệu mà widget phụ thuộc vào, chẳng hạn như giá trị của một biến hoặc kết quả của một cuộc gọi API
build(): Phương thức này được gọi mỗi khi trạng thái của widget thay đổi Nó được
sử dụng để vẽ lại widget trên màn hình
didUpdateWidget(): Phương thức này được gọi khi StatefulWidget được cập nhật
Nó được sử dụng để cập nhật trạng thái của widget
setState(): Phương thức này được sử dụng để thay đổi trạng thái của widget
deactivate(): Phương thức này được gọi khi StatefulWidget không còn được sử dụng
dispose(): Phương thức này được gọi khi StatefulWidget bị hủy Nó được sử dụng
để giải phóng tài nguyên của widget
Trang 381.2.6 Ưu điểm:
Hiệu suất cao: Flutter sử dụng engine render Skia để vẽ giao diện người dùng
trực tiếp lên canvas của hệ điều hành, giúp ứng dụng chạy mượt mà và có tốc
độ khung hình cao (60fps)
Phát triển ứng dụng đa nền tảng: Flutter cho phép xây dựng ứng dụng cho cả
iOS và Android từ một codebase duy nhất, giúp tiết kiệm thời gian và công sức phát triển
Hot Reload: Tính năng Hot Reload cho phép xem ngay lập tức các thay đổi
trong ứng dụng mà không cần khởi động lại, tăng tốc quá trình phát triển
Widget phong phú: Flutter cung cấp một bộ sưu tập lớn các widget có sẵn,
giúp dễ dàng xây dựng giao diện người dùng đẹp và tùy biến cao
Cộng đồng phát triển mạnh mẽ: Flutter có một cộng đồng phát triển đông đảo
và tích cực, cung cấp nhiều tài liệu, hướng dẫn và hỗ trợ
Hỗ trợ từ Google: Flutter được phát triển và hỗ trợ bởi Google, đảm bảo sự
phát triển và cập nhật liên tục
1.2.7 Nhược điểm:
Ngôn ngữ Dart: Flutter sử dụng ngôn ngữ Dart, một ngôn ngữ tương đối mới
và chưa phổ biến bằng các ngôn ngữ khác như JavaScript hay Java Điều này có thể gây khó khăn trong việc tìm kiếm tài liệu, thư viện hỗ trợ và các nhà phát triển có kinh nghiệm
Cú pháp đặc biệt: Dart có cú pháp và cách tiếp cận riêng, đặc biệt là trong việc
xây dựng giao diện người dùng Điều này có thể đòi hỏi thời gian để làm quen
và thích nghi, đặc biệt là đối với những người đã quen với các framework khác
Quản lý trạng thái phức tạp: Quản lý trạng thái trong Flutter có thể trở nên
phức tạp khi ứng dụng mở rộng, đặc biệt khi sử dụng các widget phức tạp và có nhiều tương tác
Hỗ trợ IDE hạn chế: Mặc dù các công cụ phát triển như Android Studio và
Visual Studio Code có hỗ trợ Flutter, nhưng các tính năng hỗ trợ và gỡ lỗi vẫn chưa hoàn thiện bằng so với các công cụ dành cho các ngôn ngữ và framework khác
Trang 39 Khó khăn trong việc debug: Việc debug ứng dụng Flutter đôi khi có thể gặp
khó khăn do sự kết hợp giữa mã Dart và engine Flutter
1.2.8 Triển khai trong dự án
Sử dụng Flutter như một framework để xây dựng giao diện người dùng đẹp và tùy biến cao, hiệu suất ổn định và có thể phát triển ở cả nền tảng App Mobile và Web
Sử dụng Provider như một giải pháp quản lý trạng thái (state management) rất phổ biến và hiệu quả trong Flutter Giúp dễ dàng chia sẻ và cập nhật dữ liệu giữa các widget trong ứng dụng
1.3 FIREBASE
1.3.1 Lịch sử ra đời
Firebase được thành lập bởi James Tamplin, Andrew Lee và Taylor Brown vào tháng 9 năm 2011 Tamplin và Lee là những cựu nhân viên của Google, và Brown là một nhà phát triển ứng dụng di động Firebase ra mắt công chúng lần đầu tiên vào tháng
4 năm 2012 Sản phẩm đầu tiên của Firebase là Cơ sở dữ liệu thời gian thực (Firebase realtime database), một API đồng bộ hóa dữ liệu ứng dụng trên các thiết bị iOS, Android Firebase nhanh chóng trở nên phổ biến trong cộng đồng phát triển ứng dụng di động Vào năm 2014, Google đã mua lại Firebase với giá 250 triệu đô la
1.3.2 Tổng quan
Firebase được coi là nền tảng phát triển ứng dụng web Nó giúp các nhà phát triển xây dựng các ứng dụng chất lượng cao Nó lưu trữ dữ liệu ở định dạng JavaScript Object Notation (JSON), không sử dụng truy vấn để chèn, cập nhật, xóa hoặc thêm dữ liệu vào
đó Firebase là phần backend của một hệ thống được sử dụng như một cơ sở dữ liệu để lưu trữ dữ liệu
1.3.3 Những service khả dụng của Firebase
Firebase Test Lab for Android
Firebase Crash Reporting
Trang 40 Firebase Notifications
1.3.4 So sánh với các hệ quản trị cơ sở dữ liệu khác
Loại dữ liệu NoSQL (JSON) SQL (Schema Relations)
Dạng Schema
Dynamic Schema, dữ liệu có thể được thêm, xóa hoặc sửa bất
kỳ thời điểm nào
Fixed schema, nếu có sự thay đổi phải ngừng hệ thống
Cấu trúc dữ liệu Dữ liệu không cần được định
nghĩa hay có cấu trúc xác định
Dữ liệu cần phải được định nghĩa trước
Vị trí lưu trữ Cloud-based Local Server
Khả năng mở
rộng (scalability)
Được thiết kế để dễ dàng mở rộng
Có khả năng mở rộng nhưng yêu cầu cấu hình phức tạp hơn Hiệu suất
(performance) Hiệu suất thời gian thực tốt Có thể đạt hiệu suất cao, nhưng cần tối ưu hóa cẩn thận Tính năng Xác thực người dùng, lưu trữ
tệp, thông báo đẩy,
Không có sẵn, cần tích hợp với dịch
vụ khác Chi phí (cost) Có gói miễn phí, gói trả phí
theo nhu cầu sử dụng Miễn phíCộng đồng và hỗ
trợ
Cộng đồng lớn, hỗ trợ từ Google Cộng đồng lớn, nhiều tài liệu
Bảng 1 Bảng so sánh Firebase và MySQL
Loại dữ liệu NoSQL (JSON) NoSQL (Document)
Dạng Schema
Dynamic Schema, dữ liệu có thể được thêm, xóa hoặc sửa bất
kỳ thời điểm nào
Dynamic Schema, dữ liệu có thể được thêm, xóa hoặc sửa bất kỳ thời điểm nào
Cấu trúc dữ liệu Dữ liệu không cần được định
nghĩa hay có cấu trúc xác định
Dữ liệu không cần được định nghĩa hay có cấu trúc xác định
Vị trí lưu trữ Cloud-based Cloud-based
Khả năng mở
rộng (scalability)
Được thiết kế để dễ dàng mở rộng
Có khả năng mở rộng nhưng yêu cầu cấu hình phức tạp hơn Hiệu suất
(performance) Hiệu suất thời gian thực tốt Có thể đạt hiệu suất cao, nhưng cần tối ưu hóa cẩn thận Tính năng Xác thực người dùng, lưu trữ
tệp, thông báo đẩy,
Không có sẵn, cần tích hợp với dịch
vụ khác Chi phí (cost) Có gói miễn phí, gói trả phí
theo nhu cầu sử dụng Có cả phiên bản miễn phí và trả phíCộng đồng và hỗ
trợ
Cộng đồng lớn, hỗ trợ từ Google Cộng đồng lớn, nhiều tài liệu
Bảng 2 Bảng so sánh Firebase và MongoDB
1.3.5 Ưu điểm
Phát triển nhanh chóng: Firebase cung cấp nhiều dịch vụ
"backend-as-a-service" (BaaS), giúp giảm thiểu thời gian và công sức phát triển các tính năng
cơ bản như xác thực, cơ sở dữ liệu và lưu trữ
Dễ sử dụng: Firebase có giao diện thân thiện và tài liệu hướng dẫn chi tiết, giúp
các nhà phát triển dễ dàng tích hợp và sử dụng các dịch vụ của nó