【Flutter】Flutter on the web でYouTubeを流せるようにする


![スクリーンショット 2023-12-14 14.53.29（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/1745c712-288c-97a1-48bd-4e7b3508c792.png)

<a href="https://qiita.com/advent-calendar/2023/yumemi-23-graduation">
  <img alt="YUMEMI New Grad Advent Calendar 2023" width="1240" height="112" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/6d8a7098-9aef-a19a-54fe-83a2d493e033.png">
</a>

:::note info
この記事は、<b>株式会社ゆめみの23卒 Advent Calendar 2023</b>のアドベントカレンダーになります！！
色々な種類の記事が投稿されるので、お楽しみに🤗
:::

https://qiita.com/advent-calendar/2023/yumemi-23-graduation


# youtube_player_iframeについて

Platformとしては、Android・iOS・Webが対応しています。

iFrame Player APIを使用しているそうです。YouTubeのビデオを再生できるものとなっています。Packageを見てみると、いろいろなカスタマイズができそうですね。

詳しくはこちらで閲覧できます〜！

https://pub.dev/packages/youtube_player_iframe




# 実装してみるよ

### １、Packageの追加
```terminal
flutter pub add youtube_player_iframe
```

```dart
dependencies:
  youtube_player_iframe: ^4.0.4
```

# 動画の設定について

https://www.youtube.com/watch?v=4S03TbFvoi4


例えば、上の動画を載せたい場合は、
`https://www.youtube.com/watch?v=4S03TbFvoi4`のURLがありますが、その中の
<b>`4S03TbFvoi4`</b>を入れることで設定できます。


# 実装例

再生や一時停止など様々あるらしいですが、今回はとりあえず表示するだけの実装です。

```dart
import 'package:flutter/material.dart';
import 'package:youtube_player_iframe/youtube_player_iframe.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late final YoutubePlayerController controller;

  @override
  void initState() {
    super.initState();
    controller = YoutubePlayerController.fromVideoId(
      videoId: '4S03TbFvoi4',
      params: const YoutubePlayerParams(
        mute: false,
        showControls: true,
        showFullscreenButton: true,
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    controller.close();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SizedBox(
              width: MediaQuery.sizeOf(context).width / 1.5,
              child: YoutubePlayer(
                controller: controller,
                aspectRatio: 16 / 9,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

```


ビルドしてみたところ、こんな感じになりました！（デプロイはまた別の機会にします）


![スクリーンショット 2023-12-14 15.59.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/731d2479-1d62-a574-71d9-bb3fda679c75.png)

# 最後に
これは色々と使えそうで面白いですね。そして実装がとても楽でした。
また別の機会にいい感じにカスタマイズした記事も書けたらなと思っています！


# ちょっとした宣伝

株式会社ゆめみの23卒のメンバーでアドベントカレンダーを作成しています。
新卒のフレッシュな記事がたくさん投稿予定なので、少しでも興味があれば購読いただけると幸いです！！


https://qiita.com/advent-calendar/2023/yumemi-23-graduation



<a href="https://qiita.com/advent-calendar/2023/yumemi-23-graduation">
  <img alt="YUMEMI New Grad Advent Calendar 2023" width="1240" height="112" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/6d8a7098-9aef-a19a-54fe-83a2d493e033.png">
</a>