Flutter 在容器中包装文本,而不在颤振中使用固定宽度

Flutter 在容器中包装文本,而不在颤振中使用固定宽度,flutter,Flutter,我正在尝试在flifter中创建一个基本的聊天应用程序,我想在简单的容器中显示对话,该容器将根据里面的文本调整其长度。当我遇到溢出错误时,在文本不适合容器长度之前,一切都正常 我使用的代码就是这个 Widget _buildMessage(Message message) { return Row(children: <Widget>[ message.author == username ? Expanded(child: Container()) : Con

我正在尝试在flifter中创建一个基本的聊天应用程序,我想在简单的容器中显示对话,该容器将根据里面的文本调整其长度。当我遇到溢出错误时,在文本不适合容器长度之前,一切都正常

我使用的代码就是这个

Widget _buildMessage(Message message) {
    return Row(children: <Widget>[
      message.author == username ? Expanded(child: Container()) : Container(),
      Container(
          padding: EdgeInsets.all(8.0),
          margin: EdgeInsets.all(4.0),
          decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(8.0))),
          child: Row(
            children: <Widget>[
              Text(
                message.text,
              ),
              SizedBox(
                width: 8.0,
              ),
              Padding(
                padding: EdgeInsets.only(top: 6.0),
                child: Text(
                  message.time,
                  style: TextStyle(fontSize: 10.0, color: Colors.grey),
                ),
              ),
              SizedBox(
                width: 8.0,
              ),
              Padding(
                padding: EdgeInsets.only(top: 6.0),
                child: Text(
                  message.author,
                  style: TextStyle(fontSize: 10.0, color: Colors.grey),
                ),
              ),
            ],
          )),
      message.author != username ? Expanded(child: Container()) : Container(),
    ]);
  }
Widget\u构建消息(消息消息){
返回行(子项:[
message.author==用户名?已展开(子:Container()):Container(),
容器(
填充:边缘设置。全部(8.0),
边距:所有边集(4.0),
装饰:盒子装饰(
颜色:颜色,白色,
borderRadius:borderRadius.all(半径.圆形(8.0)),
孩子:排(
儿童:[
正文(
message.text,
),
大小盒子(
宽度:8.0,
),
填充物(
填充:仅限边缘设置(顶部:6.0),
子:文本(
留言时间,
样式:TextStyle(字体大小:10.0,颜色:Colors.grey),
),
),
大小盒子(
宽度:8.0,
),
填充物(
填充:仅限边缘设置(顶部:6.0),
子:文本(
message.author,
样式:TextStyle(字体大小:10.0,颜色:Colors.grey),
),
),
],
)),
message.author!=用户名?已展开(子级:Container()):Container(),
]);
}
我在一行中使用了一行,这样我就可以根据作者的不同将该对齐方式向右或向左对齐。 如果在输入中键入带有多行的内容,文本将正确呈现,容器将根据需要垂直展开。问题是当我键入的内容超出容器的宽度时

我可以通过使用容器包装文本和使用固定的来解决这个问题,但我不希望这样,因为我希望宽度是动态的,并适应文本

我见过其他一些问题,人们建议使用灵活的或扩展的,但我不知道怎么做


任何想法都将不胜感激。

我试图编辑您的代码,以下是我所做的:

返回行(
mainAxisAlignment:message.author==用户名?mainAxisAlignment.end:mainAxisAlignment.start,
//这将确定消息应显示在左侧还是右侧
儿童:[
灵活的(
//使用灵活的小部件包装容器
子:容器(
填充:边缘设置。全部(8.0),
边距:所有边集(4.0),
装饰:盒子装饰(
颜色:颜色,白色,
borderRadius:borderRadius.all(半径.圆形(8.0)),
孩子:排(
mainAxisSize:mainAxisSize.min,
儿童:[
灵活的(
//我们只想用灵活的小部件包装文本消息
子:容器(
子:文本(
message.text,
)
)
),    
大小盒子(
宽度:8.0,
),
填充物(
填充:仅限边缘设置(顶部:6.0),
子:文本(
留言时间,
样式:TextStyle(字体大小:10.0,颜色:Colors.grey),
),
),
大小盒子(
宽度:8.0,
),
填充物(
填充:仅限边缘设置(顶部:6.0),
子:文本(
message.author,
样式:TextStyle(字体大小:10.0,颜色:Colors.grey),
),
),
],
)),
)
]
);
以下是我的虚拟代码的完整版本:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

List<String> username = ['foo', 'bar', 'foo', 'bar', 'foo'];
List<String> messages = ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bb', 'cccccccccccccccccccccccccccccc', 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'ee'];
List<String> time = ['131', '6454', '54564', '54546', '88888'];
List<String> author = ['Jesus', 'Joseph', 'Mary', 'John', 'Cardo'];

@override
Widget build(BuildContext context){

return Scaffold(
  body: Container(
    color: Colors.blue[200],
    child: ListView.builder(
      itemCount: 5, 
      itemBuilder: (_, int index){

        return  Row(
          mainAxisAlignment: username[index] == "foo" ? MainAxisAlignment.end : MainAxisAlignment.start,
          children: [
            Flexible(
              child: Container(
                padding: EdgeInsets.all(8.0),
                margin: EdgeInsets.all(4.0),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.all(Radius.circular(8.0))),
                child: Row(

                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[

                    Flexible(
                      child: Container(
                        child: Text(
                          messages[index],
                        ),
                      )
                    ),

                    SizedBox(
                      width: 8.0,
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 6.0),
                      child: Text(
                        time[index],
                        style: TextStyle(fontSize: 10.0, color: Colors.grey),
                      ),
                    ),
                    SizedBox(
                      width: 8.0,
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 6.0),
                      child: Text(
                        author[index],
                        style: TextStyle(fontSize: 10.0, color: Colors.grey),
                      ),
                    ),
                  ],
                )),

              )

          ]
          );

      }
      ) 
      )
    );
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
列表用户名=['foo','bar','foo','bar','foo'];
列表消息=['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
列表时间=['131','6454','54564','54546','888'];
列出作者=[“耶稣”、“约瑟夫”、“玛丽”、“约翰”、“卡多”];
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
颜色:颜色。蓝色[200],
子项:ListView.builder(
物品计数:5,
itemBuilder:(\ux,int索引){
返回行(
mainAxisAlignment:username[index]=“foo”?mainAxisAlignment.end:mainAxisAlignment.start,
儿童:[
灵活的(
子:容器(
填充:边缘设置。全部(8.0),
边距:所有边集(4.0),
装饰:盒子装饰(
颜色:颜色,白色,
borderRadius:borderRadius.all(半径.圆形(8.0)),
孩子:排(
mainAxisSize:mainAxisSize.min,
儿童:[
灵活的(
子:容器(
子:文本(
消息[索引],
),
)
),
大小盒子(
宽度:8.0,
),
填充物(
填充:仅限边缘设置(顶部:6.0),
子:文本(
时间[索引],
样式:TextStyle(字体大小:10.0,颜色:Colors.grey),
),
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

List<String> username = ['foo', 'bar', 'foo', 'bar', 'foo'];
List<String> messages = ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bb', 'cccccccccccccccccccccccccccccc', 'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'ee'];
List<String> time = ['131', '6454', '54564', '54546', '88888'];
List<String> author = ['Jesus', 'Joseph', 'Mary', 'John', 'Cardo'];

@override
Widget build(BuildContext context){

return Scaffold(
  body: Container(
    color: Colors.blue[200],
    child: ListView.builder(
      itemCount: 5, 
      itemBuilder: (_, int index){

        return  Row(
          mainAxisAlignment: username[index] == "foo" ? MainAxisAlignment.end : MainAxisAlignment.start,
          children: [
            Flexible(
              child: Container(
                padding: EdgeInsets.all(8.0),
                margin: EdgeInsets.all(4.0),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.all(Radius.circular(8.0))),
                child: Row(

                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[

                    Flexible(
                      child: Container(
                        child: Text(
                          messages[index],
                        ),
                      )
                    ),

                    SizedBox(
                      width: 8.0,
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 6.0),
                      child: Text(
                        time[index],
                        style: TextStyle(fontSize: 10.0, color: Colors.grey),
                      ),
                    ),
                    SizedBox(
                      width: 8.0,
                    ),
                    Padding(
                      padding: EdgeInsets.only(top: 6.0),
                      child: Text(
                        author[index],
                        style: TextStyle(fontSize: 10.0, color: Colors.grey),
                      ),
                    ),
                  ],
                )),

              )

          ]
          );

      }
      ) 
      )
    );
  }
}