Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 计算生成时文本小部件的高度_Dart_Flutter - Fatal编程技术网

Dart 计算生成时文本小部件的高度

Dart 计算生成时文本小部件的高度,dart,flutter,Dart,Flutter,我试图在SliverFixedExtentList下添加填充,以使用SliverPadding填充屏幕,并在屏幕底部添加Text.rich小部件。计算列表的高度相当容易,因为我正在设置范围。但我也应该记住Text.rich小部件的高度 我不确定如何在构建时计算Text.rich小部件的高度,这可能吗?如果不是的话,有什么更好的方法 我一直在使用以下代码: Widget build(BuildContext context) { double maxNonScrollableListS

我试图在
SliverFixedExtentList
下添加填充,以使用
SliverPadding
填充屏幕,并在屏幕底部添加
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,
            ),
          ],
        )
      ),
    );
  }
小部件构建(构建上下文){
double maxNonScrollableListSize=(MediaQuery.of(context).size.height-listPadding.bottom-listPadding.top-bottomFooterPadding.bottom-fontSize-2);
double totalChildHeight=childCount*itemExtent;
双页脚填充=maxNonScrollableListSize>totalChildHeight?maxNonScrollableListSize-totalChildHeight:5.0;
归还新脚手架(
主体:新容器(
颜色:新颜色。来自RGBO(50、120、176、1.0),
子项:新自定义滚动视图(
条子:[
新型轧棉机(
填充:列表填充,
条子:新的条子固定扩展列表(
itemExtent:itemExtent,
代表:新SliverChildBuilderDelegate(
(BuildContext上下文,int索引){
归还新卡(
子容器:新容器(
子项:新中心(子项:新文本(“卡片$index”)),
),
);
},
childCount:childCount,
),
),
),
新型轧棉机(
填充:仅限新边集(底部:页脚填充),
),
新型滑动双轴适配器(
子:新列(
mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.end,
儿童:[
新容器(子级:新文本(“确定”,样式:新文本样式(fontSize:fontSize),)
],
),
),
新型轧棉机(
填充:底部填充,
),
],
)
),
);
}

不,这是不可能的

widget系统的全部要点是使widget自治。在任何情况下,他们都不应该知道孩子的身高。唯一的例外是预定义了该大小(例如使用
PreferredSizeWidget


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

不,这是不可能的

widget系统的全部要点是使widget自治。在任何情况下,他们都不应该知道孩子的身高。唯一的例外是预定义了该大小(例如使用
PreferredSizeWidget


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

有没有更好的方法来解决我的问题,不包括计算高度?我只想使用一个页脚的ListVIEW,如果ListVIEW不占用所有的屏幕(即它有3个项目),它就在屏幕的底部有一个页脚。考虑创建一个关于你想要达到的细节的另一个问题。因为这是一个不同的问题。好吧,我问了:有没有更好的方法来解决我的问题,不包括计算高度?我只想使用一个页脚的ListVIEW,如果ListVIEW不占用所有的屏幕(即它有3个项目),它就在屏幕的底部有一个页脚。考虑创建一个关于你想要达到的细节的另一个问题。因为这是一个不同的问题。好吧,我做了: