文本小部件未显示在 ListTile 颤动中

Text widget not displaying in ListTile flutter

我想在 ListTile 内的左侧部分显示个人资料图片,中间部分显示名称和公司(一个在另一个下方),右侧部分显示评论和评分。我能够正确显示图像、评论和评分,但没有显示文本。我想实现这个:

图像和评级之间的白色 space 是我要显示文本的地方(名称和公司,一个在另一个下面)。不确定我在这里遗漏了什么。

下面的代码片段:

return new ListTile(
      contentPadding: EdgeInsets.all(8.0),
          leading: _getProfilePic(pro),
      //    title: new Text('${pro.fullname}'),
        title: new Column(
          children: <Widget>[
            new Row(
              mainAxisAlignment: MainAxisAlignment.start,
              children: <Widget>[
                new Text('${pro.fullname}')
              ],
            ),
          ],
        ),
    subtitle: Column(children: <Widget>[
      Padding(
        padding: EdgeInsets.all(3.0),
      ),
            new Row(
              mainAxisAlignment: MainAxisAlignment.start,
              children: <Widget>[
                new Text('${pro.company}', style: TextStyle(fontSize: 12.0),
                ),
              ],
            ),
          ],
    ),
      trailing: new Column(children: <Widget>[
        new Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            new StarRating(starCount: 5, rating: pro.rating, color: Colors.amber),
          ],
        ),
        new Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            new Text('${pro.reviewCount} reviews'),
          ],
        )
      ],) ,


我觉得是returnListView的自定义方法,如下:

Widget buildProList(列表专家,BuildContext 上下文){ 列表 proTiles = new List();

pros.forEach((pro) {
  proTiles.add(proTile(pro, context));
});

return new ListView(
  children: proTiles
);

}

这是它的实现:

ListTile proTile(Pro pro, BuildContext 上下文) { return 新 ListTile {

}

您可以查看 ListTile 的源代码来检查它是如何构建树的。 如果您阅读 ListTile 小部件的文档,您会发现类似这样的内容:

  /// The primary content of the list tile.
    ///
    /// Typically a [Text] widget.
    final Widget title;

    /// Additional content displayed below the title.
    ///
    /// Typically a [Text] widget.
    final Widget subtitle;

    /// A widget to display after the title.
    ///
    /// Typically an [Icon] widget.
    final Widget trailing;

所以你必须考虑你传递的小部件。

您的布局看起来很复杂,这是您如何以非常简单的方式构建小部件的示例:

    new ListTile(
            contentPadding: EdgeInsets.all(8.0),
            leading: _getProfilePic(pro),
            title: new Text('${pro.fullname}'),
            subtitle: Text('${pro.company}',
              style: TextStyle(fontSize: 12.0),
            ),
            trailing: new Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                new StarRating(starCount: 5, rating: pro.rating, color: Colors.amber),
                new Text('${pro.reviewCount} reviews'),
              ],
            ),
          ), 

不使用ListTile的另一种解决方案:

  return Row(
        children: <Widget>[
        _getProfilePic(pro),

          Expanded(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                new Text(
                  '${pro.fullname}',
                  overflow: TextOverflow.ellipsis,
                ), 
                new Text(
                  '${pro.company}',
                  style: TextStyle(fontSize: 12.0), 
                ),
              ],
            ),
          ),

          new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              new StarRating(starCount: 5, rating: pro.rating, color: Colors.amber)
              new Text('${pro.reviewCount} reviews'),
            ],
          )
        ],
      );

注意:不要忘记检查子窗口小部件的父约束