import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:image_picker/image_picker.dart'; // 갤러리나 카메라에서 이미지를 선택하기 위한 ImagePicker 패키지를 임포트합니다.
import 'package:permission_handler/permission_handler.dart';
import 'package:tiktok_clone/constants/gaps.dart';
import 'package:tiktok_clone/constants/sizes.dart';
import 'package:tiktok_clone/features/videos/video_preview_screen.dart';
class VideoRecordingScreen extends StatefulWidget {
const VideoRecordingScreen({super.key});
State<VideoRecordingScreen> createState() => _VideoRecordingScreenState();
}
class _VideoRecordingScreenState extends State<VideoRecordingScreen>
with TickerProviderStateMixin {
bool _hasPermission = false;
bool _isSelfieMode = false;
late final AnimationController _buttonAnimationController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 200),
);
late final Animation<double> _buttonAnimation = Tween(begin: 1.0, end: 1.3).animate(_buttonAnimationController);
late final AnimationController _progressAnimationController = AnimationController(
vsync: this,
duration: const Duration(seconds: 10),
lowerBound: 0.0,
upperBound: 1.0,
);
late FlashMode _flashMode;
late CameraController _cameraController;
Future<void> _onPickVideoPressed() async {
final video = await ImagePicker().pickVideo(
source: ImageSource.gallery, // ImagePicker를 사용하여 갤러리에서 비디오를 선택합니다.
);
if (video == null) return;
if (!mounted) return;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => VideoPreviewScreen(
video: video,
isPicked: true, // 사용자가 선택한 비디오를 VideoPreviewScreen으로 전달합니다.
),
),
);
}
// 이하 코드는 VideoRecordingScreen의 나머지 부분입니다.
// 카메라 권한 확인, 카메라 초기화, 비디오 녹화 시작 및 정지 로직, UI 구성 등을 포함합니다.
// 각 기능의 세부적인 실행 방법과 비즈니스 로직이 구현되어 있습니다.
Widget build(BuildContext context) {
// UI 구성 부분입니다. 사용자에게 카메라 미리보기와 제어 버튼을 보여줍니다.
// 갤러리에서 비디오를 선택할 수 있는 버튼도 포함되어 있습니다.
return Scaffold(
backgroundColor: Colors.black,
body: // 레이아웃과 버튼 구성,
);
}
}
이 코드는 VideoRecordingScreen
내에서 ImagePicker
패키지를 사용하여 사용자가 갤러리에서 비디오를 선택할 수 있게 합니다. 사용자가 비디오를 선택하면, ImagePicker().pickVideo(source: ImageSource.gallery)
메소드를 통해 비디오 파일을 가져온 후, VideoPreviewScreen
으로 이동하여 선택한 비디오를 미리 볼 수 있습니다. 이 과정에서 isPicked: true
파라미터는 비디오가 사용자에 의해 직접 선택되었음을 나타냅니다.