Flutter Puzzle:访问嵌套窗口小部件的属性

时间:2019-09-06 19:57:00

标签: flutter dart

我的问题的基础是有关构建益智游戏的本教程: https://dragosholban.com/2019/02/16/building-a-puzzle-game-using-flutter/

我想添加一个“解决难题”按钮,单击该按钮即可将所有难题片移动到其原始位置。为此,我需要获取每个拼图的位置,而这正是我无法解决的问题。

当前,有状态小部件PuzzlePiece使用嵌套的Positioned将自己随机放置在屏幕上:

// PuzzlePiece.dart
class PuzzlePiece extends StatefulWidget {
  PuzzlePiece({
    Key key,
    ...
  }) : super(key: key);

  [...]

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

class _PuzzlePieceState extends State<PuzzlePiece> {
  double top;
  double left;
  GlobalKey puzzlePieceKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    ...
    if(top == null) { ... }
    if(left == null) { ... }

    return Positioned(
      key: puzzlePieceKey,
      top: top,
      left: left,
      ...
      child: GestureDetector(
        ...
        onPanUpdate: (dragUpdateDetails) {
            setState(() {
              if(-10 < top && top < 10 && -10 < left && left < 10) {
                top = 0;
                left = 0;
              }
            });
        },
        child: ClipPath(...),
      )
    );
  }
}

拼图块保存到List<Widget> pieces文件中的main.dart中,最终一个按钮调用一个solvePuzzle函数,该函数在列表中循环,并应该可以访问PuzzlePiece小部件的顶部和左侧定位的小部件参数:

  void solvePuzzle(){
    // e.g. get the 12th piece's key
    print(pieces[12].key);
  }

我可以获取密钥,但是我不知道如何获取lefttop,因为我不知道如何访问嵌套的小部件。

在进行一些研究时,有几个答案指向这个stackoverflow答案: How to get the height of a widget

因此,我尝试实现puzzlePieceKey(请参见上文)。但是,再次:我不知道如何访问该参数。

我应该如何解决这个问题?

0 个答案:

没有答案