🎃

[Dart/Flutter] FutureOr型とは

2022/06/25に公開

Flutterをいじっていると、FutureOrという型をたまに見かけます。Future型と何が違うのか、疑問に思ったため調べてみました。

FutureOr<T>とは

https://api.flutter.dev/flutter/dart-async/FutureOr-class.html
結論から言うと、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