Freezed with news api tutorial Flutter

Freezed là một gói tạo mã giúp bạn tạo các lớp dữ liệu trong Dart. Nó ngăn bạn viết hàng trăm dòng dễ bị lỗi. Đôi khi bạn chỉ muốn một lớp chấp nhận các giá trị của nó trong một phương thức khởi tạo, một phương thức toString và có thể là bình đẳng giá trị. Chỉ vậy thôi đã là rất nhiều. Nhưng bây giờ hãy tưởng tượng bạn muốn các đối tượng không thay đổi. Để làm được điều đó, bạn cần thêm một phương thức copyWith. Nếu bạn biết cách thực hiện tất cả những điều này trong Dart, bạn chắc chắn biết rằng phải mất rất nhiều dòng mã để đạt được điều này. Và đó là lúc Freezed xuất hiện
Link package:https://pub.dev/packages/freezed
Ở đây tôi dùng api từ:newsapi.org
Tạo project mới tên là : freezed_new_api
Setup http package


flutter pub add http

Tạo folder lib/models
Setup freezed


flutter pub add freezed_annotation
flutter pub add --dev build_runner
flutter pub add --dev freezed
# if using freezed to generate fromJson/toJson, also add:
flutter pub add json_annotation
flutter pub add --dev json_serializable

Article json:

Setup extension Json to Dart Model Link homepage: https://marketplace.visualstudio.com/items?itemName=hirantha.json-to-dart cho visual studio code
Nếu bạn định sử dụng Freezed kết hợp với json_serializable, thì các phiên bản gần đây của json_serializable và meta có thể yêu cầu bạn tắt cảnh báo không hợp lệ.
Để làm điều đó, bạn có thể thêm phần sau vào file analysis_options.yaml at the root of your project:


analyzer:
  errors:
    invalid_annotation_target: ignore

Copy json data vào visual studio code sau đó chọn all code json (ctrl + a )

Tiếp theo chọn View->Command Palate hay nhấn tổ hợp phím tắt Ctrl+shift+p sau đó chọn JSON to Dart: From Selection to Code Generation Class

Tiếp theo đặt tên class là : Articles

Tiếp theo chọn Freezed:

Tiểp theo chọn folder models:

Tiếp theo run lệnh sau ở TERMINAL nếu không tự đông run:


flutter pub run build_runner build --delete-conflicting-outputs

Sau khi run thư mục models sẽ tạo thêm folder articles gồm các file sau:

Các bạn chỉ cần chú ý 2 file là article.dartsource.dart chỉnh sửa 2 file này và chạy lại lệnh:


flutter pub run build_runner build --delete-conflicting-outputs

Freezed thực hiện một lượng lớn công việc đáng kinh ngạc cho chúng ta. Nó tạo ra, mà không cần chúng ta làm bất cứ điều gì:


toString() method
==operator
hashCode getter variable
copyWith() method
toJson() method

Link code demo: in here