/* * Copyright (c) 2024-2026 Fabian Freund. * * This file is part of WebLibre * (see https://weblibre.eu). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import 'package:flutter/widgets.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:weblibre/utils/sampled_value_notifier.dart'; /// A custom hook that creates a sampled ValueNotifier from another ValueNotifier ValueNotifier useSampledValueNotifier({ required ValueNotifier source, required Duration sampleDuration, }) { return use( _SampledValueNotifierHook( source: source, sampleDuration: sampleDuration, ), ); } /// Hook implementation for sampled ValueNotifier class _SampledValueNotifierHook extends Hook> { final ValueNotifier source; final Duration sampleDuration; const _SampledValueNotifierHook({ required this.source, required this.sampleDuration, }); @override _SampledValueNotifierHookState createState() => _SampledValueNotifierHookState(); } class _SampledValueNotifierHookState extends HookState, _SampledValueNotifierHook> { late SampledValueNotifier _sampledNotifier; @override void initHook() { super.initHook(); _sampledNotifier = SampledValueNotifier( source: hook.source, sampleDuration: hook.sampleDuration, ); } @override ValueNotifier build(BuildContext context) { return _sampledNotifier; } @override void dispose() { _sampledNotifier.dispose(); super.dispose(); } @override String get debugLabel => 'useSampledValueNotifier<$T>'; }