简介
官方文档 - 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
库为大家提供更多的工具类,例如SpUtil
,ScreenUtil
, 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
: 分字符串 转 元,format
与unit
格式 输出.changeF2YWithUnit
: 分 转 元,format
与unit
格式 输出.changeYWithUnit
: 元,format
与unit
格式 输出.changeY2F
: 元 转 分.
NumUtil
getIntByValueStr
: 数字字符串转intgetDoubleByValueStr
: 数字字符串转doublegetNumByValueStr
: 保留x位小数 by 数字字符串getNumByValueDouble
: 保留x位小数 by doubleisZero
: 是否为0add
: 加(精确相加,防止精度丢失)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
: 验证
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);
发表评论