123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import 'dart:convert';
- import 'package:fis_common/logger/logger.dart';
- import 'package:flutter/foundation.dart';
- class WhiteBoardTaskQueue {
- WhiteBoardTaskQueue({required this.handler});
- bool _working = false;
- List<String> _dataQueue = [];
- final AsyncValueSetter<Map<String, dynamic>> handler;
- bool get working => _working;
- void add(String data) {
- _dataQueue.add(data);
- _start();
- }
- void _start() async {
- if (_working) return;
- _working = true;
- while (_working) {
- if (_dataQueue.isEmpty) {
- _stop(); // 空闲暂时中止循环
- break;
- }
- await _handleNext();
- }
- }
- void _stop() {
- _working = false;
- }
- Future<void> _handleNext() async {
- final data = _dataQueue.removeAt(0);
- try {
- final map = jsonDecode(data);
- await handler(map);
- } catch (e) {
- logger.e("[WhiteBoardTaskQueue] handle error. data: $data", e);
- }
- }
- }
|