Jak*_*icz 13 size widget flutter
有什么方法可以测量尚未构建的小部件的尺寸,但这只是一个变量示例:
列 myColumn = Column(children[......]);
myColumn.iWouldLikeToGetItsHeightAndWidth();
迭代一下,评论中提到的帖子似乎是您正在寻找的解决方案。正如答案中提到的:
\n\n\n要获取屏幕上小部件的大小/位置,您可以使用 GlobalKey\n 获取其 BuildContext,然后查找该特定\n小部件的 RenderBox,其中将包含其全局位置和渲染大小。
\n只需要注意一件事:如果未呈现小部件,则该上下文可能不存在。这可能会导致 ListView 出现问题,因为\n只有在可能可见的情况下才会呈现小部件。
\n另一个问题是,您无法在构建调用期间获取小部件的 RenderBox,因为小部件尚未渲染。
\n
为了更好地理解它,您可以访问此博客中的示例。看一下演示代码:
\n\n\nRun Code Online (Sandbox Code Playgroud)\n\n_getSizes() {\n }\n\n _getPositions(){\n }\n\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n ),\n body: Column(\n children: <Widget>[\n Flexible(\n flex: 2,\n child: Container(\n color: Colors.red,\n ),\n ),\n Flexible(\n flex: 1,\n child: Container(\n color: Colors.purple,\n ),\n ),\n Flexible(\n flex: 3,\n child: Container(\n color: Colors.green,\n ),\n ),\n Spacer(),\n Padding(\n padding: const EdgeInsets.only(bottom: 8.0),\n child: Row(\n mainAxisAlignment: MainAxisAlignment.spaceAround,\n crossAxisAlignment: CrossAxisAlignment.center,\n children: <Widget>[\n MaterialButton(\n elevation: 5.0,\n padding: EdgeInsets.all(15.0),\n color: Colors.grey,\n child: Text("Get Sizes"),\n onPressed: _getSizes,\n ),\n MaterialButton(\n elevation: 5.0,\n color: Colors.grey,\n padding: EdgeInsets.all(15.0),\n child: Text("Get Positions"),\n onPressed: _getPositions,\n )\n ],\n ),\n )\n ],\n ),\n );\n }\n
在此示例中,重点关注红色面板:
\n\n\n获取 Widget 的大小 为此,我们需要 Widget 有一个 Key,为此我们创建一个 GlobalKey 并将其分配给我们的
\n小部件。
\nRun Code Online (Sandbox Code Playgroud)\n//creating Key for red panel\nGlobalKey _keyRed = GlobalKey();\n...\n//set key\n Flexible(\n flex: 2,\n child: Container(\n key: _keyRed,\n color: Colors.red,\n ),\n ),\n一旦我们的 Widget 已经有了一个 Key,我们就可以使用这个 Key 通过以下方式获取大小:
\nRun Code Online (Sandbox Code Playgroud)\n_getSizes() {\n final RenderBox renderBoxRed = _keyRed.currentContext.findRenderObject();\n final sizeRed = renderBoxRed.size;\n print("SIZE of Red: $sizeRed");\n }\n如果我们按下“获取尺寸”按钮,\xe2\x80\x99 将在控制台中得到以下结果:
\nRun Code Online (Sandbox Code Playgroud)\nflutter: SIZE of Red: Size(375.0, 152.9)\n现在我们知道我们的红色面板的宽度为 375.0,高度为 152.9
\n
| 归档时间: |
|
| 查看次数: |
7409 次 |
| 最近记录: |