Flutter中如何向自定义Widget传递带参数的函数?
如何在自定义Slider Widget中传递带参数的onChanged回调
要传递带参数的回调函数,你不需要用VoidCallback(它是无参数的),而是使用Flutter内置的**ValueChanged<T>**类型(或自定义函数类型),具体步骤如下:
1. 定义带参数的回调成员变量
在CustomSlider类中添加ValueChanged<double>类型的成员,因为SfSlider的onChanged返回的是double类型值(指定类型比用dynamic更规范):
final ValueChanged<double> onChanged;
2. 在构造函数中加入该参数
将这个回调参数加入构造函数并标记为required:
const CustomSlider({ Key? key, required this.value, required this.onChanged, }) : super(key: key);
3. 绑定回调到SfSlider的onChanged
直接把外部传入的onChanged函数绑定到SfSlider的对应回调上,也可以先在内部处理参数再调用:
onChanged: onChanged, // 若需内部处理参数,可改为: // onChanged: (double newValue) { // // 比如做参数范围校验 // onChanged(newValue.clamp(60, 240)); // },
修改后的完整代码
class CustomSlider extends StatelessWidget { final double value; final ValueChanged<double> onChanged; const CustomSlider({ Key? key, required this.value, required this.onChanged, }) : super(key: key); @override Widget build(BuildContext context) { return SfSlider.vertical( min: 50, max: 250.0, value: value, interval: 20, showTicks: true, showLabels: true, enableTooltip: true, minorTicksPerInterval: 1, onChanged: onChanged, ); } }
使用自定义Slider的示例
在父Widget中调用时,直接传递带参数的函数即可:
CustomSlider( value: _currentValue, onChanged: (newValue) { setState(() { _currentValue = newValue; // 这里添加你的业务逻辑 }); }, )
补充:自定义函数类型(可选)
如果不想用内置的ValueChanged,也可以自己定义函数类型:
typedef SliderChangedCallback = void Function(double value);
之后将成员变量改为final SliderChangedCallback onChanged;,用法和上述一致。
内容的提问来源于stack exchange,提问作者user22362195
相关产品推荐
相关产品推荐

