Flutter提供了一套完整的屏幕适配解决方案,主要是通过MediaQuery
和LayoutBuilder
控件来实现的。
以下是一个简单的例子,展示如何使用LayoutBuilder
来实现基于屏幕宽度的自适应布局:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > 800) {
return const Text('This is a desktop-like layout');
} else {
return const Text('This is a mobile-like layout');
}
},
),
),
);
}
}
在这个例子中,LayoutBuilder
根据父级容器的约束条件来构建子控件。通过检查constraints.maxWidth
,我们可以决定在不同屏幕宽度下显示不同的文本信息。
为了实现更细粒度的屏幕适配,可以使用MediaQuery.of(context).size
来获取当前屏幕的宽度和高度,然后根据这些值来调整布局。
此外,Flutter提供的ResponsiveLayout
或LayoutBuilder
配合SizedBox
、Expanded
等控件,也可以实现复杂的自适应布局。
为了确保适配性,还可以使用flutter_screenutil
等第三方包,它们提供了ScreenUtil.setWidth
和ScreenUtil.setHeight
等方法,可以轻松地将设计稿上的尺寸转换为Flutter中的逻辑单位。