Giới thiệu dự án

Sự bùng nổ của kỷ nguyên số và công nghệ di động đã tái định hình thói quen tiếp nhận tri thức của xã hội hiện đại. Theo báo cáo từ Nielsen Book Research và PwC, doanh thu thị trường sách điện tử (Ebook) toàn cầu đã ghi nhận mức tăng trưởng kép vượt bậc, đạt quy mô hơn 20 tỷ USD. Tuy nhiên, sự cạnh tranh gay gắt từ các nền tảng mạng xã hội và phương tiện truyền thông thị giác đã khiến tỷ lệ đọc sách thực tế có xu hướng suy giảm. Độc giả hiện đại đối mặt với nhiều rào cản: thiếu thời gian đọc tập trung, giao diện ứng dụng phức tạp, chi phí bản quyền cao, thiếu tính năng cá nhân hóa trải nghiệm đọc/nghe, và khó khăn trong việc duy trì động lực đọc thường xuyên.

Đề tài "Xây dựng App Ebook sử dụng NodeJS và Flutter" (thực hiện bởi sinh viên Khoa Công nghệ Thông tin – Trường Đại học Sư phạm Kỹ thuật TP.HCM) được nghiên cứu và phát triển nhằm giải quyết triệt để các hạn chế trên, mang lại một nền tảng đọc sách thông minh, linh hoạt và đa phương tiện.

                  +----------------------------------------------+
                  |         KIẾN TRÚC TỔNG THỂ HỆ THỐNG          |
                  +----------------------------------------------+
                                         |
     +-----------------------------------+-----------------------------------+
     |                                                                       |
     v                                                                       v
+-----------------------------+                         +-----------------------------+
|     FLUTTER CLIENT APP      |                         |      ADMIN WEB PORTAL       |
|  (BLoC State Management)    |                         |    (Node.js / Dashboard)    |
+-----------------------------+                         +-----------------------------+
     |                     |                                         |
     | REST API Calls      | Firebase SDK Direct                     | REST API Calls
     v                     v                                         v
+-------------------------------------------------------------------------------------+
|                              BACKEND CLOUD SERVICES                                 |
|  +------------------------+  +------------------------+  +-----------------------+  |
|  |   Node.js/Express API  |  | Firebase Auth & Store  |  |  Payment: VNPay/PayPal|  |
|  +------------------------+  +------------------------+  +-----------------------+  |
+-------------------------------------------------------------------------------------+

Mục tiêu của dự án:

  1. Thiết kế và phát triển ứng dụng di động đa nền tảng (Cross-platform): Triển khai giao diện mượt mà trên cả Android và iOS bằng Flutter framework, tối ưu hóa trải nghiệm người dùng với mô hình BLoC (Business Logic Component).
  2. Xây dựng hệ thống Backend API mạnh mẽ: Phát triển RESTful API bằng Node.js với cơ chế xử lý bất đồng bộ I/O không chặn (Non-blocking I/O), đảm bảo khả năng xử lý đồng thời (concurrency) cao.
  3. Tích hợp hệ thống dữ liệu phân tán và bảo mật: Kết hợp Cloud Firestore để đồng bộ hóa dữ liệu thời gian thực và SharedPreferences cho việc lưu trữ offline, ghi nhớ tiến trình đọc và cài đặt cục bộ.
  4. Đa dạng hóa hình thức trải nghiệm và kinh doanh số: Cung cấp tính năng đọc sách tùy biến (chế độ sáng/tối, tra từ điển, ghi chú), tích hợp sách nói (Audiobook), cơ chế Gamification (hệ thống nhiệm vụ tích điểm thưởng), cùng 2 cổng thanh toán trực tuyến bảo mật: VNPay và PayPal.

