我正在创建一个滑块小部件的自定义小部件,其中有onChange的功能

我不知道如何将此函数传递给自定义小部件,因为它有参数

当一个函数没有参数时,

喜欢

final VoidCallBack ontap;

class CustomSlider extends StatelessWidget {
  final double value;
// how to pass voidcallback with argument here
  const CustomSlider({Key? key,required this.value}) : 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: (dynamic value) {
// how to deal with this function
      },
    );

  }
}

推荐答案

若要将带有参数的函数传递给Flight中的自定义小部件,可以将函数类型定义为自定义小部件中的参数.

在您的示例中,由于onChanged函数将动态值作为参数并返回VALID,因此您可以在CustomSlider小部件中按如下方式定义它:

typedef ValueChanged<T> = void Function(T value);

class CustomSlider extends StatelessWidget {
  final double value;
  final ValueChanged<dynamic>? onChanged;

  const CustomSlider({
    Key? key,
    required this.value,
    this.onChanged,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Slider(
      value: value,
      min: 50,
      max: 250.0,
      onChanged: (newValue) {
        if (onChanged != null) {
          onChanged!(newValue);
        }
      },
    );
  }
}

现在,当您使用CustomSlider时,可以向onChanged参数传递函数:

CustomSlider(
  value: _sliderValue,
  onChanged: (newValue) {
    setState(() {
      _sliderValue = newValue;
    });
  },
)

在本例中,_sliderValue是一个状态变量,只要滑块值发生变化,该变量就会更新.setState调用确保小部件使用新的滑块值重新构建.请注意,您可能希望确保传递给onChanged的函数需要Slider将发出的类型的参数(在本例中可能是Double).

Flutter相关问答推荐

Flutter日期和时间 Select 器未显示

Firebase Auth异常未被catch捕获

ListTile未正确显示在flutter中

为什么他们实例化类,然后丢弃该实例?

Riverpod状态管理-在调用请求时更新用户界面

如何知道当前屏幕是否处于抖动状态?

从超级应用程序启动时,Flutter 小应用程序中未加载资源

如何在Ffltter 3.16中设置标准的提升按钮主题?

如何在Flutter中将背景 colored颜色 更改为黑色?

在带有 flutter 的 Native Android 中,EventChannel.EventSink 始终为 null

显示图像的放大部分

使用Flutter项目设置Firebase遇到困难?这些解决方案或许能帮到你!

更改下拉按钮的背景 colored颜色 - flutter

Freezed+BLoc 如何从 BLoc Listener 查看当前状态和特定状态的变量

Cloud firestore:如何使用 map 对象创建和更新嵌套数组

无效的 depfile: C:\xxx\xxx\Flutter\project_name\.dart_tool\flutter_build\df4b308df1ee4bce22c56c71751554d1\kernel_snapshot.d 无效

如何按值对列表中的 map 进行排序

如何使按钮被选中?

Flutter:如何将列表转换为字符串?

Textfield 和 MasonryGrid 给出错误(垂直视口的高度没有限制)