Dart - Flutter trong 50 ngày

  • Ngày 1:

    • Buổi 1: Làm quen với DartPad và các khái niệm cơ bản (biến, kiểu dữ liệu, toán tử, String interpolation, các kiểu dữ liệu collection).

    • Bài tập:

      1. Viết chương trình tính toán và in ra kết quả của các biểu thức toán học phức tạp sử dụng các toán tử khác nhau (ví dụ: tính lãi suất kép, tính diện tích hình học phức tạp).

      2. Viết chương trình xử lý chuỗi, ví dụ: đảo ngược chuỗi, kiểm tra chuỗi palindrome, tìm chuỗi con chung dài nhất của hai chuỗi.

      3. Viết chương trình sử dụng List, Set, Map để lưu trữ và thao tác dữ liệu. Ví dụ: tìm số lớn nhất/nhỏ nhất trong List, loại bỏ các phần tử trùng lặp trong Set, đếm số lần xuất hiện của mỗi từ trong một đoạn văn.

  • Ngày 2:

    • Buổi 1: Tìm hiểu về các cấu trúc điều khiển (if-else, for, while, switch-case) và cách sử dụng chúng để giải quyết các bài toán phức tạp.

    • Bài tập:

      1. Viết chương trình kiểm tra số nguyên tố trong một khoảng cho trước, sử dụng vòng lặp và câu lệnh điều kiện.

      2. Viết chương trình tính tổng của một dãy số, sử dụng vòng lặp while và break/continue.

      3. Xây dựng một trò chơi đơn giản như đoán số, oẳn tù tì, sử dụng switch-case để xử lý lựa chọn của người dùng.

  • Ngày 3:

    • Buổi 1: Khám phá khái niệm hàm (function), các loại tham số (vị trí, đặt tên, tùy chọn), giá trị trả về và cách sử dụng chúng để tổ chức code.

    • Bài tập:

      1. Viết một hàm đệ quy tính tổng các số trong một dãy số.

      2. Viết một hàm tìm kiếm phần tử trong mảng, sử dụng các thuật toán khác nhau (ví dụ: tìm kiếm tuyến tính, tìmkiếm nhị phân).

      3. Xây dựng một thư viện các hàm tiện ích để xử lý chuỗi, số, ngày tháng, ...

  • Ngày 4:

    • Buổi 1: Tìm hiểu về Null Safety, một tính năng quan trọng của Dart giúp ngăn ngừa lỗi null. Thực hành với các khái niệm: ?, !, late, ??, ??=.

    • Bài tập:

      1. Viết một hàm tính toán và in ra kết quả của một biểu thức toán học, xử lý các trường hợp có thể xảy ra lỗi (ví dụ: chia cho 0, căn bậc hai của số âm) bằng cách sử dụng try-catch và throw Exception.

      2. Xây dựng một ứng dụng dòng lệnh đơn giản để quản lý danh sách sản phẩm (thêm, xóa, sửa, tìm kiếm), sử dụng Null Safety để đảm bảo tính an toàn của dữ liệu.

      3. Tìm hiểu về các kiểu dữ liệu nullable và non-nullable, cách sử dụng chúng để kiểm soát giá trị null trong chương trình.

  • Ngày 5:

    • Buổi 1: Tìm hiểu về lập trình hướng đối tượng (OOP) trong Dart: class, object, constructor, các đặc tính của OOP (tính đóng gói, tính kế thừa, tính đa hình), abstract class, interface.

    • Bài tập:

      1. Xây dựng một hệ thống quản lý thư viện đơn giản, sử dụng các lớp Book, Author, Member, Loan. Áp dụng các khái niệm kế thừa và đa hình để tổ chức code.

      2. Tạo một ứng dụng mô phỏng hệ thống giao thông, sử dụng các lớp Vehicle, Car, Truck, Motorcycle. Áp dụng interface để định nghĩa các hành vi chung của phương tiện.

      3. Tìm hiểu về các mẫu thiết kế (design pattern) trong Dart như Singleton, Factory, Builder. Áp dụng chúng vào các bài tập thực tế.

  • Ngày 6:

    • Buổi 1: Tìm hiểu về mixin, cách Dart xử lý lỗi với try-catch và các kiểu exception.

    • Bài tập:

      1. Tạo một mixin Loggable để ghi log các hoạt động của một lớp. Áp dụng mixin này vào các lớp khác nhau để theo dõi hoạt động của chúng.

      2. Xây dựng một ứng dụng đọc và ghi file, xử lý các lỗi có thể xảy ra trong quá trình đọc ghi (ví dụ: file không tồn tại, không có quyền truy cập).

      3. Tìm hiểu về các loại exception phổ biến trong Dart và cách xử lý chúng một cách hiệu quả.

  • Ngày 7:

    • Buổi 1: Khám phá thư viện dart:io để làm việc với file và thư mục, xử lý JSON trong Dart.

    • Bài tập:

      1. Viết chương trình đọc dữ liệu từ một file JSON, chuyển đổi thành các đối tượng Dart và hiển thị ra màn hình.

      2. Viết chương trình tạo một file JSON chứa thông tin về một danh sách sản phẩm.

      3. Tìm hiểu về các thư viện Dart khác như dart:convert, dart:async để làm việc với JSON và các tác vụ bất đồng bộ.

  • Ngày 8:

    • Buổi 1: Tìm hiểu về lập trình bất đồng bộ (asynchronous) với Future, async, await.

    • Bài tập:

      1. Viết một hàm bất đồng bộ để tải dữ liệu từ một API và xử lý kết quả trả về.

      2. Sử dụng Future.wait để thực hiện nhiều tác vụ bất đồng bộ song song và xử lý kết quả khi tất cả hoàn thành.

      3. Xây dựng một ứng dụng dòng lệnh phức tạp hơn, ví dụ: một ứng dụng quản lý danh sách công việc với các tính năng như thêm, xóa, sửa, tìm kiếm, sắp xếp, lưu trữ dữ liệu vào file.

      4. Xây dựng một ứng dụng đọc và hiển thị dữ liệu từ một API (ví dụ: API thời tiết, API tin tức), sử dụng http hoặc một thư viện mạng khác.

  • Ngày 9:

    • Buổi 1: Tìm hiểu về Stream (Stream) để xử lý luồng dữ liệu bất đồng bộ.

    • Bài tập:

      1. Tạo một Stream phát ra các số Fibonacci và xử lý chúng bằng cách sử dụng các phương thức listen, map, where.

      2. Tạo một Stream đọc dữ liệu từ một file văn bản và xử lý từng dòng.

      3. Tìm hiểu về các loại Stream khác nhau trong Dart như StreamController, StreamSubscription, BroadcastStream.

      4. Tìm hiểu về các thư viện và công cụ Dart khác như args, path, intl, crypto.

  • Ngày 10:

    • Buổi 1: Tìm hiểu về các mẫu thiết kế (design pattern) phổ biến trong Dart như Singleton, Factory, Builder.

    • Bài tập:

      1. Cài đặt mẫu Singleton cho một lớp Logger.

      2. Cài đặt mẫu Factory cho một lớp Shape để tạo ra các hình dạng khác nhau.

      3. Cài đặt mẫu Builder cho một lớp Pizza để xây dựng các loại pizza khác nhau.

  • Ngày 11:

    • Buổi 1: Tìm hiểu về unit testing trong Dart với package test.

    • Bài tập:

      1. Viết unit test cho các hàm đã viết ở các ngày trước đó (ví dụ: hàm tính giai thừa, hàm kiểm tra số nguyên tố).

      2. Viết unit test cho các lớp đã tạo ở các ngày trước đó (ví dụ: lớp Person, lớp Car).

      3. Tìm hiểu về các khái niệm test, expect, setUp, tearDown trong unit testing.

  • Ngày 12:

    • Buổi 1: Tìm hiểu về các công cụ phân tích code tĩnh (static code analysis) như dartanalyzer, flutter analyze.

    • Bài tập:

      1. Cài đặt và cấu hình dartanalyzer.

      2. Chạy dartanalyzer trên một dự án Dart và sửa các lỗi được báo cáo.

      3. Tìm hiểu về các quy tắc lint trong Dart và cách tùy chỉnh chúng.

