[flutter] AspectRatio를 사용하여 확대/축소 기능 구현하기
안녕하세요! Flutter에서 이미지나 비디오 등을 화면에 표시할 때 확대/축소 기능을 구현하고 싶으신가요? AspectRatio
위젯을 사용하여 이 기능을 간단하게 구현할 수 있습니다.
AspectRatio란 무엇인가요?
AspectRatio
위젯은 해당 자식 위젯의 가로 세로 비율을 유지하면서 부모 위젯의 공간을 차지하도록 하는 위젯입니다. 이를 활용하여 이미지나 비디오의 확대/축소 기능을 쉽게 구현할 수 있습니다.
확대/축소 기능 구현하기
다음은 AspectRatio
를 사용하여 간단한 확대/축소 기능을 구현하는 예제 코드입니다.
import 'package:flutter/material.dart';
class ZoomableImage extends StatefulWidget {
@override
_ZoomableImageState createState() => _ZoomableImageState();
}
class _ZoomableImageState extends State<ZoomableImage> {
double _scale = 1.0;
double _previousScale = 1.0;
@override
Widget build(BuildContext context) {
return GestureDetector(
onScaleStart: (ScaleStartDetails details) {
_previousScale = _scale;
},
onScaleUpdate: (ScaleUpdateDetails details) {
setState(() {
_scale = _previousScale * details.scale;
});
},
child: Center(
child: AspectRatio(
aspectRatio: 1.0,
child: Image.network('https://example.com/image.jpg'),
),
),
);
}
}
위 예제 코드에서 ZoomableImage
위젯은 GestureDetector
를 사용하여 확대/축소 제스처를 감지하고, _scale
변수를 사용하여 확대/축소 비율을 조절합니다. 이때 AspectRatio
를 이용하여 이미지를 표시하므로 이미지의 가로 세로 비율이 유지됩니다.
이제 위젯을 화면에 추가하고 테스트해보세요!
마무리
이렇게 AspectRatio
를 활용하여 확대/축소 기능을 구현할 수 있습니다. 이 방법을 응용하여 원하는 대상물에 확대/축소 기능을 적용해 보세요. 혹시 도움이 필요하거나 궁금한 점이 있으시다면 언제든지 물어보세요!
참고: https://api.flutter.dev/flutter/widgets/AspectRatio-class.html