Flutter工具类库 flustars

1、SpUtil : 单例”同步”SharedPreferences工具类。
2、ScreenUtil : 屏幕工具类.
3、WidgetUtil : Widget具类.
4、DirectoryUtil : 文件目录工具类。
5、DioUtil : 单例Dio网络工具类。
Dart常用工具类库common_utils
1、TimelineUtil : 时间轴.
2、TimerUtil : 倒计时,定时任务.
3、MoneyUtil : 精确转换,元转分,分转元,支持格式输出.
4、LogUtil : 简单封装打印日志.
5、DateUtil : 日期转换格式化输出.
6、RegexUtil : 正则验证手机号,身份证,邮箱等等.
7、NumUtil : 保留x位小数, 精确加、减、乘、除, 防止精度丢失.
8、ObjectUtil : 判断对象是否为空(String List Map),判断两个List是否相等.
9、EnDecodeUtil : md5加密,Base64加/解密.
10、TextUtil : 银行卡号每隔4位加空格,每隔3三位加逗号,隐藏手机号等等.

SpUtil

单例”同步”SharedPreferences工具类。支持get传入默认值,支持存储对象,支持存储对象数组。由于SharedPreferences需要异步生成才能使用。
方式一:简单粗暴,等待Sp生成后再运行app。示例项目一
方式二:增加splash页面,在splash页面完初始化,进入主页就可以同步使用。示例项目二

  1. /// 方式一
  2. /// 等待sp初始化完成后再运行app。
  3. /// sp初始化时间 release模式下30ms左右,debug模式下100多ms。
  4. void main() async {
  5. await SpUtil.getInstance();
  6. runApp(MyApp());
  7. }
  8. class MyAppState extends State<MyApp> {
  9. @override
  10. void initState() {
  11. super.initState();
  12. /// 同步使用Sp。
  13. SpUtil.remove("username");
  14. String defName = SpUtil.getString("username", defValue: "sky");
  15. SpUtil.putString("username", "sky24");
  16. String name = SpUtil.getString("username");
  17. print("MyApp defName: $defName, name: $name");
  18. }
  19. @override
  20. Widget build(BuildContext context) {
  21. return MaterialApp();
  22. }
  23. }
  24. // App启动时读取Sp数据,需要异步等待Sp初始化完成。
  25. await SpUtil.getInstance();
  26. // 常规存取示例。
  27. //支持默认值。String,bool,int,double,StringList。
  28. SpUtil.putString("username", "sky24");
  29. String defName = SpUtil.getString("username");
  30. String defName = SpUtil.getString("username", defValue: "sky");
  31. // 存取实体对象示例。
  32. City city = new City();
  33. city.name = "成都市";
  34. // 存储实体对象。
  35. SpUtil.putObject("loc_city", city);
  36. // 读取实体对象。
  37. City hisCity = SpUtil.getObj("loc_city", (v) => City.fromJson(v));
  38. // 存取实体对象list示例。
  39. List<City> list = new List();
  40. list.add(new City(name: "成都市"));
  41. list.add(new City(name: "北京市"));
  42. // 存储实体对象list。
  43. SpUtil.putObjectList("loc_city_list", list);
  44. // 读取实体对象list。
  45. List<City> dataList = SpUtil.getObjList("loc_city_list", (v) => City.fromJson(v));
  46. 复制代码

ScreenUtil

