FlutterFlutter 优质文章集Flutter圈子

Flutter 常用工具类库 flustars

2018-12-21  本文已影响16人  Sky24n

萌新必备工具类库一

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);

我的       : Flutter开源库集合

GitHub : flustars

Pub        : flustars

Demo    : flutter_wanandroid

APK        :点击下载 v0.1.2

Android扫码下载APK:

flutter_wanandroid
上一篇 下一篇

猜你喜欢

热点阅读