Giai đoạn 2: Khám phá Flutter

  • Ngày 13:

    • Buổi 1: Cài đặt Flutter SDK và Android Studio, tạo project Flutter đầu tiên.

    • Bài tập:

      1. Tạo một ứng dụng "Hello World" đơn giản hiển thị một đoạn text và một hình ảnh.

      2. Tìm hiểu về cấu trúc thư mục của một dự án Flutter và các file quan trọng như pubspec.yaml, main.dart.

  • Ngày 14:

    • Buổi 1: Tìm hiểu về các widget cơ bản trong Flutter như Text, Image, Container, Row, Column, Stack.

    • Bài tập:

      1. Xây dựng một giao diện đơn giản gồm các widget cơ bản, ví dụ: một màn hình đăng nhập với các ô input và nút bấm.

      2. Tìm hiểu về các thuộc tính của các widget cơ bản và cách tùy chỉnh chúng để thay đổi giao diện.

  • Ngày 15:

    • Buổi 1: Tìm hiểu về layout trong Flutter, các widget layout như Center, Align, Padding, Expanded, Flexible.

    • Bài tập:

      1. Xây dựng một giao diện phức tạp hơn sử dụng các widget layout, ví dụ: một màn hình hiển thị danh sách sản phẩm với hình ảnh và thông tin chi tiết.

      2. Tìm hiểu về các khái niệm mainAxisAlignment, crossAxisAlignment, mainAxisSize trong layout.

  • Ngày 16:

    • Buổi 1: Tìm hiểu về Stateful và Stateless Widget, vòng đời của State.

    • Bài tập:

      1. Tạo một ứng dụng đếm số, sử dụng StatefulWidget để quản lý trạng thái của bộ đếm.

      2. Xây dựng một ứng dụng đơn giản cho phép người dùng nhập tên và hiển thị lời chào, sử dụng TextFieldStatefulWidget.

      3. Tìm hiểu về các phương thức initState, didChangeDependencies, build, dispose trong vòng đời của State.

  • Ngày 17:

    • Buổi 1: Làm quen với Material Design và các thành phần giao diện theo Material Design như AppBar, Scaffold, FloatingActionButton.

    • Bài tập:

      1. Xây dựng một ứng dụng có giao diện theo Material Design, sử dụng AppBar, Scaffold, FloatingActionButton.

      2. Tìm hiểu về các thành phần khác của Material Design như Drawer, BottomNavigationBar, SnackBar.

      3. Tùy chỉnh giao diện Material Design bằng cách thay đổi màu sắc, font chữ, và các thuộc tính khác.

  • Ngày 18:

    • Buổi 1: Tìm hiểu về navigation và routing trong Flutter, sử dụng Navigator và các widget như MaterialPageRoute, NamedRoute.

    • Bài tập:

      1. Xây dựng một ứng dụng có nhiều màn hình, sử dụng Navigator để chuyển đổi giữa các màn hình.

      2. Tạo một ứng dụng có menu điều hướng, sử dụng Drawer hoặc BottomNavigationBar.

      3. Truyền dữ liệu giữa các màn hình bằng cách sử dụng arguments của Navigator.

  • Ngày 19:

    • Buổi 1: Tìm hiểu về các widget nâng cao trong Flutter như ListView, GridView, CustomScrollView.

    • Bài tập:

      1. Xây dựng một ứng dụng hiển thị danh sách các sản phẩm, sử dụng ListView.

      2. Tạo một ứng dụng hiển thị ảnh theo dạng lưới, sử dụng GridView.

      3. Tìm hiểu về cách tùy chỉnh ListViewGridView để tạo ra các giao diện phức tạp hơn.

  • Ngày 20:

    • Buổi 1: Làm quen với Firebase, tích hợp Firebase Authentication vào ứng dụng Flutter.

    • Bài tập:

      1. Xây dựng một ứng dụng đăng ký và đăng nhập người dùng bằng Firebase Authentication.

      2. Thêm tính năng xác thực bằng email/mật khẩu, Google, Facebook vào ứng dụng.

      3. Tìm hiểu về các tính năng bảo mật khác của Firebase Authentication như xác minh email, quên mật khẩu.

  • Ngày 21:

    • Buổi 1: Tìm hiểu về Firebase Realtime Database và Cloud Firestore, cách lưu trữ và truy xuất dữ liệu.

    • Bài tập:

      1. Xây dựng một ứng dụng chat đơn giản sử dụng Firebase Realtime Database để lưu trữ tin nhắn.

      2. Tạo một ứng dụng lưu trữ danh sách công việc (todo list) sử dụng Cloud Firestore.

      3. Tìm hiểu về các quy tắc bảo mật của Firebase Realtime Database và Cloud Firestore.

  • Ngày 22:

    • Buổi 1: Tìm hiểu về Google Maps và cách tích hợp vào ứng dụng Flutter.

    • Bài tập:

      1. Xây dựng một ứng dụng hiển thị bản đồ Google Maps.

      2. Thêm các điểm đánh dấu (marker) và đường đi (polyline) vào bản đồ.

      3. Tìm hiểu về các tính năng khác của Google Maps như tìm kiếm địa điểm, chỉ đường.

  • Ngày 23:

    • Buổi 1: Tìm hiểu về cách lấy vị trí hiện tại của người dùng bằng GPS.

    • Bài tập:

      1. Xây dựng một ứng dụng hiển thị vị trí hiện tại của người dùng trên bản đồ.

      2. Tạo một ứng dụng theo dõi vị trí của người dùng và vẽ đường đi của họ trên bản đồ.

      3. Tìm hiểu về các vấn đề liên quan đến quyền riêng tư và bảo mật khi sử dụng GPS.

  • Ngày 24:

    • Buổi 1: Tìm hiểu về các widget TextFormField, DropdownButton, CheckBox, Radio, Slider để tạo form nhập liệu.

    • Bài tập:

      1. Xây dựng một form đăng ký người dùng với các trường thông tin như họ tên, email, mật khẩu, ngày sinh, giới tính.

      2. Tạo một form khảo sát ý kiến khách hàng với các câu hỏi trắc nghiệm, lựa chọn đơn, lựa chọn nhiều, đánh giá bằng slider.

      3. Xác thực dữ liệu đầu vào của form và hiển thị thông báo lỗi nếu cần thiết.

  • Ngày 25:

    • Buổi 1: Tìm hiểu về InheritedWidgetProvider để quản lý trạng thái ứng dụng.

    • Bài tập:

      1. Xây dựng một ứng dụng đơn giản cho phép người dùng chuyển đổi giữa chế độ sáng và tối (dark mode), sử dụng InheritedWidget hoặc Provider để quản lý trạng thái.

      2. Tạo một ứng dụng mua sắm với giỏ hàng, sử dụng Provider để quản lý trạng thái của giỏ hàng.

      3. Tìm hiểu về các khái niệm ChangeNotifier, Consumer, ConsumerWidget trong Provider.

  • Ngày 26:

    • Buổi 1: Tìm hiểu về animation trong Flutter, sử dụng AnimationController, Tween, AnimatedBuilder.

    • Bài tập:

      1. Tạo một animation đơn giản cho một widget, ví dụ: làm cho một hình ảnh mờ dần hoặc di chuyển từ trái sang phải.

      2. Xây dựng một animation phức tạp hơn, ví dụ: một animation chuyển đổi giữa hai màn hình.

      3. Tìm hiểu về các loại animation khác nhau trong Flutter như Hero, AnimatedContainer, AnimatedList.

  • Ngày 27:

    • Buổi 1: Tìm hiểu về cách xử lý lỗi và debug ứng dụng Flutter.

    • Bài tập:

      1. Sử dụng try-catch để bắt và xử lý các lỗi có thể xảy ra trong ứng dụng.

      2. Sử dụng debugPrint để in ra thông tin debug trong quá trình phát triển.

      3. Tìm hiểu về các công cụ debug của Flutter như DevTools.

  • Ngày 28:

    • Buổi 1: Tìm hiểu về cách kiểm thử ứng dụng Flutter bằng unit test, widget test, và integration test.

    • Bài tập:

      1. Viết unit test cho các hàm và lớp trong ứng dụng của bạn.

      2. Viết widget test để kiểm tra giao diện người dùng của ứng dụng.

      3. Viết integration test để kiểm tra luồng hoạt động của ứng dụng.

  • Ngày 29:

    • Buổi 1: Tìm hiểu về cách xuất bản ứng dụng Flutter lên Google Play Store và App Store.

    • Bài tập:

      1. Chuẩn bị các tài nguyên cần thiết để xuất bản ứng dụng (biểu tượng, ảnh chụp màn hình, mô tả).

      2. Tạo tài khoản nhà phát triển trên Google Play Console và App Store Connect.

      3. Xuất bản một ứng dụng demo lên Google Play Store và App Store.

  • Ngày 30:

    • Buổi 1: Tổng kết lại kiến thức đã học về Flutter và chuẩn bị cho giai đoạn xây dựng dự án.

    • Bài tập:

      1. Xem lại các khái niệm và kỹ thuật quan trọng đã học trong Flutter.

      2. Lên ý tưởng và thiết kế giao diện cho các dự án thực tế.

      3. Chuẩn bị môi trường phát triển và các công cụ cần thiết cho việc xây dựng dự án.

