2
0
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:
2021-07-24 13:12:43 +03:00
parent 6be04c39ed
commit 614c6853e3
48 changed files with 3022 additions and 3320 deletions

View File

@@ -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);
});