🎃
[Dart/Flutter] FutureOr型とは
Flutterをいじっていると、FutureOrという型をたまに見かけます。Future型と何が違うのか、疑問に思ったため調べてみました。
FutureOr<T>とは
結論から言うと、FutureOr<T>はFuture<T>またはTを表す型です。
FutureOr<T>で型チェックを行うと、Future<T>とTどちらも結果はtrueになります。
String str = 'hoge';
Future<String> futureStr = Future.value('hoge');
print(str is FutureOr<String>); // true
print(futureStr is FutureOr<String>); // true
使用例
クラスの継承時なんかに使えます。
abstract class SuperClass {
// データを取得する関数を用意
FutureOr<String> fetchData();
}
上のクラスを継承する際、fetchData関数の戻り値はFuture<String>型・String型どちらでも定義ができます。
class SubClassA extends SuperClass {
// 戻り値をFuture<String>で定義
Future<String> fetchData() async => 'data';
}
class SubClassB extends SuperClass {
// 戻り値をStringで定義
String fetchData() => 'data';
}
Discussion