FlutterはDartで書かれたフレームワークになります。元々iOSやAndroidといったスマートフォン向けでしたが、今ではWebやWindows、macOSといったマルチプラットフォームで動作します。Flutter/Dartを覚えることで、多くの環境に対してアプリケーション開発が可能になります。
NCMBでは公式SDKを提供していませんが、非公式に開発を進めているFlutter SDKがあります。だいたいの機能は実装してきましたが、今回はより使いやすくするためのメソッドを追加しました。実際に使っていく中で感じた不便さを解消するものなので、ぜひお使いください。
データストアでフィールドがない場合にチェックするcontainsKeyメソッド
FlutterのMapで、キーの存在をチェックするのに使われるのがcontainsKeyメソッドです。データストアではユーザー自身が自由に項目を追加できるので、そのフィールドが実は存在しない場合があります。
これまではdefaultValueと組み合わせて対応してきました。
if (object.getString('field_name', defaultValue = 'no') == 'no') {
// フィールドなし
} else {
// フィールドあり
}
ただ、この方法では実際にデータが no
だった場合に問題なので、containsKeyメソッドを追加しました。
if (object.containsKey('field_name')) {
// フィールドあり(型は不明)
} else {
// フィールドなし
}
getDoubleでdouble型のデータを取得する
Dartではint型のデータをdoubleにキャストできません(Allow integer literals in double contexts, and allow all integer constants supported by platform. · Issue #34355 · dart-lang/sdkに関連すると思われます)。
そこで、NCMBObjectのgetDoubleメソッドを以下のように修正しています。intの場合は toDouble を使います。それ以外の型の場合は as でキャストを試みます。
double getDouble(String name, {double? defaultValue}) {
if (!_fields.containsKey(name) && defaultValue != null) return defaultValue;
if (_fields[name].runtimeType == int) {
return (_fields[name] as int).toDouble();
}
return _fields[name]! as double;
}
これで安全に object.getDouble('field_name')
が利用できます。
まとめ
NCMBのFlutter SDKは開発者にとって使いやすいSDKを目指して日々開発を進めています。APIレベルの実装は落ち着いてきたので、より細かなメソッドを実装して使いやすさを向上させています。
ぜひ使っていただき、フィードバックください!