面试题答案
一键面试实现步骤
-
导入必要的库: 在Flutter项目中,首先要在
pubspec.yaml
文件中确保已经添加了flutter/material.dart
库,它包含了Material Design组件和相关布局工具。 -
使用MediaQuery获取屏幕尺寸:
MediaQuery
可以获取设备的屏幕尺寸、像素密度等信息。在build
方法中,可以通过MediaQuery.of(context).size
获取屏幕尺寸。 -
利用LayoutBuilder确定布局方式:
LayoutBuilder
能够根据父容器的约束来动态构建布局。结合MediaQuery
获取的屏幕尺寸,判断当前设备是手机还是平板,并据此决定展示列表还是网格。 -
按照Material Design布局规范设计界面: Material Design有自己的布局规范,例如间距、字体大小、元素尺寸等。在设计列表和网格布局时,要遵循这些规范。
示例代码结构
import 'package:flutter/material.dart';
class ResponsiveLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
// 判断是否为平板,这里简单以宽度600作为区分
if (size.width >= 600) {
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
mainAxisSpacing: 16.0,
crossAxisSpacing: 16.0,
),
itemCount: 20,
itemBuilder: (context, index) {
return Card(
child: Center(
child: Text('Item $index'),
),
);
},
);
} else {
return ListView.builder(
itemCount: 20,
itemBuilder: (context, index) {
return ListTile(
title: Text('Item $index'),
);
},
);
}
},
);
}
}
在上述代码中:
- 首先通过
MediaQuery.of(context).size
获取屏幕尺寸。 - 然后在
LayoutBuilder
的builder
回调中,根据屏幕宽度判断设备类型。 - 如果是平板(这里以宽度大于等于600为例),则使用
GridView.builder
构建网格布局,遵循Material Design规范设置了mainAxisSpacing
和crossAxisSpacing
。 - 如果是手机,则使用
ListView.builder
构建列表布局。