flutter_boilerplate_generator 2.3.0 copy "flutter_boilerplate_generator: ^2.3.0" to clipboard
flutter_boilerplate_generator: ^2.3.0 copied to clipboard

A Dart code generator for Flutter boilerplate: model, entity, hive, and cubit state. Generates JSON serialization, copyWith, value equality, entity/Hive mapping, and pattern-matching extensions.

example/lib/main.dart

import 'package:example/di/api_client.dart';
import 'package:example/di/app_config.dart';
import 'package:example/di/get_user_use_case.dart';
import 'package:example/di/user_data_source.dart';
import 'package:example/inject.config.dart';
import 'package:flutter_boilerplate_annotations/flutter_boilerplate_annotations.dart';

void main() {
  final container = ServiceContainer.instance;

  // Daftarkan semua dependency dari generated file
  configureContainer(container);

  _demonstrateSingleton(container);
  _demonstrateLazySingleton(container);
  _demonstrateFactory(container);
  _demonstrateNamed(container);
}

// ── @singleton ───────────────────────────────────────────────────────────────
// Instance dibuat SEKALI saat configureContainer dipanggil.
// Setiap get<T>() mengembalikan objek yang SAMA.
void _demonstrateSingleton(ServiceContainer container) {
  final a = container.get<AppConfig>();
  final b = container.get<AppConfig>();

  print('=== Singleton ===');
  print('a == b : ${identical(a, b)}'); // true — objek sama
  print('baseUrl: ${a.baseUrl}');
}

// ── @lazySingleton ───────────────────────────────────────────────────────────
// Instance dibuat SEKALI, tapi baru pada saat pertama kali get<T>() dipanggil.
// Pemanggilan berikutnya mengembalikan instance yang SAMA.
void _demonstrateLazySingleton(ServiceContainer container) {
  // Pertama kali dipanggil → UserDataSource dibuat di sini
  final a = container.get<UserDataSource>();
  // Kedua kali → kembalikan instance yang sudah ada
  final b = container.get<UserDataSource>();

  print('\n=== LazySingleton ===');
  print('a == b : ${identical(a, b)}'); // true — objek sama
  print('dataSource: $a');
}

// ── @injectable (factory) ────────────────────────────────────────────────────
// Instance BARU dibuat setiap kali get<T>() dipanggil.
// Cocok untuk use case atau presenter yang punya state sendiri per-penggunaan.
void _demonstrateFactory(ServiceContainer container) {
  final a = container.get<GetUserUseCase>();
  final b = container.get<GetUserUseCase>();

  print('\n=== Factory ===');
  print('a == b : ${identical(a, b)}'); // false — objek berbeda
  a.call(1);
  b.call(2);
}

// ── Named registration ───────────────────────────────────────────────────────
// Ketika ada lebih dari satu instance dari tipe yang sama,
// gunakan name: untuk membedakannya.
void _demonstrateNamed(ServiceContainer container) {
  // Resolve berdasarkan nama
  final authClient   = container.get<ApiClient>(name: 'auth');
  final publicClient = container.get<ApiClient>(name: 'public');

  print('\n=== Named ===');
  print('authClient  : $authClient');
  print('publicClient: $publicClient');
  print('sama        : ${identical(authClient, publicClient)}'); // false — beda instance
  print('auth sama dg dirinya: ${identical(authClient, container.get<ApiClient>(name: "auth"))}'); // true — lazySingleton
}
1
likes
130
points
99
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A Dart code generator for Flutter boilerplate: model, entity, hive, and cubit state. Generates JSON serialization, copyWith, value equality, entity/Hive mapping, and pattern-matching extensions.

Homepage

License

MIT (license)

Dependencies

analyzer, build, flutter_boilerplate_annotations, glob, source_gen

More

Packages that depend on flutter_boilerplate_generator