getStats method
Gets current session statistics.
Implementation
SessionStats getStats() {
final now = DateTime.now();
final duration = _startedAt != null
? (_endedAt ?? now).difference(_startedAt!)
: Duration.zero;
final validCount = _results.where((r) => r.isValid).length;
final invalidCount = _results.where((r) => !r.isValid).length;
Duration? avgInterval;
if (_scanTimestamps.length >= 2) {
final totalInterval = _scanTimestamps.last
.difference(_scanTimestamps.first)
.inMilliseconds;
avgInterval = Duration(
milliseconds: totalInterval ~/ (_scanTimestamps.length - 1));
}
// Find dominant mode
ScanMode? dominant;
if (_results.isNotEmpty) {
final modeCounts = <ScanMode, int>{};
for (final result in _results) {
modeCounts[result.mode] = (modeCounts[result.mode] ?? 0) + 1;
}
dominant = modeCounts.entries
.reduce((a, b) => a.value >= b.value ? a : b)
.key;
}
return SessionStats(
totalScans: _results.length,
validScans: validCount,
invalidScans: invalidCount,
duplicatesFiltered: _duplicatesFiltered,
startedAt: _startedAt ?? now,
endedAt: _endedAt,
duration: duration,
successRate:
_results.isNotEmpty ? validCount / _results.length : 0.0,
averageScanInterval: avgInterval,
dominantMode: dominant,
);
}