Flutter 导致布局问题的列小部件

Flutter 导致布局问题的列小部件,flutter,dart,Flutter,Dart,我目前有一个由Containers()组成的列表(因为我不能使用ListView,因为我需要外部滚动),它工作得很好,只是因为在每个列表中,我都有一个Row(),带有两个Column()小部件。第一列应限制为打印图像,第二列以行的形式显示某些信息。这是做列表的一种非常典型的方式,所以我认为它不应该引起问题 问题是,第二个列()中的第二个Text()小部件似乎总是导致上方的Text()向右移动,导致溢出并使文本无法读取,用户无法访问。请看这张图片: 是的,标题在那里(即使你看不到第二个)。它们只

我目前有一个由
Containers()
组成的列表(因为我不能使用ListView,因为我需要外部滚动),它工作得很好,只是因为在每个列表中,我都有一个
Row()
,带有两个
Column()
小部件。第一列应限制为打印图像,第二列以行的形式显示某些信息。这是做列表的一种非常典型的方式,所以我认为它不应该引起问题

问题是,第二个
列()
中的第二个
Text()
小部件似乎总是导致上方的
Text()
向右移动,导致溢出并使文本无法读取,用户无法访问。请看这张图片:

是的,标题在那里(即使你看不到第二个)。它们只是完全向右移动了。如果我删除下面的描述,它们会正确地显示在左侧,只留下一点空白。问题是,无论下面的元素是什么,这些标题都应该存在,或者至少,这就是我理解
Column()
小部件应该工作的方式

看看代码:

 getListItems(List<Artist> artistList) {
    // Iterate through the whole Artists array and render a list item for each one
    return artistList.map((Artist artist) {
      return Container(
          margin: EdgeInsets.only(top: 12),
          height: 100,
          color: Colors.grey[600],
          child: Row(
            children: <Widget>[
              Padding(padding: EdgeInsets.only(left: 15)),
              Column(
                children: <Widget>[
                  Image(
                      width: 100,
                      height: 100,
                      fit: BoxFit.cover,
                      image: artist.avatar)
                ],
              ),
              Padding(padding: EdgeInsets.only(top: 5)),
              Column(
                children: <Widget>[
                  Text(
                    artist.name,
                    style: TextStyle(fontSize: 18),
                  ),
                  Padding(padding: EdgeInsets.only(top: 5)),
                  Text(artist.description, style: TextStyle(fontSize: 13))
                ],
              )
            ],
          ));
    }).toList();
getListItems(列表artistList){
//迭代整个美工数组,并为每个数组呈现一个列表项
返回artistList.map((艺术家){
返回容器(
页边距:仅限边缘集(顶部:12),
身高:100,
颜色:颜色。灰色[600],
孩子:排(
儿童:[
填充(填充:仅限边集(左:15)),
纵队(
儿童:[
形象(
宽度:100,
身高:100,
适合:BoxFit.cover,
图片:艺术家(阿凡达)
],
),
填充(填充:仅限边集(顶部:5)),
纵队(
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
文本(艺术家描述,样式:TextStyle(字体大小:13))
],
)
],
));
}).toList();

此代码中有什么错误?谢谢!

您需要对包含
文本
小部件的
列进行一些修改

Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(
              artist.name,
              style: TextStyle(fontSize: 18),
            ),
            Padding(padding: EdgeInsets.only(top: 5)),
            Container(
              width: MediaQuery.of(context).size.width * 0.5,   // can change "0.5" according to your requirement
              child: Text(
                artist.description,
                style: TextStyle(fontSize: 13),
              ),
            ),
          ],
      )
列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
容器(
宽度:MediaQuery.of(context).size.width*0.5,//可以根据需要更改“0.5”
子:文本(
艺术家描述,
样式:TextStyle(字体大小:13),
),
),
],
)

您需要对包含
文本
小部件的
进行一些修改

Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(
              artist.name,
              style: TextStyle(fontSize: 18),
            ),
            Padding(padding: EdgeInsets.only(top: 5)),
            Container(
              width: MediaQuery.of(context).size.width * 0.5,   // can change "0.5" according to your requirement
              child: Text(
                artist.description,
                style: TextStyle(fontSize: 13),
              ),
            ),
          ],
      )
