카테고리 없음

[프로젝트] 영상플레이어 (2) 조건에 따른 다른 위젯 렌더링

짱구러버 2022. 12. 14. 18:19
728x90

들어가기 앞서...

비디오가 담기지 않았을때와 담겼을떄의 뷰를 조건부로 랜더링 하겠다.


본문으로...

1. 코드 정리!

1) body 함수로 뺴자!

Scaffold(
    body: renderEmpty()
);

 Widget renderEmpty() {
    return Container(
      width: MediaQuery.of(context).size.width,
      decoration: getBoxDecoration(),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          _Logo(),
          SizedBox(
            height: 30.0,
          ),
          _AppName(),
        ],
      ),
    );
  }

2) 로고를 클릭하면 이미지를 선택하게!

// 함수 파라미터로 넘겨주기
_Logo(onTap: onLogoTap,),
...
// 버튼 클릭시 이벤트
	void onLogoTap() async {
    	ImagePicker 패키지로 갤러리의 비디오 가져오기 
        final video = await ImagePicker().pickVideo(source: ImageSource.gallery,);
      }
...
  
  class _Logo extends StatelessWidget {
  // onTap 함수 담을 변수 선언
  final VoidCallback onTap;

  const _Logo({Key? key, required this.onTap}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onTap,
      child: Image(
        image: AssetImage("asset/img/logo.png"),
      ),
    );
  }
}

ios android 잘 작동 한다.

 

 

 

2. 조건에 맞게 뷰 출력 되게 분기처리 추가!

비디오가 있을 경우의 뷰와 없을 경우의 뷰를 보여줘야한다.

class _VideoHomeScreenPageState extends State<VideoHomeScreenPage> {
// XFile : 이미지 피커에서 제공해주는 파일 클래스이다. 모든 이미지와 비디오를 리턴 받을 수 있다.
  XFile? video;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
    // 비디오 있을때 없을때 분기처리
        body: video == null ? renderEmpty(): renderVideo()
    );
  }

  // 비디오 있을 때 뷰
  Widget renderVideo() {
    return Center(
      child: Text('video 있다.'),
    );
  }
  // 비디오 없을 때 뷰
  Widget renderEmpty() {
    return Container(
      width: MediaQuery
          .of(context)
          .size
          .width,
      decoration: getBoxDecoration(),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          _Logo(onTap: onLogoTap,),
          SizedBox(
            height: 30.0,
          ),
          _AppName(),
        ],
      ),
    );
  }
}

끝으로...

  1. ImagePicker 패키지를 통해서 갤러리의 비디오 가져오기
  2. 분기처리 진행하기

 

728x90