Vaani/lib/shared/hooks.dart
2025-12-26 16:12:30 +08:00

50 lines
1.1 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
// useEffect((){}, []) 组件构建之后执行,但并不保证布局已经完成
// 自定义
// useLayoutEffect((){}) 组件布局完成之后执行 仅执行一次
void useInterval(VoidCallback callback, Duration delay) {
final savedCallback = useRef(callback);
savedCallback.value = callback;
useEffect(
() {
final timer = Timer.periodic(delay, (_) => savedCallback.value());
return timer.cancel;
},
[delay],
);
}
void useTimer(VoidCallback callback, Duration delay) {
final savedCallback = useRef(callback);
savedCallback.value = callback;
useEffect(
() {
final timer = Timer(delay, savedCallback.value);
return timer.cancel;
},
[delay],
);
}
void useLayoutEffect(VoidCallback callback) {
final savedCallback = useRef(callback);
savedCallback.value = callback;
useEffect(
() {
WidgetsBinding.instance.addPostFrameCallback((_) {
savedCallback.value();
});
return null;
},
[],
);
}