Xây dựng 4 dự án Flutter nâng cao (Ngày 31-50)

Chúng ta sẽ chia 20 ngày này để hoàn thành 4 dự án Flutter nâng cao, mỗi dự án sẽ có 5 ngày để hoàn thiện. Dưới đây là kế hoạch chi tiết cho từng dự án:

Dự án 1: Ứng dụng quản lý danh sách công việc (Todo App) (Ngày 31-35)

  • Ngày 31:

    • Lên ý tưởng và thiết kế giao diện (wireframe/mockup) cho các màn hình: danh sách công việc, thêm/sửa công việc, cài đặt.

    • Xây dựng mô hình dữ liệu Task (tiêu đề, mô tả, deadline, trạng thái).

  • Ngày 32:

    • Tạo giao diện danh sách công việc với ListView, hiển thị thông tin cơ bản của từng task.

    • Thêm chức năng thêm công việc mới, sử dụng TextFieldElevatedButton.

  • Ngày 33:

    • Thêm chức năng sửa và xóa công việc.

    • Cập nhật trạng thái hoàn thành của công việc.

  • Ngày 34:

    • Tích hợp shared_preferences để lưu trữ danh sách công việc vào bộ nhớ cục bộ.

    • Thêm tính năng tìm kiếm công việc.

  • Ngày 35:

    • Hoàn thiện giao diện và chức năng của ứng dụng.

    • Tối ưu hóa hiệu suất và kiểm tra lỗi.

