thl 6 anni fa
parent
commit
c6179c2b66
6 ha cambiato i file con 245 aggiunte e 19 eliminazioni
  1. 4 0
      CHANGELOG.md
  2. 62 11
      README.md
  3. 102 6
      doc/UPDATELOG.md
  4. 20 0
      lib/src/utils.dart
  5. 55 0
      lib/src/widget_util.dart
  6. 2 2
      pubspec.yaml

+ 4 - 0
CHANGELOG.md

@@ -1,3 +1,7 @@
+### 0.2.5
+
+* TODO: WidgetUtil add getImageWH(x,x,x,x).
+
 ### 0.2.4
 
 * TODO: synchronized : '>=0.1.0 <3.0.0' , shared_preferences : '>=0.1.1 <1.0.0' .

+ 62 - 11
README.md

@@ -10,10 +10,48 @@
 ### 使用方式:
 ```yaml
 dependencies:
-  flustars: ^0.2.4
+  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<Rect> getImageWH({Image image, String url, String localUrl, String package});  
+  
+/// get image width height, load error throw exception.(unit px)  
+/// 获取图片宽高,加载错误会抛出异常.(单位 px)  
+Future<Rect> 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'  
@@ -81,7 +119,7 @@ SpUtil.getInt('key', defValue: 0);
 ### [Flutter工具类库 flustars][flustars_github]   
  1、SpUtil       : 单例"同步" SharedPreferences 工具类.  
  2、ScreenUtil   : 屏幕适配,获取屏幕宽、高、密度,AppBar高,状态栏高度,屏幕方向.  
- 3、WidgetUtil   : 获取Widget宽高,在屏幕上的坐标.  
+ 3、WidgetUtil   : 获取Widget宽高,在屏幕上的坐标,获取图片尺寸.  
 
 ### [Dart常用工具类库 common_utils][common_utils_github]  
  1、TimelineUtil : 时间轴.(新)  
@@ -193,18 +231,12 @@ Orientation orientation = ScreenUtil.getOrientation(context);
 asyncPrepare              : Widget渲染监听,监听widget宽高变化,callback返回宽高等参数.
 getWidgetBounds           : 获取widget 宽高.
 getWidgetLocalToGlobal    : 获取widget在屏幕上的坐标.
+getImageWH                : 获取图片宽高,加载错误情况返回 Rect.zero.(单位 px). 
+getImageWHE               : 获取图片宽高,加载错误会抛出异常.(单位 px). 
 ```
 