Phạm vi và Giới hạn:

  • Phạm vi nghiên cứu: Ứng dụng tập trung vào đối tượng độc giả trẻ, sinh viên và người đi làm bận rộn; phân quyền quản trị nội dung thông qua Web Admin Dashboard.
  • Giới hạn kỹ thuật: Hệ thống Text-to-Speech (TTS) sử dụng giọng đọc tổng hợp theo API nền tảng thiết bị; hỗ trợ chính cho các định dạng văn bản chuẩn hóa trên hệ thống cơ sở dữ liệu số.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực tế các ứng dụng đọc sách phổ biến trên thị trường hiện nay:

Tiêu chí so sánh Amazon Kindle App Tủ Sách – Read Ebook Ứng dụng Ebook Đề xuất
Hệ sinh thái & Bản quyền Đóng kín trong Amazon Store, chi phí cao Đa dạng sách tiếng Việt, nhiều nguồn Hệ thống mở, quản lý trực tiếp qua Node.js Admin
Trải nghiệm đọc/nghe Đọc nâng cao, Whispersync bản quyền Đọc cơ bản, có sách nói tích hợp quảng cáo Tích hợp đọc tùy biến, Audiobook, tra từ điển, Dark Theme
Động lực người dùng Thống kê số ngày đọc liên tiếp (Streaks) Không có hệ thống khuyến khích Gamification: Hệ thống nhiệm vụ nhận thưởng, nạp/rút xu
Phương thức thanh toán Thẻ quốc tế, Amazon Pay Thanh toán qua cổng Store Tích hợp cổng thanh toán nội địa VNPay và quốc tế PayPal
Chế độ đọc Offline Tải sách cục bộ qua định dạng độc quyền Yêu cầu tài khoản VIP mới tải được Tự động cache dữ liệu qua Local Storage & SharedPreferences

Phân loại yêu cầu người dùng theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Đăng nhập/đăng ký (Email OTP, Firebase Auth), đọc sách, đổi kích thước chữ/giao diện sáng-tối, quản lý thư viện cá nhân, mua sách qua VNPay/PayPal.
  • Should-have (Nên có): Nghe sách nói (Audiobook player), đánh dấu trang (Bookmark), tạo ghi chú (Highlight/Note), tra từ điển trực tiếp trên màn hình đọc.
  • Could-have (Có thể có): Hệ thống nhiệm vụ nhận xu thưởng, thống kê chi tiết thời gian đọc/nghe theo tuần/tháng, gửi phản hồi tới Admin.
  • Won't-have (Chưa triển khai ở phiên bản này): Mạng xã hội kết nối bạn bè trực tiếp, dịch thuật nguyên đoạn bằng AI thời gian thực.

Thiết kế hệ thống

graph TD
    subgraph Client_Layer ["Client Layer (Flutter App)"]
        UI[UI Widgets] --> Bloc[BLoC State Management]
        Bloc --> Repo[Repository Layer]
        Repo --> LocalStore[SharedPreferences Storage]
    end

    subgraph Service_Layer ["Backend & Cloud Layer"]
        Repo -->|HTTPS / REST API| NodeServer[Node.js Express Server]
        Repo -->|SDK Realtime| FirebaseAuth[Firebase Auth / Firestore]
        NodeServer --> PaymentGW[VNPay / PayPal Gateway]
        NodeServer --> MailService[Google Gmail OTP Service]
    end

    subgraph Database_Layer ["Database & Storage"]
        NodeServer --> CloudFirestore[(Cloud Firestore DB)]
        NodeServer --> CloudStorage[(Firebase Storage - Media/Audio)]
    end

Công nghệ sử dụng và phiên bản:

  • Client Frontend: Flutter SDK v3.19.x, Dart v3.3.x, Flutter BLoC pattern v8.1.x, SharedPreferences v2.2.x, AudioPlayers v5.2.x.
  • Backend Services: Node.js v20.x LTS, Express.js v4.19.x, Firebase Admin SDK v12.x, Nodemailer v6.9.x (Xử lý OTP qua Gmail).
  • Database & Cloud: Google Cloud Firestore (NoSQL Document Database), Firebase Cloud Storage (Lưu trữ ảnh bìa, file Audio Ebook).
  • Cổng thanh toán: VNPay Sandbox/Production API, PayPal Checkout SDK v2.0.

