import 'dart:async'; import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart'; class TalkDataRepository { // 创建一个私有的构造函数,防止外部创建实例 TalkDataRepository._() { _talkDataStreamController = StreamController.broadcast( onListen: () { _isListening = true; }, onCancel: () { _isListening = false; }, sync: false, // 异步模式 ); } // 使用 _instance 来保存单例对象 static final TalkDataRepository _instance = TalkDataRepository._(); // 提供一个静态方法来获取单例实例 static TalkDataRepository get instance => _instance; // 创建一个 StreamController late final StreamController _talkDataStreamController; bool _isListening = false; // 提供一个方法来获取 Stream Stream get talkDataStream => _talkDataStreamController.stream.transform( StreamTransformer.fromHandlers( handleData: (TalkData data, EventSink sink) { // 限制缓冲区大小为 100 if (_buffer.length >= 100) { _buffer.removeAt(0); // 丢弃最旧的数据 } _buffer.add(data); sink.add(data); }, ), ); final List _buffer = []; // 用于存储数据的缓冲区 // 提供一个方法来添加 TalkData 到 Stream void addTalkData(TalkData talkData) async { if (_isListening) { Future.microtask(() { _talkDataStreamController.add(talkData); }); } } // 提供一个方法来关闭 StreamController void dispose() { _talkDataStreamController.close(); } }