dart - 如何在颤动中自动调整行内的文本大小
问题描述
我正在尝试复制以下 UI。我想显示一个项目列表,其中每个项目平均分布为 3 个部分(参见下图)。我想达到同样的响应能力。但我无法将它们排列整齐。这是样机:
这是我取得的成就:
这是我的代码:
Card stockList() {
return Card(
child: Container(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Stocks & Values', style: Theme.of(context).textTheme.subtitle,),
SizedBox(height: 10.0),
tile1(),
SizedBox(height: 10.0,),
Divider(),
SizedBox(height: 10.0,),
tile2(),
SizedBox(height: 10.0,),
Divider(),
tile3(),
SizedBox(height: 10.0,),
Divider(),
tile4(),
],
),
),
);
}
Container tile1() {
return Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
Text('24k', style: Theme.of(context).textTheme.title,),
SizedBox(width: 5.0),
Image.asset('assets/country_flags/in.png',width: 20.0,height: 20.0,)
],
),
SizedBox(height: 2.0,),
Text('$currencySymbol 3,678.00', style: Theme.of(context).textTheme.subtitle,),
SizedBox(height: 2.0,),
Text('May 3, 13:40 IST', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('35.00', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('gms', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('$currencySymbol 34,355.00', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('current value', style: Theme.of(context).textTheme.caption,)
],
)
],
),
);
}
Container tile2() {
return Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
Text('22k', style: Theme.of(context).textTheme.title,),
SizedBox(width: 5.0),
Image.asset('assets/country_flags/in.png',width: 20.0,height: 20.0,)
],
),
// SizedBox(height: 2.0,),
// Text('$currencySymbol 3,678.00', style: Theme.of(context).textTheme.subtitle,),
// SizedBox(height: 2.0,),
// Text('May 3, 13:40 IST', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('788.27', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('gms', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('$currencySymbol 30,125.00', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('current value', style: Theme.of(context).textTheme.caption,)
],
)
],
),
);
}
Container tile3() {
return Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
Text('24k', style: Theme.of(context).textTheme.title,),
SizedBox(width: 5.0),
Image.asset('assets/country_flags/in.png',width: 20.0,height: 20.0,)
],
),
SizedBox(height: 2.0,),
Text('$currencySymbol 3,678.00', style: Theme.of(context).textTheme.subtitle,),
SizedBox(height: 2.0,),
Text('May 3, 13:40 IST', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('35.00', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('gms', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('$currencySymbol 34,355.00', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('current value', style: Theme.of(context).textTheme.caption,)
],
)
],
),
);
}
Container tile4() {
return Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
children: <Widget>[
Text('24k', style: Theme.of(context).textTheme.title,),
SizedBox(width: 5.0),
Image.asset('assets/country_flags/in.png',width: 20.0,height: 20.0,)
],
),
SizedBox(height: 2.0,),
Text('$currencySymbol 3,678.00', style: Theme.of(context).textTheme.subtitle,),
SizedBox(height: 2.0,),
Text('May 3, 13:40 IST', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('35.00', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('gms', style: Theme.of(context).textTheme.caption,)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('$currencySymbol 34,355.00', style: Theme.of(context).textTheme.title,),
SizedBox(height: 2.0,),
Text('current value', style: Theme.of(context).textTheme.caption,)
],
)
],
),
);
}
我在哪里犯错?关于如何使此布局响应的任何想法,以便它们保持对齐,如模型中所示。
解决方案
要使一组孩子彼此之间占据相同的空间,请将它们包装在Expanded
:
Container tile1() {
return Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
// Your column
),
Expanded(
// Your column
),
Expanded(
// Your column
)
],
),
);
}
推荐阅读
- java - Eclipse 详细信息格式化程序字符串未显示所有 Unicode 字符
- python - 使用 python 烧瓶框架在 html 正文中设置背景图像
- regex - 使用正则表达式匹配使用 netstat -nb python 的进程名称
- .net-core - VSTS - dotnet restore - PackageCache 不存在
- bash - 将 API 转换为 HTTPS 后 pwd 命令返回“/”
- swift3 - 简单的活动跟踪器 Swift 代码
- javascript - 使用 for 循环反转数组
- wordpress - 如何在 docker-compose.yml 中运行 wp cli
- android - 获取已安装应用程序的列表,不包括内置应用程序
- android - 通话结束后获取来电者电话号码然后开始活动