getAssessment method

  1. @override
Future<Assessment> getAssessment({
  1. List<String>? trustedInstallers,
})
override

Implementation

@override
Future<Assessment> getAssessment({List<String>? trustedInstallers}) async {
  _log.info("Güvenlik denetimi isteniyor...");

  // 1. Cache kontrolü
  if (_lastAssessment != null &&
      DateTime.now().difference(_lastAssessment!.timestamp) <
          _cacheDuration) {
    _log.info(
      "Sonuç önbellekten (cache) döndürülüyor. Süre: $_cacheDuration",
    );
    _handleThreat(_lastAssessment!);
    return _lastAssessment!;
  }

  _log.info("Yeni güvenlik denetimi başlatılıyor...");
  try {
    final resultsMap = await methodChannel.invokeMapMethod<String, bool>(
      'getSecurityAssessment',
      {'trustedInstallers': trustedInstallers},
    );

    // 2. Daha iyi hata fırlatma
    if (resultsMap == null) {
      throw PlatformException(
        code: 'NULL_RESULT',
        message: 'Native assessment result is null.',
      );
    }

    final result = SecurityResult.fromJson(resultsMap);
    _log.fine("Native sonuçlar: $result");

    final threatLevel = _calculateThreatLevel(result);
    _log.info("Hesaplanan Tehdit Seviyesi: $threatLevel");

    final assessment = Assessment(result, threatLevel);

    _lastAssessment = assessment; // Sonucu cache'le

    _handleThreat(assessment);
    return assessment;
  } on PlatformException catch (e, stacktrace) {
    _log.severe("Platform hatası!", e, stacktrace);
    final result = SecurityResult(isTampered: true, isDebugged: true);
    final assessment = Assessment(result, _calculateThreatLevel(result));
    _handleThreat(assessment);
    return assessment;
  }
}