Under which circumstances textAlign property works in Flutter?

前端 未结 8 1773
花落未央
花落未央 2020-12-07 18:19

In the code below, textAlign property doesn\'t work. If you remove DefaultTextStyle wrapper which is several levels above, textAlign s

8条回答
  •  有刺的猬
    2020-12-07 18:40

    DefaultTextStyle is unrelated to the problem. Removing it simply uses the default style, which is far bigger than the one you used so it hides the problem.


    textAlign aligns the text in the space occupied by Text when that occupied space is bigger than the actual content.

    The thing is, inside a Column, your Text takes the bare minimum space. It is then the Column that aligns its children using crossAxisAlignment which defaults to center.

    An easy way to catch such behavior is by wrapping your texts like this :

    Container(
       color: Colors.red,
       child: Text(...)
    )
    

    Which using the code you provided, render the following :

    The problem suddenly becomes obvious: Text don't take the whole Column width.


    You now have a few solutions.

    You can wrap your Text into an Align to mimic textAlign behavior

    Column(
      children: [
        Align(
          alignment: Alignment.centerLeft,
          child: Container(
            color: Colors.red,
            child: Text(
              "Should be left",
            ),
          ),
        ),
      ],
    )
    

    Which will render the following :

    or you can force your Text to fill the Column width.

    Either by specifying crossAxisAlignment: CrossAxisAlignment.stretch on Column, or by using SizedBox with an infinite width.

    Column(
      children: [
        SizedBox(
          width: double.infinity,
          child: Container(
            color: Colors.red,
            child: Text(
              "Should be left",
              textAlign: TextAlign.left,
            ),
          ),
        ),
      ],
    ),
    

    which renders the following:

    In that example, it is TextAlign that placed the text to the left.

提交回复
热议问题