2024-06-16 22:24:32 -04:00
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
|
|
|
|
|
2025-12-26 16:12:30 +08:00
|
|
|
// useEffect((){}, []) 组件构建之后执行,但并不保证布局已经完成
|
|
|
|
|
|
|
|
|
|
// 自定义
|
|
|
|
|
// useLayoutEffect((){}) 组件布局完成之后执行 仅执行一次
|
|
|
|
|
|
2024-06-16 22:24:32 -04:00
|
|
|
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],
|
|
|
|
|
);
|
|
|
|
|
}
|
2024-08-20 10:14:07 -04:00
|
|
|
|
|
|
|
|
void useTimer(VoidCallback callback, Duration delay) {
|
|
|
|
|
final savedCallback = useRef(callback);
|
|
|
|
|
savedCallback.value = callback;
|
|
|
|
|
|
|
|
|
|
useEffect(
|
|
|
|
|
() {
|
|
|
|
|
final timer = Timer(delay, savedCallback.value);
|
|
|
|
|
return timer.cancel;
|
|
|
|
|
},
|
|
|
|
|
[delay],
|
|
|
|
|
);
|
|
|
|
|
}
|
2025-12-26 16:12:30 +08:00
|
|
|
|
|
|
|
|
void useLayoutEffect(VoidCallback callback) {
|
|
|
|
|
final savedCallback = useRef(callback);
|
|
|
|
|
savedCallback.value = callback;
|
|
|
|
|
|
|
|
|
|
useEffect(
|
|
|
|
|
() {
|
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
|
|
|
savedCallback.value();
|
|
|
|
|
});
|
|
|
|
|
return null;
|
|
|
|
|
},
|
|
|
|
|
[],
|
|
|
|
|
);
|
|
|
|
|
}
|