将函数作为参数传递 Flutter - 无法在初始化程序中访问实例成员“_handleChange”

Pass function as argument Flutter - The instance member '_handleChange' can't be accessed in an initializer

我有一个 class 开头是这样的

class MyClass extends StatefulWidget {
  const MyClass({
    Key key,
    this.onChange,
  }) : super(key: key);

  final VoidCallback onChange;
  @override
  _MyClassState createState() => _MyClassState();
}

并且需要传递来自父级的 onChange。在父级中,我已经像下面这样定义了它,并且在我尝试将它传递给 MyClass 的地方有小部件变量,就像这样

class _ParentClassState extends State<ParentClass> {
  Widget myWidget = MyClass(onChange: _handleChange,);

  void _handleChange(arg) {
    setState(() {
      someStateVar = arg;
    });
  }
}

这个不行,有两个错误

The argument type 'void Function(dynamic)' can't be assigned to the parameter type 'dynamic Function()'. 
The instance member '_handleChange' can't be accessed in an initializer.

感谢任何帮助,谢谢

此外:是否有更好的架构来传递将设置父级中的状态变量的函数?

编辑:第一个错误已使用下面的 rstrelba 答案修复,现在仅保留

The instance member '_handleChange' can't be accessed in an initializer.

我正在尝试这个答案 并正在做

  Widget myWidget = MyClass(onChange: _ParentClassState()._handleChange,);

错误消失但超出堆栈

一些我的代码

来电者:

catTree = CatTree(onChangeCat: _onChangeCat);
'''
  _onChangeCat(int catId) {
    //
    debugPrint('_onChangeCat callback!');
  }

UI:

class CatTree extends StatefulWidget {
  final Function(int catId) onChangeCat;
  CatTree({this.onChangeCat});
}

状态:

class _CatTreeState extends State<CatTree> {
.....

>>>this.widget.onChangeCat(e.id);
}
// 1. you can define the type of function you want to pass as a type like this
typedef ChangeCallback<T> = void Function(T value);

class MyClass extends StatefulWidget {
  const MyClass({
    Key key,
    this.onChange,
  }) : super(key: key);

  // 2. and use it like this
  final ChangeCallback onChange;

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

第二个错误修复:

解决方案 1:

class _ParentClassState extends State<ParentClass> {
  Widget myWidget = MyClass(onChange: (arg) {
    setState(() {
      someStateVar = arg;
    });
  },
);
}

解决方案 2:

class _ParentClassState extends State<ParentClass> {
  Widget myWidget;

  void _handleChange(arg) {
    setState(() {
      someStateVar = arg;
    });
  }
  @override
  void initState(){
    super.initState();
    myWidget = MyClass(onChange: _handleChange);
  }
}