1. VoidCallback
-
定义:一个没有参数且没有返回值的函数类型,通常用于没有数据传递的操作。
-
用途:一般用于按钮点击、事件触发等不需要传递额外数据的场景。
-
示例:
typedef VoidCallback = void Function(); // 用法 VoidCallback onPressed; onPressed = () { print('Button clicked'); }; -
常见场景:
- 按钮点击事件。
- 滑动结束时触发的事件(如
onScrollEnd)。 - 动画完成后的回调。
ElevatedButton( onPressed: onPressed, child: Text("Click Me") );
2. ValueChanged<T>
-
定义:接收一个类型为
T的参数并返回void的函数类型,通常用于传递数据(如布尔值、字符串、数值等)。 -
用途:在 Flutter 中经常用于文本框输入变化、开关状态切换等场景,允许传递一个值进行处理。
-
示例:
typedef ValueChanged<T> = void Function(T value); // 用法 ValueChanged<bool> onChanged; onChanged = (bool value) { print('The value is: $value'); }; // TextField 变化时回调 TextField( onChanged: (value) { onChanged(value); }, ); -
常见场景:
- 文本框输入变化(如
TextField.onChanged)。 - 开关切换(如
Switch.onChanged)。 - 选择器(如
DropdownButton、Radio等选择框的值变化)。
- 文本框输入变化(如
3. Function(T)
-
定义:接收一个类型为
T的参数并返回void的函数类型。Function是 Dart 中更通用的函数类型。 -
用途:与
ValueChanged<T>类似,但是Function(T)是更宽泛的类型,可以用于处理任何接受T类型参数的函数。 -
示例:
Function<String> onChanged; onChanged = (value) { print('Changed to: $value'); }; -
常见场景:
- 可用于自定义回调函数类型,适用于不专门为某种数据设计回调的情况。
4. AsyncCallback
-
定义:表示一个异步函数类型,通常用于异步任务的回调,返回
Future<void>。 -
用途:用于处理异步操作后的回调,例如数据加载、网络请求等。
-
示例:
typedef AsyncCallback = Future<void> Function(); // 用法 AsyncCallback fetchData; fetchData = () async { await Future.delayed(Duration(seconds: 2)); print('Data fetched'); }; -
常见场景:
- 网络请求完成后的回调。
- 异步加载数据后的回调。
- 定时器完成后的回调。
5. GestureTapCallback
-
定义:表示一个点击事件回调函数,通常用于
Tap手势的回调。 -
用途:用于监听点击事件,触发一些操作。
-
示例:
typedef GestureTapCallback = void Function(); // 用法 GestureTapCallback onTap; onTap = () { print('Tapped'); }; GestureDetector( onTap: onTap, child: Container( width: 100, height: 100, color: Colors.blue, ), ); -
常见场景:
GestureDetector的点击事件。- 按钮的点击事件(
ElevatedButton,TextButton等)。
6. VoidCallback 和 ValueChanged<T> 结合
-
定义:
VoidCallback用于没有参数的事件回调,而ValueChanged<T>用于传递值的回调,两者结合使用可以处理更复杂的事件。 -
用途:在处理复杂事件时,既有没有参数的操作,也有需要传递值的操作。
-
示例:
ValueChanged<bool> onChanged; VoidCallback onReset; onChanged = (bool value) { print('Value changed to: $value'); }; onReset = () { print('Reset operation'); }; -
常见场景:
- 在同一个界面中,既需要处理操作(点击重置按钮),也需要传递值(例如输入框变化)。
7. ChangeNotifierListener 和 ValueListenable
-
定义:
ChangeNotifier用于实现数据的变化通知,ValueListenable是一个可以监听某个值变化的类型。 -
用途:用于状态管理,监听某些数据的变化并进行相应处理。
-
示例:
class Counter extends ChangeNotifier { int _count = 0; int get count => _count; void increment() { _count++; notifyListeners(); } } class CounterWidget extends StatelessWidget { final Counter counter = Counter(); @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (_) => counter, child: Consumer<Counter>( builder: (context, counter, _) { return Text('Count: ${counter.count}'); }, ), ); } } -
常见场景:
- 在状态管理中(如
Provider、ChangeNotifier)。 - 监听 UI 中某些数据的变化(例如,
Listenable用于监听值变化)。
- 在状态管理中(如
8. Function() 或 Callback(无参数回调)
-
定义:常用于不需要参数的通用回调函数类型。
-
用途:常用于处理简单的事件触发,不需要额外的值传递。
-
示例:
Function() callback; callback = () { print('Callback executed'); }; callback(); -
常见场景:
- 无参数的事件回调,如页面销毁时的操作等。
总结
VoidCallback:无参数无返回值,适用于简单事件。ValueChanged<T>:带参数无返回值,常用于值变化的事件。Function(T):通用函数类型,用于处理接受某个类型参数的函数。AsyncCallback:异步回调,常用于异步任务完成后的处理。GestureTapCallback:点击事件回调,常用于GestureDetector。ChangeNotifierListener和ValueListenable:用于状态管理,监听数据变化。