🧩 Open Source · Intermediate

flutter_bloc: event và state rõ ràng cho ứng dụng lớn

flutter_bloc: event và state rõ ràng cho ứng dụng lớn

flutter_bloc đáng chú ý vì nó giải quyết Cubit, Bloc, BlocListener và chuyển trạng thái dễ dự đoán. Bài này trình bày cách đặt package vào đúng boundary của một ứng dụng Flutter production thay vì chỉ copy một snippet vào màn hình.

FlutterCook open-source showcase

Package này sở hữu phần nào?

  • Giữ API của package ở một adapter hoặc feature boundary có tên rõ ràng.
  • Đưa lifecycle, lỗi và trạng thái loading vào contract mà UI có thể kiểm thử.
  • Chỉ expose capability cần thiết; đừng để toàn app phụ thuộc vào chi tiết triển khai.

Snippet bắt đầu

sealed class CheckoutState {}
final class CheckoutIdle extends CheckoutState {}
final class CheckoutSubmitting extends CheckoutState {}
final class CheckoutDone extends CheckoutState {}

class CheckoutCubit extends Cubit<CheckoutState> {
  CheckoutCubit(this.repository) : super(CheckoutIdle());
  final CheckoutRepository repository;
  Future<void> submit(Order order) async {
    emit(CheckoutSubmitting());
    await repository.submit(order);
    emit(CheckoutDone());
  }
}

Checklist trước khi ship

  1. Đọc README và changelog của package đúng version đang pin.
  2. Viết một test cho lifecycle, lỗi và hành vi khi app về background.
  3. Kiểm tra Android, iOS, web hoặc desktop đúng platform mà app hỗ trợ.
  4. Ghi lại owner, upgrade cadence và kế hoạch rollback trong repo.

Pitfall hay gặp

Đặt side effect trong BlocListener và render trong BlocBuilder; trộn hai nơi dễ chạy lặp.

Kết luận

Thư viện OSS tốt không thay thế kiến trúc. Nó giúp một boundary khó trở nên rõ ràng, có thể quan sát và dễ thay thế hơn.

#Flutter#OpenSource#Bloc