Flutter Hooks 是 Flutter 中用于管理状态和副作用的工具,类似于 React Hooks。它通过函数式组件简化状态管理,减少样板代码。以下是核心用法:
1. 安装
在 pubspec.yaml 中添加依赖:
dependencies:
flutter_hooks: ^0.20.0
2. 基本 Hooks
-
useState:管理局部状态。
final counter = useState(0); // 初始值 0
// 使用:counter.value,更新:counter.value++
-
useEffect:处理副作用(如 API 调用、订阅)。
useEffect(() {
// 副作用逻辑
return () => cleanup; // 可选清理函数
}, [dependencies]); // 依赖项列表
-
useMemoized:缓存计算结果。
final expensiveValue = useMemoized(() => heavyComputation(a, b), [a, b]);
-
useRef:创建可变引用。
final ref = useRef(initialValue);
// 访问:ref.value
3. 示例:计数器
import 'package:flutter_hooks/flutter_hooks.dart';
class CounterExample extends HookWidget {
@override
Widget build(BuildContext context) {
final counter = useState(0);
return Scaffold(
body: Center(
child: Text('Count: ${counter.value}'),
),
floatingActionButton: FloatingActionButton(
onPressed: () => counter.value++,
child: Icon(Icons.add),
),
);
}
}
4. 自定义 Hooks
将可复用逻辑封装为自定义 Hook:
// 自定义 Hook
ValueNotifier<bool> useToggle(bool initial) {
final state = useState(initial);
return ValueNotifier(state.value);
}
// 使用
final isOn = useToggle(false);
5. 规则
- 仅在
HookWidget 的 build 方法或其他 Hooks 中调用 Hooks。
- 不要在循环或条件语句中使用 Hooks。
优势
- 简洁性:减少
StatefulWidget 的样板代码。
- 可复用性:逻辑易于提取和共享。
- 性能优化:通过依赖项控制更新。
通过 Hooks,可以更高效地构建响应式 Flutter 应用。