如何在Dart中定义带参数的默认函数?

fcipmucu  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(81)

我正在Flutter中开发一个移动的应用程序,在尝试将函数作为参数传递给小部件时遇到了一个问题。
更准确地说:

class Test extends StatefulWidget {
  final Function(bool) onChanged;
  const Test({Key key, this.onChanged}) : super(key: key);

  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  bool switchValue = false;
  @override
  Widget build(BuildContext context) {
    return Container(
        child: Switch(
            value: switchValue,
            onChanged: (bool value) {
              setState(() => switchValue = value);
              widget.onChanged(value);
            }));
  }
}

它抛出NoSuchMethodError:widget使用时未定义onChanged函数,“调用'call'方法为null”,onChanged参数如何定义默认函数,参数为可选,我试过:

  • () {}-不能将"Null Function()“类型的值分配给”dynamic Function(bool)“类型的变量。
  • (bool) {}-可选参数的缺省值必须为常量。

不使用默认值的解决方案有:

  • 在调用onChange参数之前检查它是否不为空,或者
  • 每次使用小部件时定义它-onChanged: (bool val) {}

如有任何建议,我们将不胜感激。

bf1o4zei

bf1o4zei1#

您可以像这样定义默认函数。

void emptyFunction(bool value) {
  if (value) {
    // do something
  } else {
    // do something
  }
}
const Test({Key key, this.onChanged = emptyFunction}) : super(key: key);

您可以在dartpad上查看一个示例代码来说明这一点。https://dartpad.dev/30fc0fdc02bec673779eebc733753c05

相关问题