Sonnat Project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

63 lines
1.8 KiB

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
class ShowImageWidget extends StatelessWidget {
final String imageUrl;
final _transformationController = TransformationController();
late TapDownDetails _doubleTapDetails;
ShowImageWidget(this.imageUrl, {super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
leading: GestureDetector(
child: const Icon(Icons.close, color: Colors.white),
onTap: () {
Navigator.pop(context);
},
),
backgroundColor: Colors.black,
elevation: 0,
),
body: Center(
child: GestureDetector(
onScaleUpdate: (ScaleUpdateDetails details) {},
onDoubleTap: _handleDoubleTap,
onDoubleTapDown: _handleDoubleTapDown,
child: InteractiveViewer(
minScale: 0.5,
maxScale: 20,
panEnabled: false,
transformationController: _transformationController,
child: Container(
height: MediaQuery.of(context).size.height,
alignment: Alignment.center,
child: CachedNetworkImage(
imageUrl: imageUrl,
fit: BoxFit.fill,
),
),
),
),
),
);
}
void _handleDoubleTapDown(TapDownDetails details) {
_doubleTapDetails = details;
}
void _handleDoubleTap() {
if (_transformationController.value != Matrix4.identity()) {
_transformationController.value = Matrix4.identity();
} else {
final position = _doubleTapDetails.localPosition;
_transformationController.value = Matrix4.identity()
..translate(-position.dx * 2, -position.dy * 2)
..scale(4.0);
}
}
}