列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
容器(
宽度:MediaQuery.of(context).size.width*0.5,//可以根据需要更改“0.5”
子:文本(
艺术家描述,
样式:TextStyle(字体大小:13),
),
),
],
)

您可以使用
Flexible
包装第二列,以避免溢出:

Container(
          margin: EdgeInsets.only(top: 12),
          height: 100,
          color: Colors.grey[600],
          child: Row(
            children: <Widget>[
              Padding(padding: EdgeInsets.only(left: 15)),
              Column(
                children: <Widget>[
                  Image(
                      width: 100,
                      height: 100,
                      fit: BoxFit.cover,
                      image: artist.avatar)
                ],
              ),
              Flexible(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    Text(
                      artist.name,
                      style: TextStyle(fontSize: 18),
                    ),
                    Padding(padding: EdgeInsets.only(top: 5)),
                    Text(artist.description, style: TextStyle(fontSize: 13))
                  ],
                ),
              )
            ],
          ))
容器(
页边距:仅限边缘集(顶部:12),
身高:100,
颜色:颜色。灰色[600],
孩子:排(
儿童:[
填充(填充:仅限边集(左:15)),
纵队(
儿童:[
形象(
宽度:100,
身高:100,
适合:BoxFit.cover,
图片:艺术家(阿凡达)
],
),
灵活的(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
文本(艺术家描述,样式:TextStyle(字体大小:13))
],
),
)
],
))

您可以使用
Flexible
包装第二列,以避免溢出:

Container(
          margin: EdgeInsets.only(top: 12),
          height: 100,
          color: Colors.grey[600],
          child: Row(
            children: <Widget>[
              Padding(padding: EdgeInsets.only(left: 15)),
              Column(
                children: <Widget>[
                  Image(
                      width: 100,
                      height: 100,
                      fit: BoxFit.cover,
                      image: artist.avatar)
                ],
              ),
              Flexible(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    Text(
                      artist.name,
                      style: TextStyle(fontSize: 18),
                    ),
                    Padding(padding: EdgeInsets.only(top: 5)),
                    Text(artist.description, style: TextStyle(fontSize: 13))
                  ],
                ),
              )
            ],
          ))
容器(
页边距:仅限边缘集(顶部:12),
身高:100,
颜色:颜色。灰色[600],
孩子:排(
儿童:[
填充(填充:仅限边集(左:15)),
纵队(
儿童:[
形象(
宽度:100,
身高:100,
适合:BoxFit.cover,
图片:艺术家(阿凡达)
],
),
灵活的(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
艺术家姓名,
样式:TextStyle(字体大小:18),
),
填充(填充:仅限边集(顶部:5)),
文本(艺术家描述,样式:TextStyle(字体大小:13))
],
),
)
],
))
您可以使用
Flexible()
小部件将文本小部件包装在Flexible小部件中

  return  Center(
        child: Padding(padding:  EdgeInsets.only(left: 50, right: 50),
          child:  Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Flexible(
                  child: Text('Hii....helloo....how r u?...here you can show multiple line.', textAlign: TextAlign.center,style: TextStyle(fontSize: 20.0, color: Colors.white))),
            ],
          ),
        )
      );
返回中心(
Expanded(
  child:
    Container(
            margin: EdgeInsets.only(top: 12),
            height: 100,
            color: Colors.grey[600],......
Container(
          margin: EdgeInsets.only(top: 12),
          height: `MediaQuery.of(context).size.height`,
          color: Colors.grey[600],
          child: Row(
            children: <Widget>[
              Padding(padding: EdgeInsets.only(left: 15)),
              Column(
                children: <Widget>[
                  Image(
                      width: 100,
                      height: 100,
                      fit: BoxFit.cover,
                      image: artist.avatar)
                ],
              ),
              Padding(padding: EdgeInsets.only(top: 5)),
              Column(
                children: <Widget>[
                  Text(
                    artist.name,
                    style: TextStyle(fontSize: 18),
                  ),
                  Padding(padding: EdgeInsets.only(top: 5)),
                  Text(artist.description, style: TextStyle(fontSize: 13))
                ],
              )
            ],
          ));
    }).toList();