ease_generator 0.3.0
ease_generator: ^0.3.0 copied to clipboard
Code generator for ease_state_helper Flutter state management library. Generates providers and context extensions from @Ease() annotations.
Ease Generator #
Code generator for Ease State Helper.
Installation #
dependencies:
ease_state_helper: ^0.2.0
ease_annotation: ^0.2.0
dev_dependencies:
ease_generator: ^0.2.0
build_runner: ^2.4.0
Usage #
1. Annotate your ViewModel #
import 'package:ease_annotation/ease_annotation.dart';
import 'package:ease_state_helper/ease_state_helper.dart';
part 'counter_view_model.ease.dart';
@ease
class CounterViewModel extends StateNotifier<int> {
CounterViewModel() : super(0);
void increment() => state++;
}
2. Run generator #
dart run build_runner build
3. Use generated code #
import 'counter_view_model.dart';
void main() {
runApp(
CounterViewModelProvider(
child: const MyApp(),
),
);
}
// In widgets:
final counter = context.counterViewModel; // Watch (rebuilds on change)
context.readCounterViewModel().increment(); // Read (no rebuild)
Generated Files #
*.ease.dart- Provider widget and context extensions per ViewModel
What Gets Generated #
For each @ease annotated class, the generator creates:
{ClassName}Provider- StatefulWidget that manages the ViewModel lifecycle_{ClassName}Inherited- InheritedModel for efficient state propagation- Context extensions:
context.className- Watch state (rebuilds widget on changes)context.readClassName()- Read state without subscribingcontext.selectClassName((s) => s.field)- Selective rebuilds
Nesting Multiple Providers #
Use EaseScope to nest multiple providers:
void main() {
runApp(
EaseScope(
providers: [
(child) => CounterViewModelProvider(child: child),
(child) => UserViewModelProvider(child: child),
(child) => CartViewModelProvider(child: child),
],
child: const MyApp(),
),
);
}
Or nest them manually:
void main() {
runApp(
CounterViewModelProvider(
child: UserViewModelProvider(
child: CartViewModelProvider(
child: const MyApp(),
),
),
),
);
}
License #
MIT