flutter_piper 0.1.1
flutter_piper: ^0.1.1 copied to clipboard
Flutter widgets for Piper State with lifecycle-aware ViewModel scopes, automatic dependency tracking, builders, listeners, and effects.
Flutter Piper #
Lifecycle-aware Flutter widgets for Piper State.
Use plain Dart ViewModels in Flutter with auto-tracked rebuilds and cleanup owned by the widget scope.
Installation #
flutter_piper re-exports the complete piper_state API, so Flutter apps only
need one direct dependency:
dependencies:
flutter_piper: ^0.1.0
Quick Example #
// Provide ViewModels
ViewModelScope(
create: [() => CounterViewModel()],
child: MyApp(),
)
// Access and build UI
final vm = context.vm<CounterViewModel>();
vm.count.build((count) => Text('$count'));
Widgets #
ViewModelScope #
Provides ViewModels to the widget tree:
ViewModelScope(
create: [
() => AuthViewModel(authRepo),
() => TodosViewModel(todoRepo),
],
child: MyApp(),
)
Scoped<T> #
Single typed ViewModel with builder:
Scoped<DetailViewModel>(
create: () => DetailViewModel(id),
builder: (context, vm) => DetailPage(),
)
Named Scopes #
Share ViewModels across routes:
ViewModelScope.named(
name: 'checkout',
create: [() => CheckoutViewModel()],
child: CheckoutFlow(),
)
// Access by name
context.vm<CheckoutViewModel>(scope: 'checkout');
Building UI #
// Rebuild on change
vm.count.build((count) => Text('$count'))
// Side effects
vm.isDeleted.listen(
onChange: (prev, curr) {
if (curr) Navigator.of(context).pop();
},
child: MyWidget(),
)
Documentation #
📖 Full docs · GitHub · piper_state
Want to watch lifecycle cancellation happen? Run the
Piper Search Race demo:
the deliberately slow f task is cancelled before it can overwrite the
faster flutter result.
License #
MIT