面试题答案
一键面试Expanded组件的作用
Expanded
组件用于在Flutter布局中灵活分配剩余空间。它通常包裹在一个弹性布局(如Row
、Column
或Flex
)的子组件上,以控制子组件如何占用布局中的剩余空间。
如何分配剩余空间
- 计算剩余空间:当
Row
、Column
或Flex
布局确定了所有非弹性子组件(即没有被Expanded
包裹的子组件)的大小后,计算出剩余空间。 - 按比例分配:如果有多个
Expanded
子组件,剩余空间会根据它们的flex
属性值(默认为1)按比例分配。例如,有两个Expanded
子组件,一个flex
为2,另一个flex
为1,那么flex
为2的子组件将获得剩余空间的2/3,flex
为1的子组件将获得剩余空间的1/3。
示例 - 在Row布局中按比例分配空间
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Expanded Example in Row'),
),
body: Row(
children: [
Expanded(
flex: 2,
child: Container(
color: Colors.blue,
child: Center(child: Text('Flex 2')),
),
),
Expanded(
flex: 1,
child: Container(
color: Colors.green,
child: Center(child: Text('Flex 1')),
),
),
],
),
),
);
}
}
在上述代码中,Row
布局包含两个Expanded
子组件。第一个Expanded
的flex
为2,第二个Expanded
的flex
为1。因此,蓝色区域(Flex 2
)将占据Row
布局剩余空间的2/3,绿色区域(Flex 1
)将占据剩余空间的1/3。
示例 - 在Column布局中按比例分配空间
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Expanded Example in Column'),
),
body: Column(
children: [
Expanded(
flex: 3,
child: Container(
color: Colors.red,
child: Center(child: Text('Flex 3')),
),
),
Expanded(
flex: 2,
child: Container(
color: Colors.yellow,
child: Center(child: Text('Flex 2')),
),
),
],
),
),
);
}
}
此代码中,Column
布局有两个Expanded
子组件。红色区域(Flex 3
)的flex
为3,黄色区域(Flex 2
)的flex
为2。所以红色区域将占据Column
布局剩余空间的3/5,黄色区域将占据剩余空间的2/5。