Dự án 2: Ứng dụng đọc tin tức (News App) (Ngày 36-40)

  • Ngày 36:

    • Chọn một API tin tức miễn phí (ví dụ: NewsAPI).

    • Thiết kế giao diện hiển thị danh sách tin tức và chi tiết tin tức.

    • Tạo mô hình dữ liệu Article (tiêu đề, mô tả, hình ảnh, URL).

  • Ngày 37:

    • Gửi request đến API và lấy dữ liệu tin tức.

    • Hiển thị danh sách tin tức với ListView, sử dụng Image.network để tải ảnh.

  • Ngày 38:

    • Xây dựng màn hình chi tiết tin tức, hiển thị đầy đủ thông tin của một bài báo.

    • Thêm chức năng chia sẻ tin tức lên mạng xã hội.

  • Ngày 39:

    • Thêm tính năng lưu tin tức yêu thích.

    • Hiển thị danh sách tin tức yêu thích.

  • Ngày 40:

    • Hoàn thiện giao diện và chức năng của ứng dụng.

    • Tối ưu hóa hiệu suất và kiểm tra lỗi.

Dự án 3: Ứng dụng thời tiết (Weather App) (Ngày 41-45)

  • Ngày 41:

    • Chọn một API thời tiết miễn phí (ví dụ: OpenWeatherMap).

    • Thiết kế giao diện hiển thị thông tin thời tiết hiện tại và dự báo.

    • Tạo mô hình dữ liệu Weather (nhiệt độ, độ ẩm, mô tả, icon).

  • Ngày 42:

    • Gửi request đến API và lấy dữ liệu thời tiết.

    • Hiển thị thông tin thời tiết hiện tại với các widget phù hợp.

  • Ngày 43:

    • Hiển thị dự báo thời tiết cho các ngày tiếp theo.

    • Sử dụng ListView hoặc GridView để hiển thị dự báo.

  • Ngày 44:

    • Thêm tính năng tìm kiếm thành phố.

    • Lưu trữ danh sách thành phố yêu thích.

  • Ngày 45:

    • Hoàn thiện giao diện và chức năng của ứng dụng.

    • Tối ưu hóa hiệu suất và kiểm tra lỗi.

Dự án 4: Ứng dụng ghi chú (Note App) (Ngày 46-50)

  • Ngày 46:

    • Thiết kế giao diện danh sách ghi chú và màn hình soạn thảo ghi chú.

    • Tạo mô hình dữ liệu Note (tiêu đề, nội dung, thời gian tạo/sửa).

  • Ngày 47:

    • Hiển thị danh sách ghi chú với ListView.

    • Thêm chức năng tạo ghi chú mới, sử dụng TextField để nhập nội dung.

  • Ngày 48:

    • Thêm chức năng sửa và xóa ghi chú.

    • Sử dụng shared_preferences để lưu trữ ghi chú vào bộ nhớ cục bộ.

  • Ngày 49:

    • Thêm tính năng tìm kiếm ghi chú.

    • Thêm tính năng định dạng văn bản (in đậm, in nghiêng, gạch chân).

  • Ngày 50:

    • Hoàn thiện giao diện và chức năng của ứng dụng.

    • Tối ưu hóa hiệu suất và kiểm tra lỗi.