A premium reactive HookWidget that both supports Flutter Hooks and implicitly tracks and rebuilds on signal changes.
SignalHookWidget establishes a dynamic reactive context directly at the Flutter element layer.
Any signal accessed via .value inside the buildWidget
method is implicitly tracked and
subscribed to. At the same time, you can call any hooks (like useSignal,
useFocusNode, etc.)
within buildWidget.
This provides the ultimate developer experience, combining the power of implicit, boilerplate-free signal tracking with the rich lifecycle management of Flutter Hooks.
Dual Reactivity Example#
final globalCartCount = signal(0);
class MyDualWidget extends SignalHookWidget {
const MyDualWidget({super.key});
@override
Widget buildWidget(BuildContext context) {
// 1. Declare hooks seamlessly:
final controller = useTextEditingController();
final focusNode = useFocusNode();
final localCounter = useSignal(0);
// 2. Implicit tracking of external/global signals:
// No .watch(context) needed! Just accessing .value tracks it.
return Column(
children: [
TextField(controller: controller, focusNode: focusNode),
Text('Global Signal: ${globalCartCount.value}'),
Text('Local Signal: ${localCounter.value}'),
],
);
}
}