반응형
유튜브 처럼 화면을 추가적으로 띄우지 않고 플레이 화면과 하단에 동영상 리스트가 보일때 동영상 리스트를 클릭 시 상단 플레이에 플레이 되게 만들기를 할때 GlobalKey를 이용합니다.
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
class VideoDetail extends StatefulWidget {
int? vIdx;
VideoDetail({
Key? key,
this.vIdx,
}) : super(key: key);
@override
_VideoDetailState createState() => _VideoDetailState();
}
class _VideoDetailState extends State<VideoDetail> {
late String _videoUrl;
late GlobalKey<HLSPlayerState> _playerKey;
@override
void initState() {
super.initState();
_videoUrl = "초기 비디오 URL";
_playerKey = GlobalKey<HLSPlayerState>();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
HLSPlayer(
key: _playerKey,
strUrl: _videoUrl,
),
ElevatedButton(
onPressed: () {
// GlobalKey를 사용하여 내부 클래스의 메서드 호출
_playerKey.currentState?.changeVideoUrl("새로운 비디오 URL");
},
child: Text("비디오 변경"),
),
],
);
}
}
// hls_player.dart 파일
class HLSPlayer extends StatefulWidget {
final String strUrl;
const HLSPlayer({Key? key, required this.strUrl}) : super(key: key);
@override
HLSPlayerState createState() => HLSPlayerState();
}
class HLSPlayerState extends State<HLSPlayer> {
late VideoPlayerController _videoPlayerController;
@override
void initState() {
super.initState();
_initializePlayer();
}
void _initializePlayer() {
_videoPlayerController = VideoPlayerController.networkUrl(Uri.parse(widget.strUrl));
// 나머지 초기화 로직...
}
void changeVideoUrl(String newUrl) {
_videoPlayerController.pause();
_videoPlayerController.dispose();
setState(() {
_videoPlayerController = VideoPlayerController.networkUrl(Uri.parse(widget.strUrl));
});
// 나머지 변경 로직...
}
@override
Widget build(BuildContext context) {
return Container(
// HLS 플레이어 위젯의 UI...
);
}
}
void main() {
runApp(MaterialApp(
home: VideoDetail(vIdx: 1004), // 초기값을 전달합니다.
));
}
반응형
'프로그램 개발해서 돈벌기 > flutter' 카테고리의 다른 글
[초보자 게임 만들기][기초] flutter flame에서 두 사각형이 위, 아래에서 중앙으로 이동하다 충돌 시 반대로 튕기기 (0) | 2024.05.24 |
---|---|
[초보자 게임 만들기 기초] flutter flame 구조와 사각형 위에서 아래로 떨어뜨리기 (0) | 2024.04.30 |
flutter에서 자식 위젯이 부모 위젯 함수 호출하기 (0) | 2024.02.23 |
[flutter] Build failed due to use of deprecated Android v1 embedding. 를 만났을때 에러 수정 방법 (0) | 2024.01.31 |
flutter iOS에 권한 요청 방법 : 주소록에 접근 권한 요청하기 (0) | 2023.09.20 |
댓글