标签:Expanded child 组件 100 flutter BoxFit Row
Expanded组件是flutter中使用率很高的一个组件,它可以动态调整child组件沿主轴的尺寸,比如填充剩余空间,比如设置尺寸比例。它常常和Row或Column组合起来使用。
构造函数
const Expanded(
{Key key,
int flex: 1,
@required Widget child}
)
它除了child之外,有一个flex属性比较常用。flex表示弹性系数,默认是1。
下面结合Row来实验Expanded的用法。
示例一:当Row中的组件不使用Expanded的时候
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Row demo")),
body: Container(
color: Colors.green,
child: Row(children: <Widget>[
Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
),
Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
),
Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
)
])))));
运行效果:
如果不明白为什么会这样,请参阅我的另一篇文章 flutter Row和Column组件
示例二:将Row中的第一个组件使用Expanded包裹
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Row demo")),
body: Container(
color: Colors.green,
child: Row(children: <Widget>[
Expanded(
child: Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
)),
Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
),
Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
)
])))));
运行效果:
可以看到,将第一个组件使用Expanded包裹后,第一个组件设置的width会无效,并且它在主轴方向变大,直到填充剩余空间,但在纵轴方向上并没有变大,依然维持自身的height。
第一个图像因为设置了 fit: BoxFit.cover,所以会被裁剪。BoxFit.cover表示图像填充组件,多余的进行裁剪处理。
示例三:使用Expanded实现Row中所有组件平均分配剩余空间
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Row demo")),
body: Container(
color: Colors.green,
child: Row(children: <Widget>[
Expanded(
child: Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
)),
Expanded(
child: Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
)),
Expanded(
child: Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
))
])))));
运行效果:
有人会问,这样跟将Row设置mainAxisAlignment:MainAxisAlignment.spaceEvenly
有什么区别呢?MainAxisAlignment.spaceEvenly 并不会改变子组件的尺寸,大家可以参阅我的另一篇文章
flutter Row和Column组件 示例六
示例四:将一个组件设置成其它组件的两倍大小
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Row demo")),
body: Container(
color: Colors.red,
child: Row(children: <Widget>[
Expanded(
child: Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
)),
Expanded(
flex: 2,
child: Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
)),
Expanded(
child: Image.asset(
"graphyics/face.jpg",
width: 100,
height: 100,
fit: BoxFit.cover,
))
])))));
运行效果:
由于其它组件弹性系数默认是1,中间组件设置了弹性系数2,因此宽度是其它组件的两倍。
Expanded组件的属性比较少,用途广泛,用法也很简单。关于它的介绍就到这里,不知道你有没有学会?
标签:Expanded,child,组件,100,flutter,BoxFit,Row 来源: https://blog.csdn.net/devnn/article/details/105892081
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。