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