flutter - 如何在渲染之前获取文本小部件的宽度

标签 flutter dart flutter-layout

我正在尝试为消息传递应用程序构建一个MessageBubble。这是我的MessageBubble包含一行时的样子:

One line text

目前,当MessageBubble包含多行时,它的外观将如下所示:

Multiline text

但是我想确定在构建过程中是否在文本中显示两行或更多行,所以我可以像这样将必要的填充添加到顶部和底部(这是硬编码的示例):

enter image description here

有没有一种方法可以让我获得在构建过程中显示的行数或每行的宽度,然后我可以决定是否在底部和顶部添加一些填充?

到目前为止,这是我的代码:

import 'package:flutter/material.dart';

class BubbleTest extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DecoratedBox(
      decoration: BoxDecoration(
        color: Colors.grey[350],
        borderRadius: BorderRadius.all(Radius.circular(20.0)),
      ),
      child: Padding(
        padding: EdgeInsets.only(right: 15.0),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.end,
          children: <Widget>[
            CircleAvatar(
              backgroundColor: Colors.grey,
              child: Icon(
                Icons.person,
                color: Colors.white,
              ),
            ),
            ConstrainedBox(
              constraints: BoxConstraints(
                minHeight: 40.0,
                maxWidth: 250.0,
              ),
              child: Align(
                heightFactor: 1,
                widthFactor: 1,
                alignment: Alignment.center,
                child: Padding(
                  padding: EdgeInsets.only(left: 15.0),
                  child: Text(
                    'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla lacus libero, molestie vitae dui non, venenatis maximus sem.',
                    style: TextStyle(
                      fontSize: 18.0,
                    ),
                    textWidthBasis: TextWidthBasis.longestLine,
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

最佳答案

如果不确定如何根据大小来布局窗口小部件,可以使用LayoutBuilder。

 LayoutBuilder(
     builder: (context, constraints){
          Padding(
    //based on size if you want to put up your spacing then
                  padding: (constraints.maxHeight < 20)? EdgeInsets.only(left: 15.0): EdgeInsets.symmetric(horizontal: 15.0, vertical: 15.0),
                  child: Text(
                    'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla lacus libero, molestie vitae dui non, venenatis maximus sem.',
                    style: TextStyle(
                      fontSize: 18.0,
                    ),
                    textWidthBasis: TextWidthBasis.longestLine,
                ),
            ),
        }
    ) 

关于flutter - 如何在渲染之前获取文本小部件的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60889050/

相关文章:

flutter - Azure DevOps 项目直接发布到 google play 控制台

javascript - 无法在 flutter webview 中打开 tel、mailto、whatsapp 链接?

dart - Flutter:继承的 Widget 和路由

android - 如何在Flutter中设置TextSpan的圆角

dart - 如何在 Flutter 中为文本添加阴影

flutter - 我该如何着手在 flutter 中完成这样的事情?

flutter - 如何使用 Stack 进入 CircleAvatar

Flutter 在 ListView 顶部显示小部件,可以在滚动时滑动

android - Flutter:共享存储(存储访问框架 API)隐藏子目录中文件的权限不起作用

flutter - 找不到参数的方法 id() [com.google.gms.google-services]