屏幕适配,兼容横/纵屏切换适配,获取屏幕宽、高、密度,AppBar高,状态栏高度,屏幕方向.

  1. 一、不依赖context
  2. // 屏幕宽
  3. double screenWidth = ScreenUtil.getInstance().screenWidth;
  4. // 屏幕高
  5. double screenHeight = ScreenUtil.getInstance().screenHeight;
  6. // 屏幕像素密度
  7. double screenDensity = ScreenUtil.getInstance().screenDensity;
  8. // 系统状态栏高度
  9. double statusBarHeight = ScreenUtil.getInstance().statusBarHeight;
  10. // BottomBar高度
  11. double bottomBarHeight = ScreenUtil.getInstance().bottomBarHeight;
  12. // 系统AppBar高度
  13. double appBarHeight = ScreenUtil.getInstance().appBarHeight;
  14. // 获取适配后的尺寸
  15. double adapterSize = ScreenUtil.getInstance().getAdapterSize(100);
  16. 二、依赖context
  17. // 屏幕宽
  18. double screenWidth = ScreenUtil.getScreenW(context);
  19. // 屏幕高
  20. double screenHeight = ScreenUtil.getScreenH(context);
  21. // 屏幕像素密度
  22. double screenDensity = ScreenUtil.getScreenDensity(context);
  23. // 系统状态栏高度
  24. double statusBarHeight = ScreenUtil.getStatusBarH(context);
  25. // BottomBar高度
  26. double bottomBarHeight = ScreenUtil.getBottomBarH(context);
  27. // 屏幕方向
  28. Orientation orientation = ScreenUtil.getOrientation(context);
  29. // 获取适配后的尺寸
  30. double adapterSize = ScreenUtil.getAdapterSizeCtx(context, 100);
  31. 复制代码

WidgetUtil

