mirror of
https://github.com/esiur/esiur-dart.git
synced 2026-04-02 09:38:20 +00:00
null-safety
This commit is contained in:
@@ -1,55 +1,62 @@
|
||||
import 'AsyncReply.dart';
|
||||
import '../Resource/Warehouse.dart';
|
||||
|
||||
// class ReplyIndex<T> {
|
||||
// int index;
|
||||
// AsyncReply<T> reply;
|
||||
// T
|
||||
// }
|
||||
|
||||
class AsyncBag<T> extends AsyncReply<List<T>> {
|
||||
List<AsyncReply<T>> _replies = <AsyncReply<T>>[];
|
||||
List<T> _results = <T>[];
|
||||
|
||||
//List<T?> _results = <T>[];
|
||||
|
||||
int _count = 0;
|
||||
bool _sealedBag = false;
|
||||
|
||||
Type arrayType;
|
||||
Type? arrayType;
|
||||
|
||||
seal() {
|
||||
//print("SEALED");
|
||||
|
||||
if (_sealedBag) return;
|
||||
|
||||
_sealedBag = true;
|
||||
|
||||
if (_results.length == 0) trigger(<T>[]);
|
||||
if (_replies.length == 0) trigger(<T>[]);
|
||||
|
||||
for (var i = 0; i < _results.length; i++) {
|
||||
var results = List<T?>.filled(_replies.length, null);
|
||||
|
||||
for (var i = 0; i < _replies.length; i++) {
|
||||
var k = _replies[i];
|
||||
var index = i;
|
||||
|
||||
k.then<dynamic>((r) {
|
||||
_results[index] = r;
|
||||
k..then((r) {
|
||||
results[index] = r;
|
||||
_count++;
|
||||
if (_count == _results.length) {
|
||||
if (_count == _replies.length) {
|
||||
if (arrayType != null) {
|
||||
var ar = Warehouse.createArray(arrayType);
|
||||
_results.forEach(ar.add);
|
||||
trigger(ar);
|
||||
var ar = Warehouse.createArray(arrayType as Type);
|
||||
results.forEach(ar.add);
|
||||
trigger(ar as List<T>);
|
||||
} else {
|
||||
trigger(_results);
|
||||
trigger(results.cast<T>());
|
||||
}
|
||||
}
|
||||
}).error((ex) {
|
||||
})..error((ex) {
|
||||
triggerError(ex);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
add(AsyncReply<T> reply) {
|
||||
void add(AsyncReply<T> reply) {
|
||||
if (!_sealedBag) {
|
||||
_results.add(null);
|
||||
//_results.add(null);
|
||||
_replies.add(reply);
|
||||
}
|
||||
}
|
||||
|
||||
addBag(AsyncBag<T> bag) {
|
||||
void addBag(AsyncBag<T> bag) {
|
||||
bag._replies.forEach((r) {
|
||||
add(r);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user