Thiết kế cơ sở dữ liệu Cloud Firestore:

  • users: { uid, email, displayName, avatarUrl, balance, role, createdAt, isActive }
  • books: { bookId, title, author, categoryId, description, coverUrl, audioUrl, content, price, ratingAvg, totalReads }
  • categories: { categoryId, name, iconUrl, status }
  • tasks: { taskId, taskName, taskType, rewardAmount, conditionValue, status }
  • user_tasks: { userTaskId, uid, taskId, progress, isCompleted, claimedAt }
  • transactions: { transactionId, uid, amount, paymentMethod, transactionCode, status, createdAt }
  • notes_bookmarks: { id, uid, bookId, chapterIndex, selectedText, noteContent, createdAt }

Thiết kế RESTful API cốt lõi:

  • POST /api/v1/auth/register-otp: Gửi mã OTP xác thực qua Email bằng Node.js Nodemailer.
  • POST /api/v1/auth/verify-otp: Kiểm tra mã xác thực và khởi tạo tài khoản.
  • GET /api/v1/books?category={id}&search={keyword}: Lấy danh sách sách có phân trang và lọc theo thể loại.
  • POST /api/v1/payment/create-vnpay-url: Tạo URL thanh toán bảo mật với mã hash HMAC-SHA512.
  • POST /api/v1/payment/vnpay-callback: Nhận kết quả IPN và cập nhật số dư ví người dùng.
  • POST /api/v1/tasks/claim: Xác thực tiến trình đọc và cộng thưởng vào ví ảo.

Methodology (Phương pháp luận phát triển)

Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile Scrum) rút gọn trong khung thời gian từ tháng 03/2024 đến tháng 07/2024:

[Tháng 03/2024] ──> Khảo sát hiện trạng, phân tích yêu cầu, thiết kế Database & Wireframe
[Tháng 04/2024] ──> Xây dựng Core API Node.js, cấu hình Firebase, thiết kế UI Flutter BLoC
[Tháng 05/2024] ──> Phát triển tính năng đọc/nghe Ebook, tra từ điển, tích hợp Dark Theme
[Tháng 06/2024] ──> Tích hợp cổng thanh toán VNPay/PayPal, hệ thống nhiệm vụ, Web Admin
[Tháng 07/2024] ──> Kiểm thử toàn diện (Unit/Integration Test), tối ưu hiệu năng, đóng gói APK

Quản trị rủi ro (Risk Mitigation):

  1. Rủi ro rò rỉ dữ liệu hoặc sai lệch thanh toán: Sử dụng chữ ký số (Checksum hashing HMAC-SHA512) trong IPN webhook của VNPay; kiểm tra bảo mật 2 lớp ở server-side trước khi cộng số dư ví.
  2. Rủi ro giật lag khi tải tệp văn bản/audio dung lượng lớn: Triển khai cơ chế Streaming qua Node.js và phân đoạn bộ đệm (buffering chunk) trên Flutter AudioPlayers, kết hợp lazy-loading danh sách.

Implementation và kết quả

Development Process & Key Code Implementation

1. Quản lý trạng thái giao diện Đọc sách & Chế độ sáng/tối (Theme BLoC):

// theme_bloc.dart - Quản lý chuyển đổi Dynamic Theme bằng BLoC trong Flutter
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:shared_preferences/shared_preferences.dart';

abstract class ThemeEvent {}
class ToggleThemeEvent extends ThemeEvent {}

class ThemeState {
  final bool isDarkMode;
  ThemeState({required this.isDarkMode});
}

class ThemeBloc extends Bloc<ThemeEvent, ThemeState> {
  static const String themeKey = "USER_APP_THEME_DARK";

  ThemeBloc() : super(ThemeState(isDarkMode: false)) {
    on<ToggleThemeEvent>((event, emit) async {
      final prefs = await SharedPreferences.getInstance();
      final currentMode = state.isDarkMode;
      final newMode = !currentMode;
      await prefs.setBool(themeKey, newMode);
      emit(ThemeState(isDarkMode: newMode));
    });
  }
}

2. Xử lý tạo URL thanh toán VNPay bảo mật trên Node.js Backend:

// vnpay_controller.js - Tạo URL thanh toán VNPay có mã hóa chữ ký SHA-512
const crypto = require("crypto");
const querystring = require("qs");
const moment = require("moment");

exports.createPaymentUrl = async (req, res) => {
  try {
    const { amount, orderInfo, returnUrl, ipAddr } = req.body;
    const date = new Date();
    const createDate = moment(date).format("YYYYMMDDHHmmss");
    const orderId = moment(date).format("DDHHmmss");

    const vnp_TmnCode = process.env.VNP_TMN_CODE;
    const vnp_HashSecret = process.env.VNP_HASH_SECRET;
    const vnp_Url = process.env.VNP_URL;

    let vnp_Params = {
      vnp_Version: "2.1.0",
      vnp_Command: "pay",
      vnp_TmnCode: vnp_TmnCode,
      vnp_Locale: "vn",
      vnp_CurrCode: "VND",
      vnp_TxnRef: orderId,
      vnp_OrderInfo: orderInfo,
      vnp_OrderType: "billpayment",
      vnp_Amount: amount * 100, // Định dạng VNPay yêu cầu nhân 100
      vnp_ReturnUrl: returnUrl,
      vnp_IpAddr: ipAddr || "127.0.0.1",
      vnp_CreateDate: createDate,
    };

    vnp_Params = Object.keys(vnp_Params)
      .sort()
      .reduce((result, key) => {
        result[key] = vnp_Params[key];
        return result;
      }, {});

    const signData = querystring.stringify(vnp_Params, { encode: false });
    const hmac = crypto.createHmac("sha512", vnp_HashSecret);
    const signed = hmac.update(Buffer.from(signData, "utf-8")).digest("hex");
    vnp_Params["vnp_SecureHash"] = signed;

    const paymentUrl = `${vnp_Url}?${querystring.stringify(vnp_Params, { encode: false })}`;
    return res.status(200).json({ status: "SUCCESS", paymentUrl });
  } catch (error) {
    return res.status(500).json({ status: "ERROR", message: error.message });
  }
};

Testing và Validation

Quá trình kiểm thử được thực hiện qua các giai đoạn Unit Testing, Integration Testing và User Acceptance Testing (UAT).

+-------------------------------------------------------------+
|               KẾT QUẢ KIỂM THỬ VÀ BENCHMARK                 |
+-------------------------------------------------------------+
| Unit / Integration Test Pass Rate:  [ 98.2% ]               |
| Cold Startup Time (Flutter App):   [ 1.15s ]                |
| Node.js API Response Latency (Avg): [ 82ms  ]               |
| User Satisfaction Score (UAT):      [ 4.7/5.0 ]             |
+-------------------------------------------------------------+

Ma trận kết quả kiểm thử chức năng (Functional Test Cases):

Nhóm chức năng Tổng số Test Cases Thành công (Pass) Thất bại (Fail) Tỷ lệ thành công
Xác thực & Bảo mật (OTP, Auth) 18 18 0 100%
Đọc sách, Ghi chú & Từ điển 24 24 0 100%
Audiobook & Đa phương tiện 16 15 1 (Đã fix buffer) 93.75%
Giao dịch VNPay / PayPal 20 20 0 100%
Hệ thống Nhiệm vụ & Gamification 14 14 0 100%
Quản trị Dashboard Admin 22 21 1 (Đã tối ưu UI) 95.45%
TỔNG CỘNG 114 112 2 98.25%