监听Widget渲染状态,获取Widget宽高,在屏幕上的坐标,获取网络/本地图片尺寸.

  1. asyncPrepare : Widget渲染监听,监听widget宽高变化,callback返回宽高等参数.
  2. getWidgetBounds : 获取widget 宽高.
  3. getWidgetLocalToGlobal : 获取widget在屏幕上的坐标.
  4. getImageWH : 获取图片宽高,加载错误情况返回 Rect.zero.(单位 px).
  5. getImageWHE : 获取图片宽高,加载错误会抛出异常.(单位 px).
  6. /// widget渲染监听。
  7. WidgetUtil widgetUtil = new WidgetUtil();
  8. widgetUtil.asyncPrepare(context, true, (Rect rect) {
  9. // widget渲染完成。
  10. });
  11. /// widget宽高。
  12. Rect rect = WidgetUtil.getWidgetBounds(context);
  13. /// widget在屏幕上的坐标。
  14. Offset offset = WidgetUtil.getWidgetLocalToGlobal(context);
  15. /// 获取CachedNetworkImage下的图片尺寸
  16. Image image = new Image(image: new CachedNetworkImageProvider("Url"));
  17. Rect rect1 = await WidgetUtil.getImageWH(image: image);
  18. /// 其他image
  19. Image imageAsset = new Image.asset("");
  20. Image imageFile = new Image.file(File("path"));
  21. Image imageNetwork = new Image.network("url");
  22. Image imageMemory = new Image.memory(null);
  23. /// 获取网络图片尺寸
  24. Rect rect2 = await WidgetUtil.getImageWH(url: "Url");
  25. /// 获取本地图片尺寸 localUrl 需要全路径
  26. Rect rect3 = await WidgetUtil.getImageWH(localUrl: "assets/images/3.0x/ali_connors.png");
  27. /// 其他方式
  28. WidgetUtil.getImageWH(url: "Url").then((Rect rect) {
  29. print("rect: " + rect.toString();
  30. });
  31. WidgetUtil.getImageWHE(url: "Url").then((Rect rect) {
  32. print("rect: " + rect.toString();
  33. }).catchError((error) {
  34. print("rect: " + error.toString();
  35. });
  36. 复制代码

DirectoryUtil

文件目录工具类.

  1. await DirectoryUtil.getInstance();
  2. String path = DirectoryUtil.getTempPath(fileName: 'demo.png', category: 'image');
  3. String path = DirectoryUtil.getAppDocPath(fileName: 'demo.mp4', category: 'video');
  4. String path = DirectoryUtil.getStoragePath(fileName: 'flutterwanandroid.apk', package: 'com.thl.flutterwanandroid');
  5. Directory dir = DirectoryUtil.createTempDirSync(package: 'doc', category: 'image');
  6. 复制代码

DioUtil

单例DioUtil,已迁移至此处DioUtil。(基于v1.0.13,仅供参考~)

  1. // 打开debug模式.
  2. DioUtil.openDebug();
  3. // 配置网络参数.
  4. Options options = DioUtil.getDefOptions();
  5. options.baseUrl = "http://www.wanandroid.com/";
  6. HttpConfig config = new HttpConfig(options: options);
  7. DioUtil().setConfig(config);
  8. // 两种单例请求方式.
  9. DioUtil().request<List>(Method.get, "banner/json");
  10. DioUtil.getInstance().request(Method.get, "banner/json");
  11. //示例
  12. LoginReq req = new LoginReq('username', 'password');
  13. DioUtil().request(Method.post, "user/login",data: req.toJson());
  14. //示例
  15. FormData formData = new FormData.from({
  16. "username": "username",
  17. "password": "password",
  18. });
  19. DioUtil().requestR(Method.post, "user/login",data: rformData);
  20. 复制代码

TextUtil

  1. isEmpty : isEmpty.(新)
  2. formatSpace4 : 每隔4位加空格,格式化银行卡.(新)
  3. formatComma3 : 每隔3三位加逗号.(新)
  4. hidePhone : 隐藏手机号.(新)
  5. replace : replace.(新)
  6. split : split.(新)
  7. /// example
  8. String phoneNo = TextUtil.formatSpace4("15845678910"); // 1584 5678 910
  9. String num = TextUtil.formatComma3("1234"); // 123,4
  10. String phoneNo = TextUtil.hidePhone("15845678910")// 158****8910
  11. 复制代码

EnDecodeUtil

  1. encodeMd5 : md5 加密.(新)
  2. encodeBase64 : Base64加密.(新)
  3. decodeBase64() : Base64解密.(新)
  4. 复制代码

TimelineUtil

时间轴。例如:微信朋友圈,微博时间轴,支付宝时间轴。

  1. ///(xx)为可配置输出
  2. enum DayFormat {
  3. ///(小于10s->刚刚)、x分钟、x小时、(昨天)、x天.
  4. Simple,
  5. ///(小于10s->刚刚)、x分钟、x小时、[今年: (昨天/1天前)、(2天前)、MM-dd],[往年: yyyy-MM-dd].
  6. Common,
  7. ///小于10s->刚刚)、x分钟、x小时、[今年: (昨天 HH:mm/1天前)、(2天前)、MM-dd HH:mm],[往年: yyyy-MM-dd HH:mm].
  8. Full,
  9. }
  10. ///Timeline信息配置.
  11. abstract class TimelineInfo {
  12. String suffixAgo(); //suffix ago(后缀 后).
  13. String suffixAfter(); //suffix after(后缀 前).
  14. String lessThanTenSecond() => ''; //just now(刚刚).
  15. String customYesterday() => ''; //Yesterday(昨天).优先级高于keepOneDay
  16. bool keepOneDay(); //保持1天,example: true -> 1天前, false -> MM-dd.
  17. bool keepTwoDays(); //保持2天,example: true -> 2天前, false -> MM-dd.
  18. String oneMinute(int minutes); //a minute(1分钟).
  19. String minutes(int minutes); //x minutes(x分钟).
  20. String anHour(int hours); //an hour(1小时).
  21. String hours(int hours); //x hours(x小时).
  22. String oneDay(int days); //a day(1天).
  23. String days(int days); //x days(x天).
  24. DayFormat dayFormat(); //format.
  25. }
  26. setLocaleInfo : 自定义设置配置信息.
  27. formatByDateTime : 格式输出时间轴信息 by DateTime .
  28. format : 格式输出时间轴信息.
  29. 复制代码

TimerUtil

倒计时,定时任务。

  1. setInterval : 设置Timer间隔.
  2. setTotalTime : 设置倒计时总时间.
  3. startTimer() : 启动定时Timer.
  4. startCountDown : 启动倒计时Timer.
  5. updateTotalTime : 重设倒计时总时间.
  6. cancel : 取消计时器.
  7. setOnTimerTickCallback : 计时器回调.
  8. isActive : Timer是否启动.
  9. TimerUtil timerUtil;
  10. //定时任务test
  11. timerUtil = new TimerUtil(mInterval: 1000);
  12. //timerUtil.setInterval(1000);
  13. timerUtil.setOnTimerTickCallback((int value) {
  14. LogUtil.e("TimerTick: " + value.toString());
  15. });
  16. timerUtil.startTimer();
  17. if (timerUtil != null) timerUtil.cancel(); //dispose()
  18. TimerUtil timerCountDown;
  19. //倒计时test
  20. timerCountDown = new TimerUtil(mInterval: 1000, mTotalTime: 3 * 1000);
  21. // timerCountDown.setInterval(1000);
  22. // timerCountDown.setTotalTime(3 * 1000);
  23. timerCountDown.setOnTimerTickCallback((int value) {
  24. double tick = (value / 1000);
  25. LogUtil.e("CountDown: " + tick.toInt().toString());
  26. });
  27. timerCountDown.startCountDown();
  28. if (timerCountDown != null) timerCountDown.cancel(); //dispose()
  29. 复制代码

MoneyUtil

金额工具类,分/元互转,精确转换,防止精度丢失。

  1. changeF2Y : 元, format格式输出.
  2. changeFStr2YWithUnit : 分字符串 元, format unit 格式 输出.
  3. changeF2YWithUnit : 元, format unit 格式 输出.
  4. changeYWithUnit : 元, format unit 格式 输出.
  5. changeY2F : 分.
  6. 复制代码

LogUtil

简单封装打印日志,可完整输出超长log。

  1. init(isDebug, tag) : isDebug: 模式, tag 标签.
  2. e(object, tag) : 日志e
  3. v(object, tag) : 日志v,只在debug模式输出.
  4. 复制代码

DateUtil

日期工具类,支付自定义格式输出。

  1. enum DateFormat {
  2. DEFAULT, //yyyy-MM-dd HH:mm:ss.SSS
  3. NORMAL, //yyyy-MM-dd HH:mm:ss
  4. YEAR_MONTH_DAY_HOUR_MINUTE, //yyyy-MM-dd HH:mm
  5. YEAR_MONTH_DAY, //yyyy-MM-dd
  6. YEAR_MONTH, //yyyy-MM
  7. MONTH_DAY, //MM-dd
  8. MONTH_DAY_HOUR_MINUTE, //MM-dd HH:mm
  9. HOUR_MINUTE_SECOND, //HH:mm:ss
  10. HOUR_MINUTE, //HH:mm
  11. ZH_DEFAULT, //yyyy年MM月dd日 HH时mm分ss秒SSS毫秒
  12. ZH_NORMAL, //yyyy年MM月dd日 HH时mm分ss秒 / timeSeparate: ":" --> yyyy年MM月dd日 HH:mm:ss
  13. ZH_YEAR_MONTH_DAY_HOUR_MINUTE, //yyyy年MM月dd日 HH时mm分 / timeSeparate: ":" --> yyyy年MM月dd日 HH:mm
  14. ZH_YEAR_MONTH_DAY, //yyyy年MM月dd日
  15. ZH_YEAR_MONTH, //yyyy年MM月
  16. ZH_MONTH_DAY, //MM月dd日
  17. ZH_MONTH_DAY_HOUR_MINUTE, //MM月
  18. dd HHmm / timeSeparate: ":" --> MMdd HH:mm
  19. ZH_HOUR_MINUTE_SECOND, //HH时mm分ss秒
  20. ZH_HOUR_MINUTE, //HH时mm分
  21. }
  22. formatDate : 格式化日期 DateTime.(新)
  23. formatDateStr : 格式化日期 字符串.(新)
  24. formatDateMs : 格式化日期 毫秒.(新)
  25. getNowDateMs : 获取现在 毫秒.
  26. getNowDateStr : 获取现在 日期字符串.(yyyy-MM-dd HH:mm:ss)
  27. getDateMsByTimeStr : 获取毫秒 By 日期字符串(Format格式输出).
  28. getDateStrByTimeStr : 获取日期字符串 By 日期字符串(Format格式输出).
  29. getDateStrByMs : 获取日期字符串 By 毫秒(Format格式输出).
  30. getDateStrByDateTime : 获取日期字符串 By DateTime(Format格式输出).
  31. getWeekDay : 获取WeekDay By DateTime.
  32. getZHWeekDay : 获取星期 By DateTime.
  33. getWeekDayByMs : 获取WeekDay By 毫秒.
  34. getZHWeekDayByMs : 获取星期 By 毫秒.
  35. isLeapYearByYear : 是否是闰年.
  36. yearIsEqual : 是否同年.
  37. getDayOfYear : 在今年的第几天.
  38. isYesterday : 是否是昨天.
  39. isToday : 是否是今天.
  40. isWeek : 是否是本周.(新)
  41. /// DateUtil
  42. DateUtil.formatDateMs(DateTime.now().millisecondsSinceEpoch, format: DataFormats.full); // 2019-07-09 16:51:14
  43. DateUtil.formatDateStr("2019-07-09 16:51:14", format: "yyyy/M/d HH:mm:ss"); // 2019/7/9 16:51:14
  44. DateUtil.formatDate(DateTime.now(), format: "yyyy/MM/dd HH:mm:ss"); // 2019/07/09 16:51:14
  45. 复制代码

RegexUtil

正则工具类。

  1. isMobileSimple : 简单验证手机号
  2. isMobileExact : 精确验证手机号
  3. isTel : 验证电话号码
  4. isIDCard : 验证身份证号码
  5. isIDCard15 : 验证身份证号码 15
  6. isIDCard18 : 简单验证身份证号码 18
  7. isIDCard18Exact : 精确验证身份证号码 18
  8. isEmail : 验证邮箱
  9. isURL : 验证 URL
  10. isZh : 验证汉字
  11. isDate : 验证 yyyy-MM-dd 格式的日期校验,已考虑平闰年
  12. isIP : 验证 IP 地址
  13. 复制代码

NumUtil

数值运算工具类,保留x位小数, 精确加、减、乘、除, 防止精度丢失.

  1. getIntByValueStr : 数字字符串转int.
  2. getDoubleByValueStr : 数字字符串转double.
  3. getNumByValueStr : 保留x位小数 by 数字字符串.
  4. getNumByValueDouble : 保留x位小数 by double.
  5. add : 加(精确相加,防止精度丢失).
  6. subtract : 减(精确相减,防止精度丢失).
  7. multiply : 乘(精确相乘,防止精度丢失).
  8. divide : 除(精确相除,防止精度丢失).
  9. 复制代码

ObjectUtil

判断对象是否为空(String List Map),判断两个List是否相等.

  1. isEmptyString : 判断String是否为空.
  2. isEmptyList : 判断List是否为空.
  3. isEmptyMap : 判断Map是否为空.
  4. isEmpty : 判断对象是否为空.(String List Map).
  5. isNotEmpty : 判断对象是否非空.(String List Map).
  6. twoListIsEqual : 判断两个List是否相等.
  7. 复制代码

关于作者

GitHub : Sky24n
简书 : Sky24n
掘金 : Sky24n
Pub : Sky24n

项目示例

GitHub : flutter_demos
APK :点击下载 v0.2.1
Android扫码下载APK:
Flutter常用工具类收集 - 图1

Screenshot

Flutter常用工具类收集 - 图2 Flutter常用工具类收集 - 图3

链接:https://juejin.im/post/5d0f4c54f265da1bb31c426c
来源:掘金