在哪种情况下,textAlign属性可在Flutter中工作?

在下面的代码中,textAlign属性不起作用。如果您删除DefaultTextStyle上面几个级别的包装器,则textAlign开始

工作。

为什么以及如何确保它始终有效?

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {

// This widget is the root of your application.

@override

Widget build(BuildContext context) {

return new MaterialApp(

title: 'Flutter Demo',

theme: new ThemeData(

primarySwatch: Colors.blue,

),

home: new DefaultTextStyle(style: new TextStyle(fontSize: 10.0), child: new Column(children: <Widget>[

new Text("Should be left", textAlign: TextAlign.left,),

new Text("Should be right", textAlign: TextAlign.right,)

],))

);

}

}


雷米建议的两种方法显然都无法“在野外”工作。这

是我同时在行和列中嵌套的示例。第一种方法不

对齐,第二种方法使应用程序崩溃:

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {

// This widget is the root of your application.

@override

Widget build(BuildContext context) {

return new Directionality(textDirection: TextDirection.ltr, child: new DefaultTextStyle(

style: new TextStyle(fontSize: 10.0, color: Colors.white),

child: new Column(children: <Widget>[

new Row(children: <Widget>[

new Container(color: Colors.grey, child: new Column(children: <Widget>[

new Align(alignment: Alignment.centerLeft, child: new Text("left")),

new Align(alignment: Alignment.centerRight, child: new Text("right")),

],)),

new Container(color: Colors.grey, child: new Column(children: <Widget>[

new Align(alignment: Alignment.centerLeft, child: new Text("left")),

new Align(alignment: Alignment.centerRight, child: new Text("right")),

],)),

],),

/*new Row(children: <Widget>[

new Container(color: Colors.grey, child: new Column(children: <Widget>[

new SizedBox(width: double.infinity, child: new Text("left", textAlign: TextAlign.left,)),

new SizedBox(width: double.infinity, child: new Text("right", textAlign: TextAlign.right)),

],)),

new Container(color: Colors.grey, child: new Column(children: <Widget>[

new SizedBox(width: double.infinity, child: new Text("left", textAlign: TextAlign.left)),

new SizedBox(width: double.infinity, child: new Text("right", textAlign: TextAlign.right)),

],)),

],)*/]

)));

}

}


即,文本居中,而忽略Align元素的对齐方式。

回答:

DefaultTextStyle与问题无关。删除它仅使用默认样式,该样式比您使用的默认样式大得多,因此隐藏了

问题。

textAlignText当占用的空间大于实际内容时,将文本对齐。

问题是,在内Column,您Text仅占用最小的空间。它是那么Column,使用对齐其子crossAxisAlignment,其默认为center

捕获此类行为的一种简单方法是将文本包装成这样:

Container(

color: Colors.red,

child: Text(...)

)

使用您提供的代码,呈现以下内容:

问题突然变得很明显:Text不要占用整个Column宽度。

您现在有一些解决方案。

您可以将自己包装TextAlign模仿textAlign行为

Column(

children: <Widget>[

Align(

alignment: Alignment.centerLeft,

child: Container(

color: Colors.red,

child: Text(

"Should be left",

),

),

),

],

)

或者,您也可以强制Text填充Column宽度。

通过指定crossAxisAlignment: CrossAxisAlignment.stretchonColumnSizedBox与infinite一起使用width

Column(

children: <Widget>[

SizedBox(

width: double.infinity,

child: Container(

color: Colors.red,

child: Text(

"Should be left",

textAlign: TextAlign.left,

),

),

),

],

),

呈现以下内容:

在该示例中,就是TextAlign将文本放在左侧。

以上是 在哪种情况下,textAlign属性可在Flutter中工作? 的全部内容, 来源链接: utcz.com/qa/423839.html

回到顶部