flutter(Dart) : StreamとFuture、それぞれの非同期関数の違い

flutter
StreamFutureは、非同期プログラミングをサポートするDartの2つの主要な概念です。それぞれ異なる種類の非同期処理に対応しています。

flutterについてのチュートリアルは下記に記載しています

初めてのFlutterアプリ開発チュートリアル

初めてのFlutter/Dartマルチプラットフォームアプリ開発チュートリアル
はじめに FlutterはGoogleが開発した、マルチプラットフォームのモバイルアプリ開発のフレームワークです。Flutterを使うと、AndroidとiOSの両方のプラットフォームで同時にアプリを開発することができます。 また、ブラウザ...
Future

Futureは、いずれ完了することが期待される単一の計算結果を表します。Futureは、通常、非同期で実行される操作の結果を待つために使用されます。ファイルの読み込みやネットワークリクエストなどが典型的な例です。

Futureを使用することで、結果が利用可能になるまで処理をブロックすることなく、他のタスクを実行することができます。結果が利用可能になったら、その結果を処理するコールバック関数を登録することができます。Dartではasyncawaitキーワードを使って、非同期コードを簡単に記述できます。
※javascriptなどでも同様の使い方です

例:

Future<String> fetchData() async {
  // 何らかの非同期操作(例: ネットワークリクエスト)
  await Future.delayed(Duration(seconds: 2));
  return "データ";
}
void main() async {
  print("データ取得開始");
  // ここのfetchDataが非同期関数
  String data = await fetchData();
  print("データ: $data");
}
Stream

Streamは、時間の経過とともに複数の値を生成する非同期イベントシーケンスを表します。イベントは、データの断片、エラー、またはシーケンスの終了を表すことができます。

Streamは、継続的なデータフロー(例えば、WebSocket通信やセンサーからのデータストリーム)を処理する際に便利です。Streamを使用すると、イベントが発生するたびにコールバック関数を実行することができます。

例:

Stream<int> countStream(int to) async* {
  for (int i = 1; i <= to; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i;
  }
}
void main() async {
  print("カウント開始");
  await for (int count in countStream(5)) {
    print("カウント: $count");
  }
  print("カウント終了");
}

要約すると、Futureは単一の値の完了を表し、Streamは時間の経過とともに複数のイベントを生成するシーケンスを表します。どちらも非同期プログラミングにおいて重要な役割を果たします。