Line data Source code
1 : import 'dart:async'; 2 : 3 : class GetQueue { 4 : final List<_Item> _queue = []; 5 : bool _active = false; 6 : 7 0 : void _check() async { 8 0 : if (!_active && _queue.isNotEmpty) { 9 0 : _active = true; 10 0 : var item = _queue.removeAt(0); 11 : try { 12 0 : item.completer.complete(await item.job()); 13 : } catch (e) { 14 0 : item.completer.completeError(e); 15 : } 16 0 : _active = false; 17 0 : _check(); 18 : } 19 : } 20 : 21 0 : Future<T> add<T>(Function job) { 22 0 : var completer = Completer<T>(); 23 0 : _queue.add(_Item(completer, job)); 24 0 : _check(); 25 0 : return completer.future; 26 : } 27 : } 28 : 29 : class _Item { 30 : final completer; 31 : final job; 32 0 : _Item(this.completer, this.job); 33 : }