非公式ですが、Flutter(Dartでも)で使えるNCMB SDKを開発しています。
今回はデータストアの取得に際して利用できるクエリ条件について紹介します。
SDKのインポート
まずはSDKをインポートします。pubspec.yamlは以下のように記述します。
dependencies: ncmb: ^0.0.6
コードでは次のようにインポートします。
import 'package:ncmb/ncmb.dart';
Flutterであれば flutter pub get
、Dartであれば pub get
でライブラリをインポートできます。Visual Studio Codeであれば、エディタからインポートできるでしょう。
SDKの初期化
次にSDKを初期化します。
NCMB ncmb = new NCMB('YOUR_APPLICATION_KEY', 'YOUR_CLIENT_KEY');
クエリのインスタンス作成
初期化したら、クエリのインスタンスを作成します。この辺りはSwift/Objective-C/JavaなどのSDKに近いです。
var query = ncmb.Query('Item');
利用できるクエリについて
メソッドはJavaScript SDKに合わせています。
// キーに一致する値があれば取得 void equalTo(String key, Object value) // キーに一致しない値を持ったデータを取得 void notEqualTo(String key, Object value) // 指定した値より小さいデータを取得 void lessThan(String key, Object value) // 指定した値以下のデータを取得 void lessThanOrEqualTo(String key, Object value) // 指定した値より大きいデータを取得 void greaterThan(String key, Object value) // 指定した値以上のデータを取得 void greaterThanOrEqualTo(String key, Object value) // 指定した値が含まれるデータを取得 void inValue(String key, Object value) // 指定した値が含まれないデータを取得 void notInValue(String key, Object value) // キーに値が存在、または存在しなければ取得(デフォルトは存在) void exists(String key, {bool value = true}) // 正規表現を使ってデータを絞り込み void regex(String key, String value) // 要素にいずれかを含む void inArray(String key, Object value) // 要素のいずれとも一致しない void notInArray(String key, Object value) // 要素にすべてを含む void allInArray(String key, Object value)
in/notInはDartにおいてinが予約後であるため、inValueと、それに合わせて notInValueにしています。
その他、データの取得条件を指定できます。
// ポインターを取得 void include(String className) // カウントも取得 void count() // ソート条件を指定 void order(String key, {bool descending = true}) // 取得件数を指定 void limit(int number) // 取得開始する件数を指定 void skip(int number)
データを取得する
データを取得する際には fetchAll メソッドを実行します。返ってくるのは NCMBObject の List です。検索条件は破壊的メソッドなので、カスケード記法が使えます。
query ..notEqualTo('array', ['a', 'b', 'c']) ..limit(2) ..lessThan('int', 4); items = await query.fetchAll();
検索条件をクリアする場合には clear
メソッドを使います。
query.clear();
まとめ
データストアのデータ取得を細かく条件指定してできるようになりました。まだ位置情報には対応していないので、位置情報検索は使えません。今後、さらにバージョンアップを行っていきます。なお、ソースコードは下記のリポジトリにて公開しています。ライセンスはMIT Licenseです。ぜひFlutterでもNCMBを活用してください!