mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-02-16 14:29:35 +00:00
50 lines
1.1 KiB
Dart
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;
|
|
},
|
|
[],
|
|
);
|
|
}
|