萌新必备工具类库一
Flutter 常用工具类库 flustars
① 网络DioUtil
② 屏幕适配ScreenUtil
③ 数据存储"同步"SpUtil
④ widget渲染监听WidgetUtil
萌新必备工具类库二
Dart常用工具类库 common_utils
① TimelineUtil : 时间轴.
② TimerUtil : 倒计时,定时任务.
③ MoneyUtil : 精确转换防止精度丢失,分元互转,支持格式输出.
④ LogUtil : 简单封装打印日志.
⑤ DateUtil : 日期转换格式化输出.
⑥ RegexUtil : 正则验证手机号,身份证,邮箱等.
⑦ NumUtil : 保留x位小数.精确加、减、乘、除, 防止精度丢失.
⑧ ObjectUtil : 判断对象是否为空(String List Map),判断两个List是否相等.
1、网络 DioUtil
网络请求工具DioUtil,单例,可输出请求日志。
// 打开debug模式.
DioUtil.openDebug();
// 配置网络参数.
Options options = DioUtil.getDefOptions();
options.baseUrl = "http://www.wanandroid.com/";
HttpConfig config = new HttpConfig(options: options);
DioUtil().setConfig(config);
// 两种单例请求方式.
DioUtil().request<List>(Method.get, "banner/json");
DioUtil.getInstance().request(Method.get, "banner/json");
//示例
LoginReq req = new LoginReq('username', 'password');
DioUtil().request(Method.post, "user/login",data: req.toJson());
//示例
FormData formData = new FormData.from({
"username": "username",
"password": "password",
});
DioUtil().requestR(Method.post, "user/login",data: rformData);
//解析示例
class WanRepository {
Future<List<BannerModel>> getBanner() async {
BaseResp<List> baseResp = await DioUtil().request<List>(
Method.get, WanAndroidApi.getPath(path: WanAndroidApi.BANNER));
List<BannerModel> bannerList;
if (baseResp.code != Constant.STATUS_SUCCESS) {
return new Future.error(baseResp.msg);
}
if (baseResp.data != null) {
bannerList = baseResp.data.map((value) {
return BannerModel.fromJson(value);
}).toList();
}
return bannerList;
}
}
// 网络请求日志
I/flutter ( 5922): ----------------Http Log----------------
I/flutter ( 5922): [statusCode]: 200
I/flutter ( 5922): [request ]: method: GET baseUrl: http://www.wanandroid.com/ path: lg/collect/list/0/json
I/flutter ( 5922): [reqdata ]: null
I/flutter ( 5922): [response ]: {data: {curPage: 1, datas: [], offset: 0, over: true, pageCount: 0, size: 20, total: 0}, errorCode: 0, errorMsg: }
2、屏幕适配 ScreenUtil
ScreenUtil,单例,不依赖context获取屏幕参数及适配。
//如果设计稿尺寸与默认配置一致,无需该设置。 配置设计稿尺寸 默认 360.0 / 640.0 / 3.0
setDesignWHD(_designW,_designH,_designD);
//返回根据屏幕宽适配后尺寸(单位 dp or pt)
ScreenUtil.getInstance().getWidth(100.0);
ScreenUtil().getWidth(100.0);
//返回根据屏幕高适配后尺寸(单位 dp or pt)
ScreenUtil.getInstance().getHeight(100.0);
ScreenUtil().getHeight(100.0);
//返回根据屏幕宽适配后字体尺寸
ScreenUtil.getInstance().getSp(12.0);
ScreenUtil().getSp(100.0);
3、 数据存储 SpUtil
单例"同步" SharedPreferences 工具类.
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
_loadAsync();
}
void _loadAsync() async {
await SpUtil.getInstance(); //等待Sp初始化完成
SpUtil.putString("username", "sky224");
String username = SpUtil.getString("username");
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
body: new Center( child: new Text(' ') ),
floatingActionButton: FloatingActionButton(onPressed: () {
String username = SpUtil.getString("username"); //同步获取
}),
),
);
}
}
4、WidgetUtil
widget渲染完成监听,获取widget宽高,获取widget在屏幕上的坐标。
WidgetUtil widgetUtil = new WidgetUtil();
widgetUtil.asyncPrepares(true, (_) {
print("Widget 渲染完成...");
});
Rect rect = WidgetUtil. getWidgetBounds(context);
Offset offset = WidgetUtil. getWidgetLocalToGlobal(context);
网友评论