A premium reactive widget 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 build method is
implicitly tracked and
subscribed to. At the same time, you can call any hooks (like useFocusNode,
useTextEditingController, etc.)
within build.
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 build(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}'),
],
);
}
}
Constructors#
Methods#
View Methods
StatelessElement createElement()
Widget build(BuildContext context)
Subclasses override this method to define their widget tree.
For backward compatibility, this defaults to calling buildWidget.
Widget buildWidget(BuildContext context)
Subclasses override this method instead of build to define their widget tree.