inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

video_player 강의 관련 질문드립니다

390

이우진

작성한 질문수 8

0

import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:videoplayer/component/video_player.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  XFile? video;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: video == null? renderEmpty() : renderVideo()
    );
  }

  Widget renderVideo(){
    return Center(
      child: CustomVideoPlayer(video: video!),
    );
  }

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

  void onLogoTap() async {
    final PickedVideo = await ImagePicker().pickVideo(
        source: ImageSource.gallery
    );

    if(PickedVideo != null){
      print("success");
      setState(() {
        this.video = PickedVideo;
      });
    }
  }

  BoxDecoration getBoxDecoration(){
    return BoxDecoration(
        gradient: LinearGradient(
          begin: Alignment.topCenter,
          end: Alignment.bottomCenter,
          colors: [
            Colors.lightBlue,
            Colors.black,
          ],
        )
    );
  }
}

class Name extends StatelessWidget {
  const Name({super.key});

  @override
  Widget build(BuildContext context) {
    final textstyle = TextStyle(
        color: Colors.white,
        fontSize: 30,
        fontWeight: FontWeight.w100
    );
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text(
            'Video',
            style: textstyle
        ),
        SizedBox( //공백
          width: 8.0,
        ),
        Text(
            'Player',
            style: textstyle.copyWith(
              fontWeight: FontWeight.w800,
            )
        ),
      ],
    );
  }
}

class Logo extends StatelessWidget {
  final VoidCallback onLogoTap;
  const Logo({super.key,required this.onLogoTap});

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

------------------------------video player 스크린 코드--------
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:video_player/video_player.dart';

class CustomVideoPlayer extends StatefulWidget {
  final XFile video;
  const CustomVideoPlayer({super.key,required this.video});

  @override
  State<CustomVideoPlayer> createState() => _CustomVideoPlayerState();
}

class _CustomVideoPlayerState extends State<CustomVideoPlayer> {
  VideoPlayerController? video_controller;

  @override
  void initState(){
    // TODO: implement initState
    super.initState();

    InitializeController();
  }

  InitializeController() async {
    video_controller = VideoPlayerController.file(
        File(widget.video.path)
    );

    await video_controller!.initialize();

    setState(() {

    });
  }

  @override
  Widget build(BuildContext context) {
    if (video_controller == null){
      return CircularProgressIndicator();
    }

    return VideoPlayer(video_controller!);
  }
}

수업을 따라가며 코드를 작성하였는데도 동영상을 넣어보면 video_controller가 null값을 가지고 있어 로딩창만 나옵니다.
어디가 잘못된 지 알수 없어 GitHub에 올려주신 완성된 코드를 사용해보았으나질문.PNG이렇게밖에 나오지 않습니다. 안드로이드나 ios가 아닌 웹으로 실행해서 그런것인가요?

flutter 클론코딩

답변 1

0

코드팩토리

안녕하세요!

agora rtc engine은 웹에서 지원되지 않습니다.

이 강의는 웹 강의가 아닙니다.

앱개발 강의이니 꼭 에뮬레이터/시뮬레이터 또는 실 기기를 사용해주세요.

감사합니다!

198강 (){onTap(e);}의 이해 돕기

0

27

1

video_call 플러그인 설치후 에러 발생

0

45

1

SDK 안드로이드 설치 질문!

0

60

1

코드팩토리 디스코드 링크 다시 부탁드려요~

0

92

1

Webview를 이용해서 URL 상의 페이지 출력 불가

0

70

1

홈스크린 함수를 함축해서 main.dart에 옮기는 문제

0

55

1

플레이스토어

0

59

1

아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?

0

55

1

가이드라인 질문

0

57

0

emulator 에러 환경설정 뭐가 문제 일까요??

0

76

1

emulator 실행 오류

0

93

3

Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련

0

71

1

pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의

0

43

1

setState()를 호출하지 않으면 build가 실행 안되는 건가요?

0

53

1

video_call 플러그인 설치시 에러문제

0

64

1

children 안의 if 문에서 { } 못쓰는 이유?

0

48

1

이렇게 오류가 떠요

0

64

1

AppBar 사용했는데

0

61

2

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

0

56

1

StatefulWidget 실습 에러가 발생합니다.[해결완료]

0

63

1

Video Player 프로젝트에 대한 추가 질문

0

53

0

Row위젯이나 column위젯의 위치는 누가 정하나요??

0

42

1

geolocator 오류때문에 개발진행이 불가능입니다

0

63

1

API 관련 이슈

0

86

2