flush method
void
flush()
Implementation
void flush() {
if (_queue.isEmpty) return;
final uploadList = List<TrackModel>.from(_queue);
_queue.clear();
final config = AutoTrackConfigManager.instance.config;
final host = config.host;
if (config.samplingRate != 1) {
if (Random().nextDouble() > config.samplingRate) {
// 不在采样范围不上传
return;
}
}
if (config.uploadHandler != null) {
config.uploadHandler!(uploadList);
} else {
if (host != null) {
final t = DateTime.now().millisecondsSinceEpoch;
httpClient.postUrl(Uri.parse(host)).then((request) {
request.headers.contentType = ContentType.json;
request.write(json.encode({
'app_key': config.appKey ?? '',
'signature': config.signature!(t),
't': t,
'user_id': config.userId ?? '',
'track_id': config.trackId ?? '',
'unique_id':
config.uniqueId ?? AutoTrackConfigManager.instance.deviceId,
'device_id': AutoTrackConfigManager.instance.deviceId,
'data_list': uploadList.map((e) => e.toMap()).toList(),
'app_version': AutoTrackConfigManager.instance.appVersion,
'device_info': AutoTrackConfigManager.instance.deviceInfo
}));
return request.close();
}).then((response) {
AutoTrackLogger.getInstance()
.debug('upload status => ${response.statusCode}');
}).catchError((error) {
AutoTrackLogger.getInstance().error(error);
});
}
}
}