我的问题的基础是有关构建益智游戏的本教程: 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);
}
我可以获取密钥,但是我不知道如何获取left
和top
,因为我不知道如何访问嵌套的小部件。
在进行一些研究时,有几个答案指向这个stackoverflow答案: How to get the height of a widget
因此,我尝试实现puzzlePieceKey
(请参见上文)。但是,再次:我不知道如何访问该参数。
我应该如何解决这个问题?