Flutterとニフクラ mobile backendを連携させてみた

Flutterって最近話題ですよね。
軽く触ってみたんですけど、コードでUIを書けることや、すべての部品がウィジェットという単位でできているところなんかが好みです。
ニフクラ mobile backendのエバンジェリストである中津川氏が、そんなFlutterと連携できるのニフクラ mobile backend Flutter SDKを開発してくれたので、早速使ってみました。

## 必要物

- Android Studio
    - https://developer.android.com/studio
- Flutter SDK
    - https://flutter.dev/docs/get-started/install
- ニフクラ mobile backendアカウント
    - https://mbaas.nifcloud.com/

ちなみに、ニフクラ mobile backendとは、スマートフォンアプリに特化したBaaS(Backend as a Service)です。
SDKを導入いただくことで、ユーザー認証／クラウドデータベース／ファイルストレージなどを使ったスマートフォンアプリを簡単に開発することができます。

## プロジェクト作成

まずFlutterのプロジェクトを作成いただき、main.dartの中身を空っぽにしておいてください。

Flutterの環境構築方法が分からない方はこちら
https://flutter.dev/docs/get-started/install

基本的にFlutter SDKをインストールして、Android Studio上でFlutter SDKのパスを指定していただければOKです。

## SDKの導入

pubspec.yamlを開き、19行目くらいにある以下の記述を探してください。

```yaml:pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
```

ここに、次のように加筆してください。

```yaml:pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  ncmb: ^2.6.6
```

ここで指定しているncmbの 0.1.2は、執筆時のニフクラ mobile backend Flutter SDK最新バージョンです。
下記ページからニフクラ mobile backend Flutter SDK最新バージョンを確認いただき、その時の最新に置き換えていただければと思います。

https://pub.dev/packages/ncmb

## ニフクラ mobile backendの用意

### アカウント登録

ニフクラ mobile backend側の用意をします。
すでにアカウントをお持ちの方は以下からログインしてください。
https://console.mbaas.nifcloud.com/login

まだアカウントを持っていないという方は、以下から新規アカウントを登録してください。
(Google, Facebook, Twitterアカウントで登録できます)
https://mbaas.nifcloud.com/signup.htm

### アプリ作成

ニフクラ mobile backendは、「アプリ」という単位でプロジェクトを管理します。
アプリを作成していきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280892/59292b34-1cb5-6169-872c-d75af85eb804.png)
ニフクラ mobile backendに登録して利用規約の同意やらを済ませると、一番最初にこの画面が出てくるかと思います。
今回は、「flutter_demo」と入力して、「新規作成」をクリックしてください。

※もうすでに登録していてダッシュボードが出ている人は、管理画面左上にある「+新しいアプリ」をクリックすると同じ画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280892/4c2f8122-e4ac-f4ac-fdc8-cf6dbb337f41.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280892/24966379-6cd8-7127-6061-192ee8e1e8f6.png)
すると、こういう画面が出てくるかなと思います。
この画面は後ほど使いますので、 **まだ「OK」は押さないでください** 。
一旦ニフクラ mobile backendでの作業は終了したので、このタブは消さずに最小化しておいてください。

## main.dartの編集

Android Studioに戻り、main.dartを編集します。
以下をそのままコピーして貼り付けてください。

```dart:main.dart
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:ncmb/ncmb.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // TextEditingControllerの生成(TextFieldに入力された値を取得するために必要)
  final Value = TextEditingController();
  
  @override
  void initState() {
    super.initState();
    // ncmbの初期化
    new NCMB('YOUR_APPLICATION_KEY', 'YOUR_CLIENT_KEY');
  }
  

  Widget build(BuildContext context) => MaterialApp(
    title: 'NCMB Demo',
    theme: ThemeData(primarySwatch: Colors.blue),
    home: Scaffold(
      body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: <Widget>[
              TextField(
                obscureText: false,
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: 'Text',
                ),
                controller: Value,
              ),
              FlatButton(
                onPressed: pushedButton,
                child: Text(
                    'Send'
                ),
              ),
            ],
          )
      ),
    )
  );

  void pushedButton() async {
    var text = new NCMBObject('Text');
    text.set('msg', Value.text);
    await text.save();
  }
}
```

`new NCMB('YOUR_APPLICATION_KEY', 'YOUR_CLIENT_KEY');` の `YOUR_APPLICATION_KEY` と `YOUR_CLIENT_KEY` の部分に、先程ニフクラ mobile backendのアプリ作成を完了したところに表示されていたアプリケーションキーとクライアントキーを入力します。
※文字列として入力するので、必ずシングルコーテーションで囲うようにしてください

また、アプリケーションキーとクライアントキーは非常に長いので、コピペミスを防ぐために、テキストボックスの右にある「コピー」ボタンをおしてコピーいただくと確実です。

先程の手順で誤って「OK」を押して閉じちゃったという方は右上にある管理画面右上の「アプリ設定」ボタンを押していただくと、中段の「APIキー」より同様の情報がご確認いただけます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280892/ac81fe5a-e762-2d73-f9e8-9ca91eac259c.png)

## 完成

完成です。
あっという間でしたね。

では、早速実機かエミュレータで実行してみましょう。

![Screenshot_1582043285.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280892/38664628-ac6d-3d82-5507-ac8bff5d0279.png)

テキストボックスと「Send!」というボタンが表示されているだけのシンプルなアプリができたかと思います。
テキストボックスを選択いただき、任意のテキストを入力した後に「Send!」ボタンを押してみてください。

特に反応が帰ってこず不安になるかもしれませんが、もうこれでニフクラ mobile backendにデータは送信されています。
確認してみましょう。

## 確認

今回テキストボックスに入力されたデータは、ニフクラ mobile backendの「データストア」という機能の中に格納されています。
下の画像のようにクリック頂き、データストア内の「Text」クラスの中身を見てください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280892/12baee7b-0812-991a-b1a8-d949db711a75.png)
すると、msgというフィールド(列)に入力したデータがずらりと並んでいることがわかると思います。

## まとめ

このように、Flutterでも非常に簡単にニフクラ mobile backendと連携するアプリを作成できます。
今回は一例としてデータストアへのデータ送信でしたが、ニフクラ mobile backendのFlutter SDKを使うと、データストアのデータを取得する、ファイルストアにファイルをアップロードするなど、様々な処理をクラウドと連携する形で実行できます。

その他の機能の使い方はこちらをご覧ください。
https://blog.mbaas.nifcloud.com/archive/category/flutter

是非一度お試しいただければと思います！