面试题答案
一键面试实现思路
- 使用
LayoutBuilder
获取屏幕宽度。 - 根据屏幕宽度设定每行显示子部件数量的阈值。
- 将文本子部件列表按设定的每行数量进行分组。
- 使用
Column
和Row
构建布局,将分组后的子部件依次排列。
关键代码示例
import 'package:flutter/material.dart';
class DynamicFlexLayout extends StatelessWidget {
final List<String> textList = ['文本1', '文本2', '文本3', '文本4', '文本5', '文本6'];
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
// 根据屏幕宽度设定每行显示子部件数量
int itemsPerRow = constraints.maxWidth > 600? 3 : 2;
// 将文本子部件列表按设定的每行数量进行分组
List<List<String>> groupedTextList = [];
for (int i = 0; i < textList.length; i += itemsPerRow) {
groupedTextList.add(textList.sublist(i, i + itemsPerRow < textList.length? i + itemsPerRow : textList.length));
}
return Column(
children: groupedTextList.map((group) {
return Row(
children: group.map((text) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Text(text),
);
}).toList(),
);
}).toList(),
);
},
);
}
}
在main.dart
中调用:
void main() {
runApp(MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('动态Flex布局'),
),
body: DynamicFlexLayout(),
),
));
}