0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Sử Dụng Code Generation Provider Trong Flutter Riverpod Để Đơn Giản Hóa Quy Trình Phát Triển

Đăng vào 1 tuần trước

• 3 phút đọc

Giới Thiệu

Trong quá trình phát triển ứng dụng Flutter, việc lựa chọn loại provider phù hợp từ 7 loại khác nhau của Riverpod có thể khiến nhiều lập trình viên băn khoăn. Đặc biệt là khi phải phân vân giữa các loại như NotifierProviderStateNotifierProvider trong nhiều trường hợp. Điều này thường dẫn đến sự hoang mang vì mỗi loại provider được khuyên dùng cho các tình huống khác nhau.

Tuy nhiên, tác giả Remi Rousselet đã giới thiệu một phương pháp mới để sử dụng Riverpod với code generation, giúp giảm bớt gánh nặng cho các developer.

Cú Pháp Của Code Generation

Code generation trong Riverpod cho phép chúng ta khai báo các provider bằng cách sử dụng annotation @riverpod. Hầu hết các đoạn code còn lại sẽ được tự động tạo ra nhờ vào công cụ build_runner đã có sẵn trong Dart.

Cách Khai Báo Provider Mới

Trước đây, việc định nghĩa provider yêu cầu cú pháp phức tạp. Bây giờ, chúng ta chỉ cần viết như sau:

dart Copy
@riverpod
Future<User> fetchUser(FetchUserRef ref, {required int userId}) async {
    final json = await http.get('api/user/$userId');
    return User.fromJson(json);
}

Thay vì phải ngồi suy nghĩ kỹ lưỡng để chọn một trong các loại provider, bạn có thể dễ dàng tham khảo bảng dưới đây để chọn cho mình loại provider phù hợp nhất cho từng use case:

|Functional (Không thể cập nhật bằng public methods)|Class-Based (Có thể cập nhật bằng public methods)|
|---|---|---|
|Sync|||
|Async - Future|||
|Async - Stream|||

Tính Năng KeepAlive

Theo cách viết mới này, mặc định mọi provider sẽ tự động bị xóa sau khi không còn listener nào theo dõi. Để giữ cho provider luôn tồn tại, chúng ta có thể sử dụng annotation như sau:

dart Copy
@Riverpod(keepAlive: true)

Thêm Tham Số Cho Provider

Việc thêm tham số vào provider giờ đây trở nên đơn giản như thêm tham số cho hàm. Bạn có thể quàn tích thích hợp với cú pháp sau:

Với Functional Provider

dart Copy
@riverpod
String example(
    ExampleRef ref,
    int param1, {
    String param2 = 'foo',
}) {
    return 'Hello $param1 & param2';
}

Với Class-Based Provider

dart Copy
@riverpod
class Example extends _$Example {
    @override
    String build(
        int param1, {
        String param2 = 'foo',
    }) {
        return 'Hello $param1 & param2';
    }
    // Thêm các phương thức để thay đổi trạng thái
}

Ưu Điểm Của Code Generation

Việc chuyển từ cách làm cũ sang cách mới vẫn là tùy chọn, tuy nhiên, những ưu điểm sau sẽ giúp bạn dễ dàng quyết định:

  • Cú pháp dễ đọc, dễ học và linh hoạt hơn.
  • Giảm bớt nỗi lo trong việc lựa chọn provider phù hợp.
  • Cú pháp đơn giản hơn, giống như một hàm hoặc lớp tùy chỉnh.
  • Có thể truyền tham số không giới hạn, bao gồm tham số mặc định, tùy chọn hay có tên.
  • Tính năng hot-reload để code có trạng thái.
  • Nâng cao khả năng debug.
  • Một số tính năng chỉ khả dụng khi sử dụng code generation.

Nhược Điểm Cần Lưu Ý

Tuy nhiên, khi áp dụng vào các dự án thực tế, một số nhược điểm cần xem xét:

  • Code generation mới ra mắt gần đây vẫn còn ít ứng dụng thực tiễn, nên nguồn tài liệu tham khảo đa phần chỉ giới hạn trong tài liệu của Riverpod.
  • Trong thời đại AI, nhiều công cụ tạo mã tự động vẫn áp dụng theo kiểu cũ, dẫn đến việc khó khăn trong việc tìm kiếm mã lệnh phù hợp. Dù sao, trên Android Studio đã có plugin Flutter Riverpod Snippets, giúp việc viết mã nhanh hơn.

Những nhược điểm này chỉ mang tính tạm thời. Khi code generation trở nên phổ biến hơn, những vấn đề này sẽ được khắc phục, vì vậy hãy yên tâm khi áp dụng phương pháp này vào dự án của bạn.

Tham Khảo

🔔 Blog: henrytechie.com

☕️ Facebook: Henry Techie

☁️ TikTok: @henrytechie
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào