flutter插件 - flustars(常用工具类库)

简介

官方文档 - common_utils
官方文档 - flustars
Flutter 常用工具类库common_utils

如果您是纯Dart项目,可以直接引用common_utils

Dart常用工具类库 common_utils

  • TimelineUtil: 时间轴.
  • TimerUtil: 倒计时,定时任务.
  • MoneyUtil: 精确转换,元转分,分转元,支持格式输出.
  • LogUtil: 简单封装打印日志.
  • DateUtil: 日期转换格式化输出.
  • RegexUtil: 正则验证手机号,身份证,邮箱等等.
  • NumUtil: 保留x位小数, 精确加、减、乘、除, 防止精度丢失.
  • ObjectUtil: 判断对象是否为空(String List Map),判断两个List是否相等.
  • EncryptUtil: 异或对称加/解密,md5加密,Base64加/解密.
  • TextUtil: 银行卡号每隔4位加空格,每隔3三位加逗号,隐藏手机号等等.
  • JsonUtil: 简单封装json字符串转对象.

如果是Flutter项目,请使用Flutter常用工具类库 flustars,该库依赖于common_utils
flustars库为大家提供更多的工具类,例如SpUtilScreenUtil, DirectoryUtil等等。

  • Flutter常用工具类库flustars
  • SpUtil: 单例"同步"SharedPreferences工具类。支持get传入默认值,支持存储对象,支持存储对象数组。
  • ScreenUtil: 屏幕适配,获取屏幕宽、高、密度,AppBar高,状态栏高度,屏幕方向.
  • WidgetUtil: 监听Widget渲染状态,获取Widget宽高,在屏幕上的坐标,获取网络/本地图片尺寸.
  • ImageUtil: 获取网络/本地图片尺寸.
  • DirectoryUtil: 文件目录工具类.
  • DioUtil: 单例Dio网络工具类(已迁移至此处DioUtil)。

使用

  • 修改pubspec.yaml文件,添加依赖flustars
# ... dev_dependencies: # ... flustars: ^0.3.3 # https://github.com/Sky24n/sp_util # sp_util分拆成单独的库,可以直接引用 sp_util: ^1.0.1 # ...

DateUtil

  • getDateTimeByMs:
  • getDateMsByTimeStr:
  • getNowDateMs: 获取现在 毫秒
  • getNowDateStr: 获取现在 日期字符串(yyyy-MM-dd HH:mm:ss)
  • formatDate: 格式化日期 DateTime
  • formatDateStr: 格式化日期 字符串
  • formatDateMs: 格式化日期 毫秒
  • getWeekday: 获取星期几
  • getDayOfYear: 在今年的第几天
  • isToday: 是否是今天
  • isYesterday: 是否是昨天
  • isWeek: 是否是本周
  • yearIsEqual: 是否同年
  • isLeapYear: 是否是闰年
DateUtil.formatDateMs(dateMs, format: DataFormats.full); //2019-07-09 16:16:16 DateUtil.formatDateStr('2019-07-09 16:16:16', format: "yyyy/M/d HH:mm:ss"); //2019/7/9 16:16:16 DateUtil.formatDate(DateTime.now(), format: DataFormats.zh_full); //2019年07月09日 16时16分16秒

EncryptUtil

  • encodeMd5(): md5 加密.
  • encodeBase64(): Base64加密.
  • decodeBase64(): Base64解密.
  • xorCode(): 异或对称加密.
  • xorBase64Encode(): 异或对称 Base64 加密.
  • xorBase64Decode(): 异或对称 Base64 解密.
const String key = '11, 22, 33, 44, 55, 66'; String userName = 'Sky24n'; String encode = EncryptUtil.xorBase64Encode(userName, key); // WH1YHgMs String decode = EncryptUtil.xorBase64Decode(encode, key); // Sky24n

JsonUtil

  • encodeObj: object to json string.
  • getObj: json string to object.
  • getObject: json string / map to object.
  • getObjList: json string list to object list.
  • getObjectList: json string / map list to object list.
String objStr = "{\"name\":\"成都市\"}"; City hisCity = JsonUtil.getObj(objStr, (v) => City.fromJson(v)); String listStr = "[{\"name\":\"成都市\"}, {\"name\":\"北京市\"}]"; List<City> cityList = JsonUtil.getObjList(listStr, (v) => City.fromJson(v));

MoneyUtil

精确转换,防止精度丢失

  • changeF2Y: 分 转 元, format格式输出.
  • changeFStr2YWithUnit: 分字符串 转 元, formatunit 格式 输出.
  • changeF2YWithUnit: 分 转 元, formatunit 格式 输出.
  • changeYWithUnit: 元, formatunit 格式 输出.
  • changeY2F: 元 转 分.

NumUtil

  • getIntByValueStr: 数字字符串转int
  • getDoubleByValueStr: 数字字符串转double
  • getNumByValueStr: 保留x位小数 by 数字字符串
  • getNumByValueDouble: 保留x位小数 by double
  • isZero: 是否为0
  • add: 加(精确相加,防止精度丢失)
  • subtract: 减(精确相减,防止精度丢失)
  • multiply: 乘(精确相乘,防止精度丢失)
  • divide: 除(精确相除,防止精度丢失)
  • remainder: 余
  • lessThan: <
  • thanOrEqual: <=
  • greaterThan: >
  • greaterOrEqual: >=

ObjectUtil

  • isEmptyString: 判断String是否为空
  • isEmptyList: 判断List是否为空
  • isEmptyMap: 判断Map是否为空
  • isEmpty: 判断对象是否为空(String List Map)
  • isNotEmpty: 判断对象是否非空(String List Map)
  • twoListIsEqual: 判断两个List是否相等

RegexUtil

  • isMobileSimple: 简单验证手机号
  • isMobileExact: 精确验证手机号
  • isTel: 验证电话号码
  • isIDCard: 验证身份证号码
  • isIDCard15: 验证身份证号码 15
  • isIDCard18: 简单验证身份证号码 18
  • isIDCard18Exact: 精确验证身份证号码 18
  • isEmail: 验证邮箱
  • isURL: 验证 URL
  • isZh: 验证汉字
  • isDate: 验证 yyyy-MM-dd 格式的日期校验,已考虑平闰年
  • isIP: 验证 IP 地址
  • isUserName: 验证用户名
  • isQQ: 验证 QQ

TextUtil

  • isEmpty: isEmpty
  • formatSpace4: 每隔4位加空格,格式化银行卡
  • formatComma3: 每隔3三位加逗号
  • formatDoubleComma3: 每隔3三位加逗号
  • hideNumber: 隐藏号码
  • replace: replace
  • split: split
  • reverse: reverse
String phoneNo = TextUtil.formatSpace4("15845678910"); // 1584 5678 910 String num = TextUtil.formatComma3("1234"); // 123,4 String phoneNo = TextUtil.hideNumber("15845678910")// 158****8910

TimerUtil

  • setInterval: 设置Timer间隔
  • setTotalTime: 设置倒计时总时间
  • startTimer(): 启动定时Timer
  • startCountDown: 启动倒计时Timer
  • updateTotalTime: 重设倒计时总时间
  • cancel: 取消计时器
  • setOnTimerTickCallback: 计时器回调
  • isActive: Timer是否启动

SpUtil

SpUtil 强大易用的SharedPreferences工具类

  • getObj
  • getObjList
  • putObject
  • getObject
  • putObjectList
  • getObjectList
  • getString
  • putString
  • getBool
  • putBool
  • getInt
  • putInt
  • getDouble
  • putDouble
  • getStringList
  • putStringList
  • getDynamic
  • haveKey
  • getKeys
  • remove
  • clear
  • isInitialized
/// 等待Sp初始化完成。 await SpUtil.getInstance(); /// 同步使用Sp。支付默认值。 String name = SpUtil.putString("key_username", "Sky24n"); bool isShow = SpUtil.getBool("key_show", defValue: true); /// 存储实体对象示例。 City city = new City(); city.name = "成都市"; SpUtil.putObject("loc_city", city); City hisCity = SpUtil.getObj("loc_city", (v) => City.fromJson(v)); print("City: " + (hisCity == null ? "null" : hisCit.toString())); /// 存储实体对象list示例。 List<City> list = new List(); list.add(new City(name: "成都市")); list.add(new City(name: "北京市")); SpUtil.putObjectList("loc_city_list", list); List<City> _cityList = SpUtil.getObjList("loc_city_list", (v) => City.fromJson(v)); print("City list: " + (_cityList == null ? "null" : _cityList.toString()));

ScreenUtil

  • getWidth: 返回根据屏幕宽适配后尺寸
  • getHeight: 返回根据屏幕高适配后尺寸
  • getWidthPx: 返回根据屏幕宽适配后尺寸
  • getHeightPx: 返回根据屏幕高适配后尺寸
  • getSp: 返回根据屏幕宽适配后字体尺寸
  • screenWidth: 获取屏幕宽
  • screenHeight: 获取屏幕高
  • screenDensity: 获取屏幕密度
  • appBarHeight: 获取系统AppBar高度
  • statusBarHeight: 获取系统状态栏高度
  • getScreenW(ctx): 当前屏幕 宽
  • getScreenH(ctx): 当前屏幕 高
  • getStatusBarH(ctx): 当前状态栏高度
  • getBottomBarH(ctx): 当前BottomBar高度
  • getScaleW(ctx,size): 返回根据屏幕宽适配后尺寸
  • getScaleH(ctx,size): 返回根据屏幕高适配后尺寸
  • getScaleSp(ctx,size): 返回根据屏幕宽适配后字体尺寸
  • getScaleSp(ctx,size): 返回根据屏幕宽适配后字体尺寸
  • getAdapterSize(size): 返回适配后尺寸,可用于宽,高,字体尺寸.
  • getAdapterSizeCtx(ctx,size): 返回适配后尺寸,可用于宽,高,字体尺寸
double adapterSize = ScreenUtil.getInstance().getAdapterSize(100); double adapterSize = ScreenUtil.getAdapterSizeCtx(context, 100); // 一、不依赖context // 屏幕宽 double screenWidth = ScreenUtil.getInstance().screenWidth; // 屏幕高 double screenHeight = ScreenUtil.getInstance().screenHeight; // 屏幕像素密度 double screenDensity = ScreenUtil.getInstance().screenDensity; // 系统状态栏高度 double statusBarHeight = ScreenUtil.getInstance().statusBarHeight; // BottomBar高度 double bottomBarHeight = ScreenUtil.getInstance().bottomBarHeight; // 系统AppBar高度 double appBarHeight = ScreenUtil.getInstance().appBarHeight; // 根据屏幕宽适配后尺寸 double adapterW100 = ScreenUtil.getInstance().getWidth(100); // 根据屏幕高适配后尺寸 double adapterH100 = ScreenUtil.getInstance().getHeight(100); // 根据屏幕宽适配后字体尺寸 double adapterSp100 = ScreenUtil.getInstance().getSp(100); // 根据屏幕宽适配后尺寸(输入px) double adapterW100px = ScreenUtil.getInstance().getWidthPx(300); // 根据屏幕高适配后尺寸(输入px) double adapterH100px = ScreenUtil.getInstance().getHeightPx(300); // 二、依赖context // 屏幕宽 double screenWidth = ScreenUtil.getScreenW(context); // 屏幕高 double screenHeight = ScreenUtil.getScreenH(context); // 屏幕像素密度 double screenDensity = ScreenUtil.getScreenDensity(context); // 系统状态栏高度 double statusBarHeight = ScreenUtil.getStatusBarH(context); // BottomBar高度 double bottomBarHeight = ScreenUtil.getBottomBarH(context); // 根据屏幕宽适配后尺寸 double adapterW100 = ScreenUtil.getScaleW(context, 100); // 根据屏幕高适配后尺寸 double adapterH100 = ScreenUtil.getScaleH(context, 100); // 根据屏幕宽适配后字体尺寸 double adapterSp100 = ScreenUtil.getScaleSp(context, 100); // 屏幕方向 Orientation orientation = ScreenUtil.getOrientation(context);

DirectoryUtil

  • setInitDir
  • initTempDir
  • initAppDocDir
  • initAppSupportDir
  • initStorageDir
  • createDirSync
  • createDir
  • getTempPath
  • getAppDocPath
  • getAppSupportPath
  • getStoragePath
  • createTempDirSync
  • createAppDocDirSync
  • createStorageDirSync
  • createTempDir
  • createAppDocDir
  • createStorageDir

WidgetUtil

  • asyncPrepare: Widget渲染监听,监听widget宽高变化,callback返回宽高等参数
  • getWidgetBounds: 获取widget 宽高
  • getWidgetLocalToGlobal: 获取widget在屏幕上的坐标
  • getImageWH: 获取图片宽高,加载错误情况返回 Rectzero(单位 px
  • getImageWHE: 获取图片宽高,加载错误会抛出异常(单位 px
/// widget渲染监听。 WidgetUtil widgetUtil = new WidgetUtil(); widgetUtil.asyncPrepare(context, true, (Rect rect) { // widget渲染完成。 }); /// widget宽高。 Rect rect = WidgetUtil.getWidgetBounds(context); /// widget在屏幕上的坐标。 Offset offset = WidgetUtil.getWidgetLocalToGlobal(context); /// 获取CachedNetworkImage下的图片尺寸 Image image = new Image(image: new CachedNetworkImageProvider("Url")); Rect rect1 = await WidgetUtil.getImageWH(image: image); /// 其他image Image imageAsset = new Image.asset(""); Image imageFile = new Image.file(File("path")); Image imageNetwork = new Image.network("url"); Image imageMemory = new Image.memory(null); /// 获取网络图片尺寸 Rect rect2 = await WidgetUtil.getImageWH(url: "Url"); /// 获取本地图片尺寸 localUrl 需要全路径 Rect rect3 = await WidgetUtil.getImageWH(localUrl: "assets/images/3.0x/ali_connors.png"); /// 其他方式 WidgetUtil.getImageWH(url: "Url").then((Rect rect) { print("rect: " + rect.toString(); }); WidgetUtil.getImageWHE(url: "Url").then((Rect rect) { print("rect: " + rect.toString(); }).catchError((error) { print("rect: " + error.toString(); });

ImageUtil

  • getImageWH

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

创作不易,若本文对你有帮助,欢迎打赏支持作者!

 分享给好友: