@@ -3,7 +3,9 @@ import 'dart:math';
3
3
4
4
import 'package:extended_image/extended_image.dart' ;
5
5
import 'package:flutter/material.dart' ;
6
+ import 'package:flutter/services.dart' ;
6
7
import 'package:flutter_picgo/utils/extended.dart' ;
8
+ import 'package:toast/toast.dart' ;
7
9
8
10
class ImagePreviewUtils {
9
11
/// 打开图片预览页面
@@ -82,48 +84,83 @@ class _GalleryPhotoViewWrapperState extends State<GalleryPhotoViewWrapper> {
82
84
pageSize: pageSize,
83
85
color: Colors .black,
84
86
pageGestureAxis: SlideAxis .both),
85
- child: ExtendedImageGesturePageView .builder (
86
- itemBuilder: (BuildContext context, int index) {
87
- var item = widget.galleryItems[index];
88
- Widget image = item.resource.startsWith ('http' )
89
- ? ExtendedImage .network (
90
- item.resource,
91
- fit: BoxFit .contain,
92
- cache: true ,
93
- mode: ExtendedImageMode .gesture,
94
- enableSlideOutPage: true ,
95
- loadStateChanged: (state) =>
96
- defaultLoadStateChanged (state, iconSize: 50 ),
97
- )
98
- : ExtendedImage .file (
99
- File (item.resource),
100
- fit: BoxFit .contain,
101
- mode: ExtendedImageMode .gesture,
102
- enableSlideOutPage: true ,
103
- loadStateChanged: (state) =>
104
- defaultLoadStateChanged (state, iconSize: 50 ),
105
- );
106
- image = Container (
107
- child: image,
108
- );
109
- if (index == currentIndex) {
110
- return Hero (
111
- tag: index,
87
+ child: GestureDetector (
88
+ child: ExtendedImageGesturePageView .builder (
89
+ itemBuilder: (BuildContext context, int index) {
90
+ var item = widget.galleryItems[index];
91
+ Widget image = item.resource.startsWith ('http' )
92
+ ? ExtendedImage .network (
93
+ item.resource,
94
+ fit: BoxFit .contain,
95
+ cache: true ,
96
+ mode: ExtendedImageMode .gesture,
97
+ enableSlideOutPage: true ,
98
+ loadStateChanged: (state) =>
99
+ defaultLoadStateChanged (state, iconSize: 50 ),
100
+ )
101
+ : ExtendedImage .file (
102
+ File (item.resource),
103
+ fit: BoxFit .contain,
104
+ mode: ExtendedImageMode .gesture,
105
+ enableSlideOutPage: true ,
106
+ loadStateChanged: (state) =>
107
+ defaultLoadStateChanged (state, iconSize: 50 ),
108
+ );
109
+ image = Container (
112
110
child: image,
113
111
);
114
- } else {
115
- return image;
116
- }
117
- },
118
- itemCount: widget.galleryItems.length,
119
- controller: PageController (
120
- initialPage: currentIndex,
112
+ if (index == currentIndex) {
113
+ return Hero (
114
+ tag: index,
115
+ child: image,
116
+ );
117
+ } else {
118
+ return image;
119
+ }
120
+ },
121
+ itemCount: widget.galleryItems.length,
122
+ controller: PageController (
123
+ initialPage: currentIndex,
124
+ ),
125
+ scrollDirection: Axis .horizontal,
121
126
),
122
- scrollDirection: Axis .horizontal,
127
+ onLongPress: () {
128
+ _showBottomPane ();
129
+ },
123
130
),
124
131
);
125
132
}
126
133
134
+ /// 底部弹窗
135
+ _showBottomPane () {
136
+ showModalBottomSheet (
137
+ context: context,
138
+ builder: (context) {
139
+ return SafeArea (
140
+ child: Container (
141
+ child: Column (
142
+ mainAxisSize: MainAxisSize .min,
143
+ children: [
144
+ ListTile (
145
+ title: Text ('复制链接' ),
146
+ onTap: () {
147
+ _handleCopy (context);
148
+ },
149
+ ),
150
+ ],
151
+ ),
152
+ ));
153
+ });
154
+ }
155
+
156
+ /// 复制链接
157
+ _handleCopy (BuildContext context) {
158
+ Clipboard .setData (
159
+ ClipboardData (text: widget.galleryItems[currentIndex].resource));
160
+ Toast .show ('已复制到剪切板' , context);
161
+ Navigator .pop (context);
162
+ }
163
+
127
164
Color defaultSlidePageBackgroundHandler (
128
165
{Offset offset, Size pageSize, Color color, SlideAxis pageGestureAxis}) {
129
166
double opacity = 0.0 ;
0 commit comments