Flutter:无法在初始化中添加本地功能

Flutter: Unable to add local function in initialization

如果这是一个简单的修复,请原谅我,但我是 Flutter 的新手,我很难找到解决方案。我有一个无状态小部件 MySpriteGame,它使用 SpriteWidget。我有另一个名为 SpriteSquare 的小部件,也是无状态的,我正在尝试向其添加事件处理程序。我将在最后添加两者的代码(减去所有导入以最大化 space)。

想要将一个函数从 MySpriteGame 传递到 SpriteSquare,基本上是将 _whitesquareSpriteSquare 的一个实例添加到 _background,另一个实例SpriteSquare 个。我遇到的问题如下。

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

我知道这是因为我无法在这些变量的初始化中添加将 _whitesquare 添加到 _background 的函数。如果 MySpriteGame 是有状态的,我可能会在 initState 之类的地方添加监听器。我想知道是否有一种方法可以在初始化后将这些事件侦听器添加到 SpriteSquare 节点,而不必使这个小部件有状态?

sprite_square.dart

class SpriteSquare extends NodeWithSize {
  
  Color color;
  Function handler;

  SpriteSquare(size, this.color, this.handler) : super(size){
    userInteractionEnabled = true;
  }

  @override handleEvent(SpriteBoxEvent event) {
    handler(event);
    return true;
  }

  @override
    Future<void> paint(Canvas canvas) async {
      applyTransformForPivot(canvas);
      canvas.drawRect(
        new Rect.fromLTWH(0.0, 0.0, size.width, size.height),
        Paint()..color = color
      );
    }
}

sprite_game.dart

class MySpriteGame extends StatelessWidget {

  final _background = SpriteSquare(const Size(400.0, 400.0), const Color(0xFF000000), (e)=>handleEvent(e));
  final _whitesquare = SpriteSquare(const Size(200.0, 200.0), const Color(0xFFFFFFFF), (e)=>handleEvent(e));

  MySpriteGame({Key? key}) : super(key: key);

  handleEvent(SpriteBoxEvent event) {
    _background.addChild(_whitesquare);
    return true;
  }

  handleRemoveSelf(SpriteBoxEvent event){
    print(event);
    return true;
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        child: 
          SpriteWidget(
            _background
          )
      ),
    );
  }
}

编辑

我觉得我可能会在 Widget build... 之后和 return Center... 之前添加函数。我可以 _background.handleEvent() 但我不确定如何将上面 handleEvent 的逻辑添加到这个 handleEvent.

我不确定这是否是最佳做法,但我能够使用 ()=>{} 作为处理程序来初始化 _background。然后在 Widget build... 之后我有行 _background.handler = handleAdd; 这使我能够将 handleAdd 中的逻辑应用到 handleEvent 这个 SpriteSquare.[=19 实例=]

我现在可以将 _whitesquare 添加到 _background