-### 关于作者
-GitHub : [Sky24n](https://github.com/Sky24n)  
-简书 &nbsp;&nbsp;&nbsp;&nbsp;: [Sky24n](https://www.jianshu.com/u/cbf2ad25d33a)  
-掘金 &nbsp;&nbsp;&nbsp;&nbsp;: [Sky24n](https://juejin.im/user/5b9e8a92e51d453df0440422/posts)  
-Pub &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: [Sky24n](https://pub.flutter-io.cn/packages?q=email%3A863764940%40qq.com)    
-Email &nbsp;&nbsp;: 863764940@qq.com  
-如果您觉得本项目不错的话,来个star支持下作者吧! 
-
 ### Demo Github : [flutter_wanandroid][flutter_wanandroid_github] 
-## 点击下载APK : [v0.1.2][flutter_wanandroid_apk] 
+## 点击下载APK : [v0.1.x][flutter_wanandroid_apk] 
 ## 扫码下载APK :
   ![flutter_wanandroid][flutter_wanandroid_qr] 
 
@@ -213,6 +245,25 @@ Email &nbsp;&nbsp;: 863764940@qq.com
 <img src="https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_demos/Screenshot_20180930-012431.jpg" width="200">  <img src="https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_demos/Screenshot_20180919-231618.jpg" width="200">   <img src="https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_demos/Screenshot_20180926-144840.png" width="200">  
 <img src="https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_demos/Screenshot_20180919-224204.jpg" width="200">   <img src="https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_demos/Screenshot_20180919-224146.jpg" width="200">   <img src="https://raw.githubusercontent.com/Sky24n/LDocuments/master/AppImgs/flutter_demos/Screenshot_20180919-224231.jpg" width="200">   
 
+### 关于作者
+GitHub : [Sky24n](https://github.com/Sky24n)  
+简书 &nbsp;&nbsp;&nbsp;&nbsp;: [Sky24n](https://www.jianshu.com/u/cbf2ad25d33a)  
+掘金 &nbsp;&nbsp;&nbsp;&nbsp;: [Sky24n](https://juejin.im/user/5b9e8a92e51d453df0440422/posts)  
+Pub &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: [Sky24n](https://pub.flutter-io.cn/packages?q=email%3A863764940%40qq.com)    
+Email &nbsp;&nbsp;: 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

+ 102 - 6
doc/UPDATELOG.md

@@ -1,14 +1,110 @@
 ## 更新说明
+v0.2.5 (2019.03.07)  
+WidgetUtil 新增获取图片尺寸。 
+/// get image width height,load error return Rect.zero.(unit px)  
+/// 获取图片宽高,加载错误情况返回 Rect.zero.(单位 px)  
+Future<Rect> getImageWH({Image image, String url, String localUrl, String package});  
+  
+/// get image width height, load error throw exception.(unit px)  
+/// 获取图片宽高,加载错误会抛出异常.(单位 px)  
+Future<Rect> 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<String, dynamic> json) : name = json['name'];
+
+  Map<String, dynamic> 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<City> list = new List();
+    list.add(new City(name: "成都市"));
+    list.add(new City(name: "北京市"));
+    SpUtil.putObjectList("loc_city_list", list);
+
+    List<Map> dataList = SpUtil.getObjectList("loc_city_list");
+    List<City> _cityList = dataList?.map((value) {
+      return City.fromJson(value);
+    })?.toList();
+
+    print("thll List: " + (_cityList == null ? "null" : _cityList.toString()));
+}
+    
+```
 
-#### v0.2.2(2019.02.04) 
-v0.2.2 SpUtil新增get默认值。  
+v0.2.2(2019.02.04) 
+SpUtil新增get默认值。  
 SpUtil.getString('key', defValue: '');    
 SpUtil.getInt('key', defValue: 0);
 
-#### v0.1.9(2019.01.07)   
+v0.1.9(2019.01.07)   
 移除DioUtil,如有需要,请到[flutter_wanandroid][flutter_wanandroid_github]该项目中copy。
 
-#### v0.1.8(2018.12.29)   
+v0.1.8(2018.12.29)   
 ScreenUtil 屏幕适配更新。  
 方案一、不依赖context
 ```
@@ -63,7 +159,7 @@ ScreenUtil.getScaleH(context, size); //返回根据屏幕高适配后尺寸 (
 ScreenUtil.getScaleSp(context, size) ;//返回根据屏幕宽适配后字体尺寸
 ```
 
-#### v0.1.6(2018.12.20)  
+v0.1.6(2018.12.20)  
 新增网络请求工具DioUtil, 单例模式,可输出请求日志。详细请求+解析请参考[flutter_wanandroid][flutter_wanandroid_github]项目。
 ```
 // 打开debug模式.
@@ -98,7 +194,7 @@ 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: }
 ```
 
-#### v0.1.5(2018.12.14)  
+v0.1.5(2018.12.14)  
 ScreenUtil 新增屏幕适配。
 ```
 //如果设计稿尺寸默认配置一致,无需该设置。  配置设计稿尺寸 默认 360.0 / 640.0 / 3.0

+ 20 - 0
lib/src/utils.dart

@@ -0,0 +1,20 @@
+/**
+ * @Author: thl
+ * @GitHub: https://github.com/Sky24n
+ * @Email: 863764940@qq.com
+ * @Email: sky24no@gmail.com
+ * @Description: Widget Util.
+ * @Date: 2019/03/07
+ */
+
+/// Utils.
+class Utils {
+  /// isEmpty.
+  static bool isEmpty(Object value) {
+    if (value == null) return true;
+    if (value is String && value.isEmpty) {
+      return true;
+    }
+    return false;
+  }
+}

+ 55 - 0
lib/src/widget_util.dart

@@ -1,3 +1,5 @@
+import 'dart:async';
+import 'package:flustars/src/utils.dart';
 import 'package:flutter/widgets.dart';
 
 /**
@@ -62,4 +64,57 @@ class WidgetUtil {
     RenderBox box = context.findRenderObject();
     return box == null ? Offset.zero : box.localToGlobal(Offset.zero);
   }
+
+  /// get image width height,load error return Rect.zero.(unit px)
+  /// 获取图片宽高,加载错误情况返回 Rect.zero.(单位 px)
+  /// image
+  /// url network
+  /// local url , package
+  static Future<Rect> getImageWH(
+      {Image image, String url, String localUrl, String package}) {
+    if (Utils.isEmpty(image) && Utils.isEmpty(url) && Utils.isEmpty(localUrl)) {
+      return Future.value(Rect.zero);
+    }
+    Completer<Rect> completer = Completer<Rect>();
+    Image img = image != null
+        ? image
+        : ((url != null && url.isNotEmpty)
+            ? Image.network(url)
+            : Image.asset(localUrl, package: package));
+    img.image.resolve(new ImageConfiguration()).addListener(
+        (ImageInfo info, bool _) {
+      completer.complete(Rect.fromLTWH(
+          0, 0, info.image.width.toDouble(), info.image.height.toDouble()));
+    }, onError: (dynamic exception, StackTrace stackTrace) {
+      completer.complete(Rect.zero);
+    });
+    return completer.future;
+  }
+
+  /// get image width height, load error throw exception.(unit px)
+  /// 获取图片宽高,加载错误会抛出异常.(单位 px)
+  /// image
+  /// url network
+  /// local url (full path/全路径,example:"assets/images/ali_connors.png",""assets/images/3.0x/ali_connors.png"" );
+  /// package
+  static Future<Rect> getImageWHE(
+      {Image image, String url, String localUrl, String package}) {
+    if (Utils.isEmpty(image) && Utils.isEmpty(url) && Utils.isEmpty(localUrl)) {
+      return Future.error("image is null.");
+    }
+    Completer<Rect> completer = Completer<Rect>();
+    Image img = image != null
+        ? image
+        : ((url != null && url.isNotEmpty)
+            ? Image.network(url)
+            : Image.asset(localUrl, package: package));
+    img.image.resolve(new ImageConfiguration()).addListener(
+        (ImageInfo info, bool _) {
+      completer.complete(Rect.fromLTWH(
+          0, 0, info.image.width.toDouble(), info.image.height.toDouble()));
+    }, onError: (dynamic exception, StackTrace stackTrace) {
+      completer.completeError(exception, stackTrace);
+    });
+    return completer.future;
+  }
 }

+ 2 - 2
pubspec.yaml

@@ -1,6 +1,6 @@
 name: flustars
-description: Flutter common utils library. ScreenUtil, SpUtil, WidgetUtil.
-version: 0.2.4
+description: Flutter common utils library. SpUtil, ScreenUtil, WidgetUtil. SharedPreferences Util. Screen info & Screen adaptation. get image size.
+version: 0.2.5
 author: thl <863764940@qq.com>
 homepage: https://github.com/Sky24n/flustars