Things of interesting

プログラミングに関する技術ネタの備忘録

Flutterでfirebase+Blocなアプリケーションを作る(その1)

やること

Flutter入門としてサンプルを使ったデモアプリを作成します。

はじめに

Flutterとは

Googleが開発するクロスプラットフォームなモバイルアプリケーションSDK です。
iOSAndroidに対応していましたが、2019年5月にウェブ版のFlutter for Web(旧 hummingbird)が正式発表されました。

www.publickey1.jp

他のクロスプラットフォームとの大きな違いとして、独自のレンダリングエンジンを使用してUIを構築することが挙げられます。
このためiOSAndroid間でも同じようなUIを構成することができます。

これまでのクラスプラットフォームの経験としてはCordova、期待しているのはNativeScript or Flutterですが、それぞれ比較してみると

  • vs Cordova: WebViewを挟まず独自レンダリングできるのでパフォーマンスが良い。 というかもうCordovaは使いたくない :P
  • vs NativeScript: UIを揃えられる分、プラグイン周りはObjective-C, Javaでのコーディングが必要になる(自作する場合)。あとまだプレビュー版ですがFlutterではウェブ版も作れる。

Blocとは

Bloc(Business Logic Component)の意味でGoogle Adwardsチームが発表したデザインパターンです。
ビジネスロジックをプレゼンテーションから分離し、以下のようなルールを定めるというものです。 (現状はDart自体がFlutter開発のための言語のようなものなのでBlocの実装ライブラリはFluttter用に開発されてるような感じです。)
- Inputs and outputs are simple Streams/Sinks only
- Dependencies must be injectable and platform agnostic
- No platform branching allowed
- Implementation can be whatever you want if you follow the previous rules

https://raw.githubusercontent.com/felangel/bloc/master/docs/assets/bloc_architecture.png

www.didierboelens.com

この資料が概要を理解するのに分かりやすかったのでリンクを貼っておきます。 slides.com

注意

その2ではライブラリを今回使用しているflutter_blocから変更しています。flutter_blocが不要であればこの記事は飛ばしてください。 hnak.hatenablog.jp

手順

0. 開発環境のセットアップ

FlutterSDK自体のセットアップについては割愛します。公式のチュートリアル通りに進めて問題ないはずです。

Install - Flutter

1. サンプルのチェックアウト

今回はBlocライブラリのレポジトリにあるFlutterのfirebaseサンプルを起動させてみたいと思います。
以下レポジトリをクローンします。 github.com

bloc/examples/flutter_firebase_login/ 下にfirebase loginを使ったサンプルソースがあります、作業を続ける前にFirebaseのセットアップをしておきます。

2. Firebaseのセットアップ

Firebaseで適当なプロジェクトを作成してiOSアプリの追加をします。 f:id:hnakanoya:20190514151156p:plain

情報を埋めて新規iOSアプリの追加を行います、この時画面の指示に合わせてGoogleService-Info.plistをダウンロードします。 f:id:hnakanoya:20190514151407p:plain

firebase authentificationの設定からGoogleログインをONにしてください。

3. サンプルの編集

bloc/examples/flutter_firebase_login/ios/Runner/GoogleService-Info.plist のファイルをダウンロードしたファイルで上書きしてください。

同じディレクトリにあるInfo.plistを開いて「paste-the-reversed-client-id-from-googleservice-info.plist-here」と記載されている場所にGoogleService-Info.plist内に記載されたREVERSED_CLIENT_IDの内容を上書きしてください。

4.サンプルの起動

以下コマンドでサンプルが起動するはずです。

# サンプルディレクトリに移動
$ cd bloc/examples/flutter_firebase_login
# アプリを起動
$ flutter run

このソースを参考に独自にアプリを構築する場合はbloc/examples/flutter_firebase_loginを切り出すような形になると思うので、その場合はBlocライブラリのパスをローカルの相対パスからライブラリ参照に変更してください。

bloc/examples/flutter_firebase_login/pubspec.yaml

  flutter_bloc:
    path: ../../packages/flutter_bloc

↓以下に変更

flutter_bloc: ^0.13.0