我看了
flutter_screenutil
源码,觉得像是FlutterWindow
这样的类,或是
MediaQuery
有些相关的方法,平时可能用的很少,我自己可能学习的也不是特别完整和扎实,很多内在底层的实现也很模糊
觉得还是用
provider
实现自适应可能更加容易理解一点。当然,最好是不要依靠第三方组件,也许我也会实现一个自己的
provider
也说不一定。这就是后话中的后话了。
v 0.0.2-alpha 版本使用说明(持续优化中)
第一种方法: 不传入
context
的调用
因为用到了provider
,所以不能在 MaterialApp
中完成所有的初始化操作,代码如下:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: ...,
// 这里传入一个 builder 函数,主要是声明provider的
builder: TaichiFitnessUtil.rootBuilder(),
);
}
}
然后需要在build
方法中写入(一般来说在首页添加以下代码就可以了,但是测试下来如果首页采用的是 pushReplacement
这种跳转方式会有空值异常,所以使用这种跳转方式的需要重新init一下,而pushNamed
或者push
这种方式的则不需要重新init):
TaichiFitnessUtil.init(context);
这是保证TaichiFitnessUtil
这个单例存在一个context。
然后就可以使用300.w
等类似的方法调用了。
第二种方法,传入
context
调用
这种更加容易理解,因为使用 provider
需要context,所以每次调用的时候就写入一个context,然后再进行适配字体300.setHeight(context)
。
所有
context
都能为空,为空时原值传出。