美文网首页
解决Text的overflow属性不生效的问题

解决Text的overflow属性不生效的问题

作者: 小鱼爱记录 | 来源:发表于2019-02-15 19:34 被阅读16次

今天学习Flutter的Text组件时,遇到了一个问题:Text的overflow: TextOverflow.ellipsis属性不生效

目前界面如下:


我想要星标后面的文字在很长的时候,显示为省略号,于是给Text设置了overflow: TextOverflow.ellipsis

class _LayoutPageState extends State<LayoutPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("LayoutPage")),
      body: Center(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Icon(
              Icons.star,
              size: 16.0,
              color: Colors.grey,
            ),
            Padding(padding: new EdgeInsets.only(left: 5.0)),
            Text(
              "100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000",
              style: new TextStyle(color: Colors.grey, fontSize: 14.0),
              overflow: TextOverflow.ellipsis,
              maxLines: 1,
            )
          ],
        ),
      ),
    );
  }
}

结果却提示Text的布局边界溢出了

最开始,我在Text的外面包了个Expended

class _LayoutPageState extends State<LayoutPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("LayoutPage")),
      body: Center(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Icon(
              Icons.star,
              size: 16.0,
              color: Colors.grey,
            ),
            Padding(padding: new EdgeInsets.only(left: 5.0)),
            Expanded(
              child: Text(
                "100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000",
                style: new TextStyle(color: Colors.grey, fontSize: 14.0),
                overflow: TextOverflow.ellipsis,
                maxLines: 1,
              ),
            )
          ],
        ),
      ),
    );
  }
}

显示结果是正常的


但是,当Text的文本很短时,我希望图标和文字居中,现在却是在最左边


所以Expanded的方案失败。通过这,我们也能看出:

凡是添加了Expanded的组件,都会被撑大到全屏,从而导致Row的主轴居中失效。

后来在朋友的提示下,我用Container设置指定宽度的方式,实现了这个需求:

class _LayoutPageState extends State<LayoutPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("LayoutPage")),
      body: Center(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Icon(
              Icons.star,
              size: 16.0,
              color: Colors.grey,
            ),
            Padding(padding: new EdgeInsets.only(left: 5.0)),
            Container(
              width: 60,
              child: Text(
                "1000",
                style: new TextStyle(color: Colors.grey, fontSize: 14.0),
                overflow: TextOverflow.ellipsis,
                maxLines: 1,
              ),
            )
          ],
        ),
      ),
    );
  }
}

短文本显示:


长文本显示:


虽然不是完全符合我的需求(屏幕宽度还有,但是却省略文字了),但是也在一定程度上满足了。

记录本次解决问题的流程,主要是想提醒自己一定要熟悉Flutter的各种布局组件,以及它的限制,不能想当然。

Text组件本身是没有宽度的,设置overflow属性的话,必须给它指定宽度,可以通过Expanded设置为铺满,也可以通过Container设置为指定宽度。

相关文章

网友评论

      本文标题:解决Text的overflow属性不生效的问题

      本文链接:https://www.haomeiwen.com/subject/pdfmeqtx.html