# flustars(Flutter常用工具类库) [![Pub](https://img.shields.io/pub/v/flustars.svg?style=flat-square)](https://pub.dartlang.org/packages/flustars) ## [flustars] Flutter常用工具类库。主要对第三方库封装,以便于使用。如果你有好的工具类欢迎PR. ### 关于使用本开源库 如果您是用于公司项目,请随意使用~ 如果您是用于开源项目,未经本人许可,请勿copy源码到您的项目使用! ### 使用方式: ```yaml dependencies: flustars: ^0.2.5 ``` ## [更新说明](./doc/UPDATELOG.md) v0.2.5 (2019.03.07) WidgetUtil 新增获取图片尺寸。 /// get image width height,load error return Rect.zero.(unit px) /// 获取图片宽高,加载错误情况返回 Rect.zero.(单位 px) Future getImageWH({Image image, String url, String localUrl, String package}); /// get image width height, load error throw exception.(unit px) /// 获取图片宽高,加载错误会抛出异常.(单位 px) Future getImageWHE({Image image, String url, String localUrl, String package}); ``` /// 获取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(); }); ``` v0.2.4 (2019.02.27) synchronized: '>=0.1.0 <3.0.0' hared_preferences: '>=0.1.1 <1.0.0' v0.2.3 (2019.02.26) shared_preferences & synchronized 修改为动态依赖~ SpUtil 新增putObject,getObject,putObjectList,getObjectList。 Object 需要实现fromJson,toJson。 ``` class City { String name; City({this.name}); City.fromJson(Map json) : name = json['name']; Map toJson() => { 'name': name, }; @override String toString() { StringBuffer sb = new StringBuffer('{'); sb.write("\"name\":\"$name\""); sb.write('}'); return sb.toString(); } } void _initAsync() async { await SpUtil.getInstance(); /// save object example. /// 存储实体对象示例。 City city = new City(); city.name = "成都市"; SpUtil.putObject("loc_city", city); Map dataStr = SpUtil.getObject("loc_city"); City hisCity = dataStr == null ? null : City.fromJson(dataStr); print("thll Str: " + (hisCity == null ? "null" : hisCity.toString())); /// save object list example. /// 存储实体对象List示例。 List list = new List(); list.add(new City(name: "成都市")); list.add(new City(name: "北京市")); SpUtil.putObjectList("loc_city_list", list); List dataList = SpUtil.getObjectList("loc_city_list"); List _cityList = dataList?.map((value) { return City.fromJson(value); })?.toList(); print("thll List: " + (_cityList == null ? "null" : _cityList.toString())); } ``` v0.2.2 SpUtil新增get默认值。 SpUtil.getString('key', defValue: ''); SpUtil.getInt('key', defValue: 0); ### [Flutter工具类库 flustars][flustars_github] 1、SpUtil : 单例"同步" SharedPreferences 工具类. 2、ScreenUtil : 屏幕适配,获取屏幕宽、高、密度,AppBar高,状态栏高度,屏幕方向. 3、WidgetUtil : 获取Widget宽高,在屏幕上的坐标,获取图片尺寸. ### [Dart常用工具类库 common_utils][common_utils_github] 1、TimelineUtil : 时间轴.(新) 2、TimerUtil : 倒计时,定时任务.(新) 3、MoneyUtil : 精确转换,元转分,分转元,支持格式输出.(新) 4、LogUtil : 简单封装打印日志.(新) 5、DateUtil : 日期转换格式化输出. 6、RegexUtil : 正则验证手机号,身份证,邮箱等等. 7、NumUtil : 保留x位小数, 精确加、减、乘、除, 防止精度丢失. 8、ObjectUtil : 判断对象是否为空(String List Map),判断两个List是否相等. ### Add dependency ```yaml dependencies: flustars: x.x.x #latest version ``` ### APIs * #### SpUtil -> [Example](https://github.com/Sky24n/flutter_wanandroid/blob/master/lib/ui/pages/demos/sp_util_page.dart) ``` putObject getObject putObjectList getObjectList getString putString getBool putBool getInt putInt getDouble putDouble getStringList putStringList getDynamic haveKey getKeys remove clear isInitialized ``` * #### ScreenUtil -> [Example](./example/lib/main.dart) ``` 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) : 返回根据屏幕宽适配后字体尺寸. // 屏幕宽 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); // 屏幕宽 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); ``` * #### WidgetUtil -> [Example](https://github.com/Sky24n/flutter_wanandroid/blob/master/lib/ui/pages/demos/widget_util_page.dart) ``` asyncPrepare : Widget渲染监听,监听widget宽高变化,callback返回宽高等参数. getWidgetBounds : 获取widget 宽高. getWidgetLocalToGlobal : 获取widget在屏幕上的坐标. getImageWH : 获取图片宽高,加载错误情况返回 Rect.zero.(单位 px). getImageWHE : 获取图片宽高,加载错误会抛出异常.(单位 px). ``` ### Demo Github : [flutter_wanandroid][flutter_wanandroid_github] ## 点击下载APK : [v0.1.x][flutter_wanandroid_apk] ## 扫码下载APK : ![flutter_wanandroid][flutter_wanandroid_qr] ### Screenshot ### 关于作者 GitHub : [Sky24n](https://github.com/Sky24n) 简书     : [Sky24n](https://www.jianshu.com/u/cbf2ad25d33a) 掘金     : [Sky24n](https://juejin.im/user/5b9e8a92e51d453df0440422/posts) Pub      : [Sky24n](https://pub.flutter-io.cn/packages?q=email%3A863764940%40qq.com) Email   : 863764940@qq.com 如果您觉得本项目不错的话,来个star支持下作者吧! 作者其他开源项目 | 库 | 功能 | | :------ | :------: | | [flutter_wanandroid](https://github.com/Sky24n/flutter_wanandroid) | Flutter完整项目,WanAndroid客户端,BLoC,RxDart... | | [GreenTravel](https://github.com/Sky24n/GreenTravel) | Flutter仿滴滴出行 | | [flustars](https://github.com/Sky24n/flustars) | Flutter常用工具类库,SpUtil, ScreenUtil,WidgetUtil. 也许是目前最好用的Sp工具类,也许是目前最好用的屏幕工具类。 | | [common_utils](https://github.com/Sky24n/common_utils) | Dart常用工具类库。包含日期,正则,倒计时,定时任务,时间轴等工具类。 | | [fluintl](https://github.com/Sky24n/fluintl) | Flutter国际化库,方便集成使用 | | [azlistview](https://github.com/flutterchina/azlistview) | Flutter城市列表,联系人列表,索引&悬停 | | [lpinyin](https://github.com/flutterchina/lpinyin) | Dart汉字转拼音库 | [flutter_wanandroid_github]: https://github.com/Sky24n/flutter_wanandroid [flutter_wanandroid_apk]: https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppStore/flutter_wanandroid.apk [flutter_wanandroid_qr]: https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_wanandroid/qrcode.png [flutter_demos_github]: https://github.com/Sky24n/flutter_demos [flutter_demos_apk]: https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppStore/flutter_demos.apk [flutter_demos_qr]: https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_demos/qrcode.png [common_utils_github]: https://github.com/Sky24n/common_utils [flustars_github]: https://github.com/Sky24n/flustars [jianshuSvg]: https://img.shields.io/badge/简书-@Sky24n-536dfe.svg [jianshu]: https://www.jianshu.com/u/cbf2ad25d33a [juejinSvg]: https://img.shields.io/badge/掘金-@Sky24n-536dfe.svg [juejin]: https://juejin.im/user/5b9e8a92e51d453df0440422