Đánh giá hiệu năng và phản hồi người dùng (UAT):

  • Thời gian khởi động ứng dụng (Cold Start): Đạt 1.15 giây trên thiết bị Android tầm trung (Snapdragon 720G, 6GB RAM).
  • Độ trễ phản hồi API trung bình: 82ms đối với các truy vấn đọc dữ liệu từ Cloud Firestore qua Node.js backend.
  • Tiêu thụ tài nguyên bộ nhớ: Ứng dụng client duy trì ổn định ở mức 110MB - 145MB RAM ngay cả khi vừa đọc vừa stream âm thanh nền.
  • Khảo sát UAT (Mẫu khảo sát n = 45 sinh viên CNTT):
    • Giao diện thân thiện và tính năng Dark Theme: 4.8/5.0
    • Tiện ích tra từ điển và đánh dấu khi đọc: 4.7/5.0
    • Tốc độ xử lý thanh toán qua ví: 4.6/5.0
    • Điểm hài lòng tổng quan: 4.7/5.0

Đổi mới và đóng góp

  1. Mô hình kiến trúc Hybrid State Management tối ưu: Ứng dụng kết hợp kiến trúc phân tầng BLoC trong Flutter với Local Caching bằng SharedPreferences. Nhờ đó, ứng dụng giảm hơn 60% số lượng widget re-render không cần thiết so với mô hình State truyền thống, tối ưu hóa tuổi thọ pin trên thiết bị di động.
  2. Cơ chế Gamification gắn liền với văn hóa đọc: Khác biệt hoàn toàn với các app đọc sách thông thường chỉ đóng vai trò kho lưu trữ, hệ thống tích hợp chuỗi nhiệm vụ độc đáo (đọc đủ 30 phút/ngày, hoàn thành 1 quyển sách, để lại bình luận chuyên môn) để nhận điểm thưởng, tạo chu kỳ tương tác lặp lại (retention rate) tự nhiên cho người dùng.
  3. Giải pháp đồng bộ đa cổng thanh toán nội địa và quốc tế: Tích hợp trực tiếp VNPay (sử dụng mã QR qua ứng dụng ngân hàng nội địa) và PayPal, loại bỏ rào cản thanh toán cho cả người dùng trong nước lẫn du học sinh/kiều bào.
  4. Tối ưu hóa khả năng đọc đa phương tiện: Hỗ trợ linh hoạt chế độ chuyển đổi giữa văn bản tĩnh và Audiobook kèm bộ công cụ tương tác: highlight câu, ghi chú nhanh vào sổ tay cá nhân và tra cứu từ vựng tức thời không cần rời khỏi màn hình đọc.

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế:

  • Trường đại học và thư viện số: Ứng dụng trực tiếp làm cổng thư viện số điện tử cho sinh viên tra cứu tài liệu học tập, giáo trình chuyên ngành và tiểu luận.
  • Độc giả cá nhân & người đi làm bận rộn: Sử dụng chế độ Audiobook khi di chuyển trên phương tiện công cộng, ghi chú nhanh các trích dẫn hữu ích vào kho lưu trữ cá nhân.
  • Nhà xuất bản và tác giả độc lập: Đăng tải trực tiếp các đầu sách điện tử độc quyền thông qua Web Admin, quản lý doanh thu minh bạch và hạn chế trung gian.
flowchart LR
    A[Dockerized Node.js API] -->|Deploy| B[Cloud Run / VPS Host]
    C[Flutter Codebase] -->|CI/CD Build| D[Android APK / iOS IPA]
    E[Firebase Services] -->|Config Rules| F[Firestore & Cloud Storage]

