import 'AsyncReply.dart'; class AsyncBag extends AsyncReply> { List> _replies = new List>(); List _results = new List(); int _count = 0; bool _sealedBag = false; seal() { if (_sealedBag) return; _sealedBag = true; if (_results.length == 0) trigger(new List()); for (var i = 0; i < _results.length; i++) { var k = _replies[i]; var index = i; k.then((r) { _results[index] = r; _count++; if (_count == _results.length) trigger(_results); }); } } add(AsyncReply reply) { if (!_sealedBag) { _results.add(null); _replies.add(reply); } } addBag(AsyncBag bag) { bag._replies.forEach((r) { add(r); }); } AsyncBag() { } }