[Flutter] デスクトップ 環境構築 for Linux

# 1. はじめに
FlutterアプリをLinux (Ubuntu) 環境で動かすための開発環境の構築手順をまとめています。2021/03/04時点でのLinuxのサポート状況はベータ版となっています。ベータ版ですが、Flutter 2.0以降はstableチャネルでも利用可能です！

macOS環境の場合は[こちら](https://qiita.com/kurun_pan/items/9ac5bd6b61fd6081bcf0)

# 2. 環境構築の手順

## Flutter SDKインストール

リポジトリからcloneした後は、適当なパスに配置して、パスを通しておきます。

```shell
$ git clone https://github.com/flutter/flutter
$ sudo mv flutter /usr/local/
$ export PATH=$PATH:/usr/local/flutter/bin
```

## [オプション] Android Studioインストール

Android向けにビルドをしない場合、Android Studioのインストールは不要です。

[https://developer.android.com/studio](https://developer.android.com/studio)からLinux版をダウンロードして適当な場所に置いて、インストールスクリプトを叩きます。

Android Studioのインストールで基本的には次へを押していく感じです。

```shell
$ wget https://dl.google.com/dl/android/studio/ide-zips/3.5.3.0/android-studio-ide-191.6010548-linux.tar.gz
$ sudo tar -xzvf android-studio-ide-191.6010548-linux.tar.gz -C /usr/local/
$ /usr/local/android-studio/bin/studio.sh でAndroid Studioをセットアップ
```

## ビルドで必要になるパッケージのインストール

```shell
$ sudo apt install clang curl pkg-config ninja-build cmake libgtk-3-dev libblkid-dev liblzma-dev unzip
```

## Flutterセットアップ

ターゲット環境をHost PC (Ubuntu) にする設定を行います。[参考](https://github.com/flutter/flutter/wiki/Desktop-shells#tooling)

```shell
$ flutter config --enable-linux-desktop
```

しばらく時間がかかりますが、そのまま待ちましょう。

## ここまでの状況の確認

以下のコマンドを使うと、flutterを動かすためのインストール状況を診断してくれます。今回はサンプルを動かせればいいので、以下の状態でも大丈夫です。

```shell
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, v1.12.3-pre.49, on Linux, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Linux toolchain - develop for Linux desktop
[!] Android Studio (version 3.5)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] VS Code (version 1.40.1)
    ✗ Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[!] Proxy Configuration
    ! NO_PROXY does not contain 127.0.0.1
[✓] Connected device (1 available)

! Doctor found issues in 3 categories.
```

# 3. サンプルを実行してみる

## サンプルプロジェクトの作成

```shell
$ mkdir sample
$ cd sample
$ flutter create .
```

## 実行

```shell
$ flutter run -d linux
```

もしくは、ビルドのみ行いたい場合は以下のコマンドを実行します。

```shell
$ flutter build linux
```

コマンド実行後、エラー等がなければbuild/linux/debug/bundle/sampleに実行バイナリが作成されているため、これを実行するとアプリケーションが立ち上がります。

```shell
$ build/linux/debug/bundle/sample
```

![Screenshot from 2019-12-08 08-14-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259963/c5836bb1-43f0-be5b-883e-b5ae9949bbb8.png)

# 4. デスクトップ向けプラグインの動作確認

プラットフォーム依存のAndroid/iOS向けのプラグインはデスクトップ環境では利用出来ません (Dartのみのプラグインであれば、プラットフォームに依存せずに共通で利用が可能です) 。そのため、用意されているプラグインを使ったテスト済みのサンプルが`flutter-desktop-embedding`にあります。これを参考に、デスクトップ向けのプラグインの作成方法を把握することが出来ます。

## flutter-desktop-embedding取得

```shell
$ git clone https://github.com/google/flutter-desktop-embedding.git
```

## 実行

```shell
$ cd flutter-desktop-embedding/testbed
$ flutter run -d linux
```

![Screenshot from 2019-12-09 04-04-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259963/d893da25-4289-8fa5-bedf-c7e1b9787c95.png)