面试题答案
一键面试实现思路
- 引入LayoutBuilder:在需要根据屏幕尺寸动态调整布局的地方使用
LayoutBuilder
。LayoutBuilder
会提供当前可用的布局约束,通过这些约束来确定子组件的排列和大小。 - 分析约束:获取
BoxConstraints
对象,从中获取最大和最小宽度、高度等信息。根据这些信息制定不同的布局策略,比如在窄屏幕上采用单列布局,在宽屏幕上采用多列布局。 - 动态构建布局:根据分析的约束动态构建
Column
、Row
或Flex
等布局组件,调整子组件的排列和大小。
关键代码片段
LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
// 根据最大宽度判断布局
if (constraints.maxWidth < 600) {
return Column(
children: [
Expanded(
child: Container(
color: Colors.blue,
child: Center(child: Text('子组件1')),
),
),
Expanded(
child: Container(
color: Colors.green,
child: Center(child: Text('子组件2')),
),
),
],
);
} else {
return Row(
children: [
Expanded(
child: Container(
color: Colors.blue,
child: Center(child: Text('子组件1')),
),
),
Expanded(
child: Container(
color: Colors.green,
child: Center(child: Text('子组件2')),
),
),
],
);
}
},
)
在上述代码中,LayoutBuilder
的builder
回调函数接收context
和constraints
参数。通过判断constraints.maxWidth
来决定是采用Column
(窄屏幕)还是Row
(宽屏幕)布局,并相应地排列子组件。这样就实现了根据屏幕尺寸动态调整子组件排列的功能,优化了布局渲染性能。