修复图片预览 添加双击复原手势

master
张萌 3 years ago
parent 14be6925b9
commit b5eb30faeb

@ -32,7 +32,8 @@ class AsGridImageView extends StatelessWidget {
children: files == null
? nets!
.map((e) => GestureDetector(
onTap: () => PhotoViewer.toNet(
onTap: () => PhotoViewer.fromNet(
context,
tag: e,
net: e,
),
@ -45,7 +46,8 @@ class AsGridImageView extends StatelessWidget {
.toList()
: files!
.map((e) => GestureDetector(
onTap: () => PhotoViewer.toFile(tag: e.path, file: e),
onTap: () =>
PhotoViewer.fromFile(context, tag: e.path, file: e),
child: Hero(tag: e.path, child: Image.file(e)),
))
.toList());

@ -55,16 +55,59 @@ class PhotoViewer extends StatefulWidget {
_PhotoViewerState createState() => _PhotoViewerState();
}
class _PhotoViewerState extends State<PhotoViewer> {
class _PhotoViewerState extends State<PhotoViewer>
with SingleTickerProviderStateMixin {
TransformationController _controller = TransformationController();
Animation? _animationReset;
late AnimationController _controllerReset;
void reset() {
_controllerReset.reset();
_animationReset = Matrix4Tween(
begin: _controller.value,
end: Matrix4.identity(),
).animate(_controllerReset);
_animationReset!.addListener(_onAnimateReset);
_controllerReset.forward();
}
void _onAnimateReset() {
_controller.value = _animationReset!.value;
if (!_controllerReset.isAnimating) {
_animationReset?.removeListener(_onAnimateReset);
_animationReset = null;
_controllerReset.reset();
}
}
@override
void initState() {
_controllerReset =
AnimationController(vsync: this, duration: Duration(milliseconds: 400));
super.initState();
}
@override
void dispose() {
_controllerReset.dispose();
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black54,
body: GestureDetector(
onTap: () => Navigator.pop(context),
child: Center(
child: InteractiveViewer(
boundaryMargin: 100.edge,
return GestureDetector(
onTap: () => Navigator.pop(context),
onDoubleTap: () => reset(),
child: Scaffold(
backgroundColor: Colors.black54,
body: InteractiveViewer(
transformationController: _controller,
boundaryMargin: 100.edge,
child: Container(
width: double.infinity,
height: double.infinity,
alignment: Alignment.center,
child: Hero(
tag: widget.tag,
child: widget.file != null

Loading…
Cancel
Save