| 
				
			 | 
			
			
				@@ -1,5 +1,4 @@ 
			 | 
		
	
		
			
			| 
				1
			 | 
			
				1
			 | 
			
			
				 import 'dart:async'; 
			 | 
		
	
		
			
			| 
				2
			 | 
			
				
			 | 
			
			
				-import 'dart:io'; 
			 | 
		
	
		
			
			| 
				3
			 | 
			
				2
			 | 
			
			
				 import 'dart:typed_data'; 
			 | 
		
	
		
			
			| 
				4
			 | 
			
				3
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				5
			 | 
			
				4
			 | 
			
			
				 import 'package:flutter/material.dart'; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -54,8 +53,24 @@ class _PhotoPreviewPageState extends State<PhotoPreviewPage> { 
			 | 
		
	
		
			
			| 
				54
			 | 
			
				53
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				55
			 | 
			
				54
			 | 
			
			
				   bool get changeProviderOnCheckChange => widget.changeProviderOnCheckChange; 
			 | 
		
	
		
			
			| 
				56
			 | 
			
				55
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				57
			 | 
			
				
			 | 
			
			
				-  List<ImageEntity> get previewSelectedList => 
			 | 
		
	
		
			
			| 
				58
			 | 
			
				
			 | 
			
			
				-      widget.result.previewSelectedList; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				56
			 | 
			
			
				+  PhotoPreviewResult get result => widget.result; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				57
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				58
			 | 
			
			
				+  /// 缩略图用的数据 
			 | 
		
	
		
			
			| 
				
			 | 
			
				59
			 | 
			
			
				+  /// 
			 | 
		
	
		
			
			| 
				
			 | 
			
				60
			 | 
			
			
				+  /// 用于与provider数据联动 
			 | 
		
	
		
			
			| 
				
			 | 
			
				61
			 | 
			
			
				+  List<ImageEntity> get previewList { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				62
			 | 
			
			
				+    return selectedProvider.selectedList; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				63
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				64
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				65
			 | 
			
			
				+  /// 选中的数据 
			 | 
		
	
		
			
			| 
				
			 | 
			
				66
			 | 
			
			
				+  List<ImageEntity> _selectedList = []; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				67
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				68
			 | 
			
			
				+  List<ImageEntity> get selectedList { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				69
			 | 
			
			
				+    if (changeProviderOnCheckChange) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				70
			 | 
			
			
				+      return previewList; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				71
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				72
			 | 
			
			
				+    return _selectedList; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				73
			 | 
			
			
				+  } 
			 | 
		
	
		
			
			| 
				59
			 | 
			
				74
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				60
			 | 
			
				75
			 | 
			
			
				   PageController pageController; 
			 | 
		
	
		
			
			| 
				61
			 | 
			
				76
			 | 
			
			
				  
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -63,11 +78,14 @@ class _PhotoPreviewPageState extends State<PhotoPreviewPage> { 
			 | 
		
	
		
			
			| 
				63
			 | 
			
				78
			 | 
			
			
				   void initState() { 
			 | 
		
	
		
			
			| 
				64
			 | 
			
				79
			 | 
			
			
				     super.initState(); 
			 | 
		
	
		
			
			| 
				65
			 | 
			
				80
			 | 
			
			
				     pageChangeController.add(0); 
			 | 
		
	
		
			
			| 
				66
			 | 
			
				
			 | 
			
			
				-    previewSelectedList.clear(); 
			 | 
		
	
		
			
			| 
				67
			 | 
			
				
			 | 
			
			
				-    previewSelectedList.addAll(selectedProvider.selectedList); 
			 | 
		
	
		
			
			| 
				68
			 | 
			
				81
			 | 
			
			
				     pageController = PageController( 
			 | 
		
	
		
			
			| 
				69
			 | 
			
				82
			 | 
			
			
				       initialPage: widget.initIndex, 
			 | 
		
	
		
			
			| 
				70
			 | 
			
				83
			 | 
			
			
				     ); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				84
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				85
			 | 
			
			
				+    _selectedList.clear(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				86
			 | 
			
			
				+    _selectedList.addAll(selectedProvider.selectedList); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				87
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				88
			 | 
			
			
				+    result.previewSelectedList = _selectedList; 
			 | 
		
	
		
			
			| 
				71
			 | 
			
				89
			 | 
			
			
				   } 
			 | 
		
	
		
			
			| 
				72
			 | 
			
				90
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				73
			 | 
			
				91
			 | 
			
			
				   @override 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -128,7 +146,7 @@ class _PhotoPreviewPageState extends State<PhotoPreviewPage> { 
			 | 
		
	
		
			
			| 
				128
			 | 
			
				146
			 | 
			
			
				           var index = snapshot.data; 
			 | 
		
	
		
			
			| 
				129
			 | 
			
				147
			 | 
			
			
				           var data = list[index]; 
			 | 
		
	
		
			
			| 
				130
			 | 
			
				148
			 | 
			
			
				           return CheckboxListTile( 
			 | 
		
	
		
			
			| 
				131
			 | 
			
				
			 | 
			
			
				-            value: previewSelectedList.contains(data), 
			 | 
		
	
		
			
			| 
				
			 | 
			
				149
			 | 
			
			
				+            value: selectedList.contains(data), 
			 | 
		
	
		
			
			| 
				132
			 | 
			
				150
			 | 
			
			
				             onChanged: (bool check) { 
			 | 
		
	
		
			
			| 
				133
			 | 
			
				151
			 | 
			
			
				               if (changeProviderOnCheckChange) { 
			 | 
		
	
		
			
			| 
				134
			 | 
			
				152
			 | 
			
			
				                 _onChangeProvider(check, index); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -154,9 +172,9 @@ class _PhotoPreviewPageState extends State<PhotoPreviewPage> { 
			 | 
		
	
		
			
			| 
				154
			 | 
			
				172
			 | 
			
			
				   void _onCheckInOnlyPreview(bool check, int index) { 
			 | 
		
	
		
			
			| 
				155
			 | 
			
				173
			 | 
			
			
				     var item = list[index]; 
			 | 
		
	
		
			
			| 
				156
			 | 
			
				174
			 | 
			
			
				     if (check) { 
			 | 
		
	
		
			
			| 
				157
			 | 
			
				
			 | 
			
			
				-      previewSelectedList.add(item); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				175
			 | 
			
			
				+      selectedList.add(item); 
			 | 
		
	
		
			
			| 
				158
			 | 
			
				176
			 | 
			
			
				     } else { 
			 | 
		
	
		
			
			| 
				159
			 | 
			
				
			 | 
			
			
				-      previewSelectedList.remove(item); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				177
			 | 
			
			
				+      selectedList.remove(item); 
			 | 
		
	
		
			
			| 
				160
			 | 
			
				178
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				161
			 | 
			
				179
			 | 
			
			
				     pageChangeController.add(index); 
			 | 
		
	
		
			
			| 
				162
			 | 
			
				180
			 | 
			
			
				   } 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -165,12 +183,9 @@ class _PhotoPreviewPageState extends State<PhotoPreviewPage> { 
			 | 
		
	
		
			
			| 
				165
			 | 
			
				183
			 | 
			
			
				   void _onChangeProvider(bool check, int index) { 
			 | 
		
	
		
			
			| 
				166
			 | 
			
				184
			 | 
			
			
				     var item = list[index]; 
			 | 
		
	
		
			
			| 
				167
			 | 
			
				185
			 | 
			
			
				     if (check) { 
			 | 
		
	
		
			
			| 
				168
			 | 
			
				
			 | 
			
			
				-      if (selectedProvider.addSelectEntity(item)) { 
			 | 
		
	
		
			
			| 
				169
			 | 
			
				
			 | 
			
			
				-        previewSelectedList.add(item); 
			 | 
		
	
		
			
			| 
				170
			 | 
			
				
			 | 
			
			
				-      } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				186
			 | 
			
			
				+      selectedProvider.addSelectEntity(item); 
			 | 
		
	
		
			
			| 
				171
			 | 
			
				187
			 | 
			
			
				     } else { 
			 | 
		
	
		
			
			| 
				172
			 | 
			
				188
			 | 
			
			
				       selectedProvider.removeSelectEntity(item); 
			 | 
		
	
		
			
			| 
				173
			 | 
			
				
			 | 
			
			
				-      previewSelectedList.remove(item); 
			 | 
		
	
		
			
			| 
				174
			 | 
			
				189
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				175
			 | 
			
				190
			 | 
			
			
				     pageChangeController.add(index); 
			 | 
		
	
		
			
			| 
				176
			 | 
			
				191
			 | 
			
			
				   } 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -187,18 +202,21 @@ class _PhotoPreviewPageState extends State<PhotoPreviewPage> { 
			 | 
		
	
		
			
			| 
				187
			 | 
			
				202
			 | 
			
			
				   } 
			 | 
		
	
		
			
			| 
				188
			 | 
			
				203
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				189
			 | 
			
				204
			 | 
			
			
				   Widget _buildThumb() { 
			 | 
		
	
		
			
			| 
				190
			 | 
			
				
			 | 
			
			
				-    return Container( 
			 | 
		
	
		
			
			| 
				191
			 | 
			
				
			 | 
			
			
				-      height: 80.0, 
			 | 
		
	
		
			
			| 
				192
			 | 
			
				
			 | 
			
			
				-      child: ListView.builder( 
			 | 
		
	
		
			
			| 
				193
			 | 
			
				
			 | 
			
			
				-        itemBuilder: _buildThumbItem, 
			 | 
		
	
		
			
			| 
				194
			 | 
			
				
			 | 
			
			
				-        itemCount: previewSelectedList.length, 
			 | 
		
	
		
			
			| 
				195
			 | 
			
				
			 | 
			
			
				-        scrollDirection: Axis.horizontal, 
			 | 
		
	
		
			
			| 
				196
			 | 
			
				
			 | 
			
			
				-      ), 
			 | 
		
	
		
			
			| 
				
			 | 
			
				205
			 | 
			
			
				+    return StreamBuilder( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				206
			 | 
			
			
				+      builder: (ctx, snapshot) => Container( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				207
			 | 
			
			
				+            height: 80.0, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				208
			 | 
			
			
				+            child: ListView.builder( 
			 | 
		
	
		
			
			| 
				
			 | 
			
				209
			 | 
			
			
				+              itemBuilder: _buildThumbItem, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				210
			 | 
			
			
				+              itemCount: previewList.length, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				211
			 | 
			
			
				+              scrollDirection: Axis.horizontal, 
			 | 
		
	
		
			
			| 
				
			 | 
			
				212
			 | 
			
			
				+            ), 
			 | 
		
	
		
			
			| 
				
			 | 
			
				213
			 | 
			
			
				+          ), 
			 | 
		
	
		
			
			| 
				
			 | 
			
				214
			 | 
			
			
				+      stream: pageStream, 
			 | 
		
	
		
			
			| 
				197
			 | 
			
				215
			 | 
			
			
				     ); 
			 | 
		
	
		
			
			| 
				198
			 | 
			
				216
			 | 
			
			
				   } 
			 | 
		
	
		
			
			| 
				199
			 | 
			
				217
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				200
			 | 
			
				218
			 | 
			
			
				   Widget _buildThumbItem(BuildContext context, int index) { 
			 | 
		
	
		
			
			| 
				201
			 | 
			
				
			 | 
			
			
				-    var item = previewSelectedList[index]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				219
			 | 
			
			
				+    var item = previewList[index]; 
			 | 
		
	
		
			
			| 
				202
			 | 
			
				220
			 | 
			
			
				     return GestureDetector( 
			 | 
		
	
		
			
			| 
				203
			 | 
			
				221
			 | 
			
			
				       onTap: () => changeSelected(item, index), 
			 | 
		
	
		
			
			| 
				204
			 | 
			
				222
			 | 
			
			
				       child: Container( 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -213,7 +231,7 @@ class _PhotoPreviewPageState extends State<PhotoPreviewPage> { 
			 | 
		
	
		
			
			| 
				213
			 | 
			
				231
			 | 
			
			
				               child: StreamBuilder( 
			 | 
		
	
		
			
			| 
				214
			 | 
			
				232
			 | 
			
			
				                 stream: pageStream, 
			 | 
		
	
		
			
			| 
				215
			 | 
			
				233
			 | 
			
			
				                 builder: (BuildContext context, AsyncSnapshot snapshot) { 
			 | 
		
	
		
			
			| 
				216
			 | 
			
				
			 | 
			
			
				-                  if (previewSelectedList.contains(item)) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				234
			 | 
			
			
				+                  if (selectedList.contains(item)) { 
			 | 
		
	
		
			
			| 
				217
			 | 
			
				235
			 | 
			
			
				                     return Container(); 
			 | 
		
	
		
			
			| 
				218
			 | 
			
				236
			 | 
			
			
				                   } 
			 | 
		
	
		
			
			| 
				219
			 | 
			
				237
			 | 
			
			
				                   return Container( 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -247,13 +265,15 @@ class _BigPhotoImageState extends State<BigPhotoImage> 
			 | 
		
	
		
			
			| 
				247
			 | 
			
				265
			 | 
			
			
				     with AutomaticKeepAliveClientMixin { 
			 | 
		
	
		
			
			| 
				248
			 | 
			
				266
			 | 
			
			
				   @override 
			 | 
		
	
		
			
			| 
				249
			 | 
			
				267
			 | 
			
			
				   Widget build(BuildContext context) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				268
			 | 
			
			
				+    var width = MediaQuery.of(context).size.width; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				269
			 | 
			
			
				+    var height = MediaQuery.of(context).size.height; 
			 | 
		
	
		
			
			| 
				250
			 | 
			
				270
			 | 
			
			
				     return FutureBuilder( 
			 | 
		
	
		
			
			| 
				251
			 | 
			
				
			 | 
			
			
				-      future: widget.imageEntity.thumbDataWithSize(1300, 1300), 
			 | 
		
	
		
			
			| 
				
			 | 
			
				271
			 | 
			
			
				+      future: 
			 | 
		
	
		
			
			| 
				
			 | 
			
				272
			 | 
			
			
				+          widget.imageEntity.thumbDataWithSize(width.floor(), height.floor()), 
			 | 
		
	
		
			
			| 
				252
			 | 
			
				273
			 | 
			
			
				       builder: (BuildContext context, AsyncSnapshot<Uint8List> snapshot) { 
			 | 
		
	
		
			
			| 
				253
			 | 
			
				274
			 | 
			
			
				         var file = snapshot.data; 
			 | 
		
	
		
			
			| 
				254
			 | 
			
				275
			 | 
			
			
				         if (snapshot.connectionState == ConnectionState.done && file != null) { 
			 | 
		
	
		
			
			| 
				255
			 | 
			
				
			 | 
			
			
				-          // todo ios 图片优化,在返回时再生成图片 
			 | 
		
	
		
			
			| 
				256
			 | 
			
				
			 | 
			
			
				-          // 展示时,不允许放大,使用原生方案生成一个与屏幕同宽的图片 
			 | 
		
	
		
			
			| 
				
			 | 
			
				276
			 | 
			
			
				+          print(file.length); 
			 | 
		
	
		
			
			| 
				257
			 | 
			
				277
			 | 
			
			
				           return Image.memory( 
			 | 
		
	
		
			
			| 
				258
			 | 
			
				278
			 | 
			
			
				             file, 
			 | 
		
	
		
			
			| 
				259
			 | 
			
				279
			 | 
			
			
				             fit: BoxFit.contain, 
			 |