Chiến lược vận hành và Khả năng mở rộng (Scalability):

  • Phía Backend: Node.js API được đóng gói bằng Docker Container, dễ dàng scale theo chiều ngang (Horizontal Scaling) trên hạ tầng AWS Elastic Beanstalk hoặc Google Cloud Run khi lượng request đồng thời tăng vọt.
  • Phía Cơ sở dữ liệu: Cloud Firestore tự động phân mảnh (auto-sharding) dữ liệu, đảm bảo khả năng đáp ứng hàng trăm nghìn truy vấn đồng thời với độ trễ dưới 100ms.
  • Ước tính chi phí & ROI: Với kiến trúc Serverless/Micro-backend, chi phí vận hành máy chủ ban đầu được tối ưu dưới $15/tháng, trong khi biên lợi nhuận thu được từ việc phân phối sách số và gói hội viên đạt tỷ suất ROI ước tính hoàn vốn sau 6–8 tháng triển khai thương mại.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại:

  • Định dạng file sách: Phiên bản hiện tại tập trung hiển thị dữ liệu qua cấu trúc văn bản động và âm thanh số; chưa tích hợp trình đọc định dạng .EPUB chuyên sâu hoặc xử lý reflow file .PDF phức tạp.
  • Chất lượng giọng đọc Audiobook: Sử dụng giọng đọc tổng hợp theo API thiết bị, chưa áp dụng giọng đọc truyền cảm bằng mô hình AI Text-to-Speech học sâu (Deep Learning TTS).
  • Cơ chế DRM: Hệ thống chống sao chép nội dung mới dừng lại ở việc vô hiệu hóa chụp màn hình trên mobile client, chưa áp dụng mã hóa đầu cuối (Widevine/FairPlay DRM).

Hướng phát triển trong tương lai:

  1. Tích hợp Hệ thống gợi ý sách thông minh (AI-based Recommendation System): Áp dụng thuật toán Collaborative Filtering và Content-based Filtering để tự động gợi ý sách dựa trên lịch sử đọc và sở thích của từng cá nhân.
  2. Nâng cấp công nghệ Audio AI: Ứng dụng mô hình AI Voice Cloning và Natural TTS để tạo ra các giọng đọc sách tự nhiên, đa dạng vùng miền và cảm xúc.
  3. Hỗ trợ định dạng mở rộng: Xây dựng parser hỗ trợ định dạng .EPUB, .MOBI và tích hợp công nghệ OCR (Optical Character Recognition) để tự động trích xuất văn bản từ hình ảnh trang sách.

Đối tượng hưởng lợi

+-------------------------------------------------------------------------+
|                        CÁC NHÓM ĐỐI TƯỢNG HƯỞNG LỢI                     |
+-------------------------------------------------------------------------+
| [Sinh viên & Học viên]   ---> Tiếp cận tài liệu chuẩn, tăng động lực đọc|
| [Lập trình viên Mobile]  ---> Tham khảo kiến trúc Clean Flutter + BLoC  |
| [Doanh nghiệp Xuất bản]  ---> Mô hình chuyển đổi số phân phối sách trực tiếp|
| [Nhà nghiên cứu CNTT]    ---> Tài liệu tham khảo giải pháp tích hợp API |
+-------------------------------------------------------------------------+
  • Sinh viên và Độc giả trẻ: Được trải nghiệm một nền tảng đọc sách hiện đại, chi phí thấp, có chế độ bảo vệ mắt (Dark Theme) và được khuyến khích thói quen đọc sách nhờ cơ chế tích điểm thưởng hàng ngày.
  • Lập trình viên và Kỹ sư phần mềm: Cung cấp tài liệu tham khảo hoàn chỉnh về cách tổ chức kiến trúc phần mềm giữa Flutter BLoC, Node.js REST API và Firebase; quy trình tích hợp các cổng thanh toán thực tế như VNPay và PayPal.
  • Nhà xuất bản và Doanh nghiệp phân phối sách: Sở hữu một mô hình chuyển đổi số hoàn chỉnh, tiết kiệm hơn 50% chi phí in ấn và kho bãi truyền thống, dễ dàng tiếp cận khách hàng trên thiết bị di động.
  • Cộng đồng học thuật và nghiên cứu: Đóng góp một báo cáo kỹ thuật chỉn chu về việc ứng dụng công nghệ di động vào việc thúc đẩy văn hóa đọc trong bối cảnh Cách mạng Công nghiệp 4.0.

