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