import 'AsyncReply.dart'; import '../Resource/Warehouse.dart'; // class ReplyIndex { // int index; // AsyncReply reply; // T // } class AsyncBag extends AsyncReply> { List> _replies = >[]; //List _results = []; int _count = 0; bool _sealedBag = false; Type? arrayType; seal() { //print("SEALED"); if (_sealedBag) return; _sealedBag = true; if (_replies.length == 0) { if (arrayType != null) { var ar = Warehouse.createArray(arrayType as Type); trigger(ar as List); } else { trigger([]); } } var results = List.filled(_replies.length, null); for (var i = 0; i < _replies.length; i++) { var k = _replies[i]; var index = i; k ..then((r) { results[index] = r; _count++; if (_count == _replies.length) { if (arrayType != null) { var ar = Warehouse.createArray(arrayType as Type); results.forEach(ar.add); trigger(ar as List); } else { trigger(results.cast()); } } }) ..error((ex) { triggerError(ex); }); } } void add(AsyncReply reply) { if (!_sealedBag) { //_results.add(null); _replies.add(reply); } } void addBag(AsyncBag bag) { bag._replies.forEach((r) { add(r); }); } AsyncBag() {} }