直接上代码
class ScreenUtil {
static ScreenUtil instance = new ScreenUtil();
double width;
bool allowFontScaling;
static double _screenWidth;
static double _textScaleFactor;
ScreenUtil({
this.width = 750, // 默认设计稿750px
this.allowFontScaling = false, // 默认不跟随系统缩放字体
});
static ScreenUtil getInstance() {
return instance;
}
void init(BuildContext context) {
_screenWidth = MediaQuery.of(context).size.width;
_textScaleFactor = MediaQuery.of(context).textScaleFactor;
}
get scaleWidth => _screenWidth / instance.width;
setSize(double size) => size * scaleWidth;
///@param fontSize 传入设计稿上字体的px ,
setSp(double fontSize) => allowFontScaling
? setSize(fontSize)
: setSize(fontSize) / _textScaleFactor;
}
// 使用, 在入口文件中(一般为app.dart),
ScreenUtil.instance = ScreenUtil.getInstance()..init(context);
// 在切图是使用
Text('关于',
...
style: TextStyle(color: kLingyiText500, fontSize: ScreenUtil.getInstance().setSp(32))
)
Container(
width: ScreenUtil.getInstance().setSize(64),
height: ScreenUtil.getInstance().setSize(64),
...
)
附flutter
开发注意事项
- 凡是不能确地页面高度的都使用可滑动组件(ListView, SingleChildScroll…)
- 使用
materail
主题都要考虑appbar
返回键在Android和Ios的统一, 建议全部使用leading
自定义返回图标, 并且注意返回图标与背景色区分开来 - 使用
TextField
注意屏幕被撑起问题, 键盘类型, 是否自动更正等 - 明确设计主题色, 并分离出单独的配置文件
- 图片占位符问题, 确保图片请求时图片区域视觉友好