For complex hooks, you can extend the Hook class. This approach provides access to lifecycle methods similar to a State class, such as initHook, dispose, and setState.
A common pattern is to hide the class inside a function that calls use().
Example of a hook that prints the time elapsed since it was created:
Result useMyHook() {
return use(const _TimeAlive());
}
class _TimeAlive extends Hook<void> {
const _TimeAlive();
@override
_TimeAliveState createState() => _TimeAliveState();
}
class _TimeAliveState extends HookState<void, _TimeAlive> {
DateTime start;
@override
void initHook() {
super.initHook();
start = DateTime.now();
}
@override
void build(BuildContext context) {}
@override
void dispose() {
print(DateTime.now().difference(start));
super.dispose();
}
}