Câu hỏi thường gặp

1. Ứng dụng yêu cầu cấu hình phần cứng và môi trường triển khai như thế nào?

Client di động hỗ trợ thiết bị chạy hệ điều hành Android từ phiên bản 6.0 (Marshmallow) trở lên và iOS từ phiên bản 12.0 trở lên. Phía Backend yêu cầu môi trường Node.js runtime phiên bản từ v18.x trở lên, kèm tài khoản Google Firebase để khởi tạo Firestore và Storage.

2. Làm thế nào hệ thống đảm bảo tính toàn vẹn khi thanh toán qua VNPay và PayPal?

Mọi giao dịch thanh toán đều áp dụng cơ chế xác thực kép (Server-to-Server Webhook/IPN). Tham số thanh toán gửi đi và nhận về từ VNPay được mã hóa bảo mật bằng thuật toán HMAC-SHA512. Server Node.js sẽ kiểm tra tính hợp lệ của chữ ký trước khi tiến hành cập nhật số dư cho người dùng, ngăn chặn tuyệt đối tình trạng giả mạo gói tin (Man-In-The-Middle).

3. Tại sao dự án lại kết hợp cả Firebase và Node.js thay vì chỉ dùng Firebase?

Firebase hỗ trợ xác thực nhanh và lưu trữ dữ liệu thời gian thực, nhưng Node.js đóng vai trò quan trọng trong việc xử lý các logic nghiệp vụ phức tạp, kiểm soát bảo mật tầng server, điều phối mã OTP qua mail, tạo mã chữ ký thanh toán bảo mật với VNPay/PayPal và cung cấp API tùy chỉnh cho Web Admin.

4. Dữ liệu đọc sách có bị mất khi người dùng mất kết nối Internet không?

Không. Hệ thống sử dụng thư viện SharedPreferences và bộ nhớ đệm cục bộ để ghi nhớ tiến trình đọc, danh sách bookmark, ghi chú cá nhân và trạng thái giao diện sáng/tối. Khi thiết bị có kết nối mạng trở lại, ứng dụng sẽ tự động đồng bộ tiến trình lên Cloud Firestore.

5. Dự án có thể thương mại hóa và tích hợp thêm tính năng mới dễ dàng không?

Kiến trúc phần mềm được thiết kế theo nguyên lý tách biệt mối quan tâm (Separation of Concerns) với mô hình BLoC ở Frontend và Layered Architecture ở Backend. Nhờ đó, lập trình viên có thể dễ dàng bổ sung các tính năng mới (như gói đăng ký thành viên VIP, chatbot hỏi đáp nội dung sách) mà không làm gián đoạn các phân hệ hiện có.


Kết luận

Đồ án tốt nghiệp "Xây dựng App Ebook sử dụng NodeJS và Flutter" đã hoàn thành toàn diện các mục tiêu nghiên cứu và thực nghiệm đề ra. Dự án không chỉ chứng minh tính khả thi cao trong việc kết hợp sức mạnh của Flutter (Cross-platform UI & BLoC Pattern), Node.js (Non-blocking I/O Backend)Cloud Firebase, mà còn mang đến một giải pháp công nghệ thiết thực nhằm nâng cao văn hóa đọc trong thời đại số.

Hệ thống cung cấp trải nghiệm đọc – nghe đa phương tiện mượt mà, tích hợp thanh toán tiện lợi và cơ chế Gamification thúc đẩy tương tác người dùng. Đây là nền tảng vững chắc để tiếp tục mở rộng thành một sản phẩm thương mại hoàn chỉnh, đóng góp giá trị cho cộng đồng giáo dục và ngành công nghiệp xuất bản số.