[flutter] 플러터 Lottie와 비디오 플레이어의 결합

플러터(Flutter)는 UI를 개발하기 위한 크로스 플랫폼 프레임워크로, 다양한 기능을 제공합니다. 이 중에서 Lottie와 비디오 플레이어를 함께 사용해보는 방법을 알아보겠습니다.

Lottie란?

Lottie는 Airbnb에서 개발한 애니메이션 라이브러리로, JSON 형식의 애니메이션 파일을 사용하여 애니메이션을 구현할 수 있습니다. Flutter에서는 lottie_flutter 패키지를 사용하여 Lottie 애니메이션을 표시할 수 있습니다.

비디오 플레이어 추가하기

플러터에서 비디오 재생을 위해서는 비디오 플레이어를 추가해야 합니다. 비디오 플레이어를 추가하는 가장 간단한 방법은 video_player 패키지를 사용하는 것입니다. video_player 패키지를 pubspec.yaml 파일에 추가하고, Flutter 화면에 비디오 플레이어를 추가하는 코드를 작성합니다.

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';

class VideoScreen extends StatefulWidget {
  @override
  _VideoScreenState createState() => _VideoScreenState();
}

class _VideoScreenState extends State<VideoScreen> {
  VideoPlayerController _controller;
  Future<void> _initializeVideoPlayerFuture;

  @override
  void initState() {
    _controller = VideoPlayerController.network(
        'https://example.com/video.mp4'); // 비디오 URL 입력
    _initializeVideoPlayerFuture = _controller.initialize();
    _controller.setLooping(true); // 루프 재생 설정
    super.initState();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Player'),
      ),
      body: FutureBuilder(
        future: _initializeVideoPlayerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return AspectRatio(
              aspectRatio: _controller.value.aspectRatio,
              child: VideoPlayer(_controller),
            );
          } else {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            if (_controller.value.isPlaying) {
              _controller.pause();
            } else {
              _controller.play();
            }
          });
        },
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

Lottie와 비디오 플레이어 결합하기

Lottie와 비디오 플레이어를 함께 사용하기 위해서는 lottie_flutter 패키지와 video_player 패키지를 함께 사용해야 합니다. 비디오 플레이어 위에 Lottie 애니메이션을 배치하고, 비디오 재생 상태에 따라 Lottie 애니메이션의 재생을 제어하는 코드를 작성합니다.

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:lottie/lottie.dart';

class VideoScreen extends StatefulWidget {
  @override
  _VideoScreenState createState() => _VideoScreenState();
}

class _VideoScreenState extends State<VideoScreen> {
  VideoPlayerController _controller;
  Future<void> _initializeVideoPlayerFuture;
  bool _showAnimation = true;

  @override
  void initState() {
    _controller = VideoPlayerController.network(
        'https://example.com/video.mp4'); // 비디오 URL 입력
    _initializeVideoPlayerFuture = _controller.initialize();
    _controller.setLooping(true); // 루프 재생 설정
    super.initState();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Player with Lottie'),
      ),
      body: Stack(
        children: [
          FutureBuilder(
            future: _initializeVideoPlayerFuture,
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                return AspectRatio(
                  aspectRatio: _controller.value.aspectRatio,
                  child: VideoPlayer(_controller),
                );
              } else {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
            },
          ),
          if (_showAnimation)
            Positioned.fill(
              child: Lottie.asset(
                'assets/animations/loading.json', // Lottie 애니메이션 파일 경로 입력
                fit: BoxFit.cover,
              ),
            ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            if (_controller.value.isPlaying) {
              _controller.pause();
            } else {
              _controller.play();
            }
          });
        },
        child: Icon(
          _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

위의 코드에서 Lottie.asset() 메소드의 첫 번째 파라미터로 Lottie 애니메이션 파일의 경로를 입력해야 합니다. 애니메이션 파일은 assets 폴더에 저장되어 있어야 합니다.

결론

Flutter에서 플러터 Lottie와 비디오 플레이어를 함께 사용하는 방법에 대해 알아보았습니다. 비디오 플레이어는 video_player 패키지를, Lottie 애니메이션은 lottie_flutter 패키지를 사용하여 간단하게 구현할 수 있습니다. 이를 활용하여 다양한 동적 UI를 구현해보세요.