【问题标题】:Calculate height of Text widget at build在构建时计算文本小部件的高度
【发布时间】:2018-04-02 20:02:25
【问题描述】:

我正在尝试使用SliverPaddingSliverFixedExtentList 下添加填充以填充屏幕,并在屏幕底部添加Text.rich 小部件。计算列表的高度相当容易,因为我正在设置范围。但我也应该牢记Text.rich 小部件的高度。

我不确定如何在构建时计算Text.rich 小部件的高度,这可能吗?如果没有,有什么更好的方法?

我一直在使用以下代码:

  Widget build(BuildContext context) {
    double maxNonScrollableListSize = (MediaQuery.of(context).size.height - listPadding.bottom - listPadding.top - bottomFooterPadding.bottom - fontSize - 2);
    double totalChildHeight = childCount * itemExtent;
    double footerPadding = maxNonScrollableListSize > totalChildHeight ? maxNonScrollableListSize - totalChildHeight : 5.0;
    return new Scaffold(
      body: new Container(
        color: new Color.fromRGBO(50, 120, 176, 1.0),
        child: new CustomScrollView(
          slivers: <Widget>[
            new SliverPadding(
              padding: listPadding,
              sliver: new SliverFixedExtentList(
                itemExtent: itemExtent,
                delegate: new SliverChildBuilderDelegate(
                  (BuildContext context, int index) {
                    return new Card(
                      child: new Container(
                        child: new Center(child: new Text("Card $index")),
                      ),
                    );
                  },
                  childCount: childCount,
                ),
              ),
            ),
            new SliverPadding(
              padding: new EdgeInsets.only(bottom: footerPadding),
            ),
            new SliverToBoxAdapter(
              child: new Column(
                mainAxisSize: MainAxisSize.max,
                mainAxisAlignment: MainAxisAlignment.end,
                children: <Widget>[
                  new Container(child: new Text("ok", style: new TextStyle(fontSize: fontSize),))
                ],
              ),
            ),
            new SliverPadding(
              padding: bottomFooterPadding,
            ),
          ],
        )
      ),
    );
  }

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    没有。这是不可能的。

    小部件系统的全部意义在于使小部件具有自主性。在任何情况下,他们都不应该在构建时知道他们孩子的大小。唯一的例外是该大小是预定义的(例如使用PreferredSizeWidget)。

    如果你确定你需要它。那么你要创建的不是一个小部件,而是一个RenderBox。这是颤振的较低层之一。

    【讨论】:

    • 有没有更好的方法来解决我的问题,不包括计算高度?我只是想要一个带有页脚的 Listview,如果 listview 没有占据整个屏幕(即它有 3 个项目),它的页脚一直位于屏幕底部。
    • 考虑创建另一个问题,详细说明您要达到的目标。因为这是一个不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多