singleflight

Package singleflight provides a duplicate function call suppression mechanism.

Example

import 'package:singleflight/singleflight.dart';
import 'package:test/test.dart';

Future<void> main() async {
  final group = Group.create<int>();
  final futures = <Future<int>>[];
  var called = 0;

  for (int i = 0; i < 3; i++) {
    futures.add(group.doGroup("key_1", () async {
      await Future.delayed(Duration(milliseconds: 100));
      called += 1;
      return 1;
    }));
  }

  for (int i = 0; i < 2; i++) {
    futures.add(group.doGroup("key_2", () async {
      await Future.delayed(Duration(milliseconds: 100));
      called += 1;
      return 2;
    }));
  }

  final list = await Future.wait(futures);
  expect(list, [1, 1, 1, 2, 2]);
  expect(called, 2);
}

Libraries

singleflight
Package singleflight provides a duplicate function call suppression mechanism.