import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:gallery_saver/gallery_saver.dart'; // GallerySaver 패키지를 임포트하여 비디오를 갤러리에 저장하는 기능을 사용합니다.
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class VideoPreviewScreen extends StatefulWidget {
final XFile video;
const VideoPreviewScreen({
super.key,
required this.video,
});
State<VideoPreviewScreen> createState() => _VideoPreviewScreenState();
}
class _VideoPreviewScreenState extends State<VideoPreviewScreen> {
late final VideoPlayerController _videoPlayerController;
bool _savedVideo = false; // 비디오가 갤러리에 저장되었는지 여부를 추적하는 상태 변수를 추가합니다.
Future<void> _initVideo() async {
_videoPlayerController = VideoPlayerController.file(
File(widget.video.path),
);
await _videoPlayerController.initialize();
await _videoPlayerController.setLooping(true);
await _videoPlayerController.play();
setState(() {});
}
void initState() {
super.initState();
_initVideo();
}
Future<void> _saveToGallery() async { // 비디오를 갤러리에 저장하는 함수를 정의합니다.
if (_savedVideo) return; // 이미 저장된 경우 함수를 조기에 종료합니다.
await GallerySaver.saveVideo( // GallerySaver를 사용하여 비디오를 갤러리에 저장합니다.
widget.video.path,
albumName: "TikTok Clone!", // 저장될 앨범의 이름을 지정합니다.
);
_savedVideo = true; // 비디오 저장 상태를 업데이트합니다.
setState(() {}); // UI를 업데이트하기 위해 상태를 변경합니다.
}
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
title: const Text('Preview video'),
actions: [
IconButton(
onPressed: _saveToGallery, // 앱 바의 버튼이 눌리면 _saveToGallery 함수를 호출합니다.
icon: FaIcon(_savedVideo // 저장된 상태에 따라 아이콘을 변경합니다.
? FontAwesomeIcons.check
: FontAwesomeIcons.download),
)
],
),
body: _videoPlayerController.value.isInitialized
? VideoPlayer(_videoPlayerController)
: null,
);
}
}
이 코드 조각은 사용자가 녹화한 비디오를 갤러리에 저장하는 기능을 추가한 VideoPreviewScreen
클래스의 일부입니다. 사용자는 앱 바에 있는 아이콘 버튼을 눌러 비디오를 갤러리에 저장할 수 있습니다. 저장이 완료되면 아이콘이 다운로드 아이콘에서 체크 아이콘으로 변경됩니다.
_saveToGallery
함수: GallerySaver
패키지의 saveVideo
메소드를 사용하여 비디오를 갤러리에 저장합니다. 저장할 비디오의 경로와 앨범 이름을 지정합니다. 비디오가 성공적으로 저장되면 _savedVideo
상태를 true
로 설정하여 UI를 업데이트합니다._saveToGallery
함수가 호출되어 비디오가 갤러리에 저장됩니다. 버튼의 아이콘은 _savedVideo
상태에 따라 변화합니다. 비디오가 저장되지 않았다면 다운로드 아이콘을, 저장되었다면 체크 아이콘을 표시합니다.gallery_saver
: 갤러리에 이미지나 비디오를 저장하기 위한 플러터 패키지입니다. 이 예제에서는 비디오를 갤러리에 저장하는 데 사용됩니다._saveToGallery
함수는 비디오가 이미 저장되었는지 확인하기 위해 _savedVideo
상태를 검사합니다. 이미 저장된 경우 함수는 조기에 반환됩니다. 이는 중복 저장을 방지하기 위한 것입니다.setState
메소드 호출은 비디오 저장 상태 변경 후 UI를 즉시 업데이트하기 위해 사용됩니다.이 기능을 구현함으로써 사용자는 앱 내에서 녹화한 비디오를 쉽게 갤러리에 저장하고 관리할 수 있습니다.