getInstalledAppsForFlutterFlow function

Future<List<Map<String, dynamic>>> getInstalledAppsForFlutterFlow()

📱 OBTER APLICATIVOS INSTALADOS - Compatível com FlutterFlow

Retorna lista de aplicativos instalados no formato JSON. Ideal para FlutterFlow: Pode ser usado diretamente no Local State JSON.

Retorna List<Map<String, dynamic>> com:

  • label: Nome do aplicativo (ex: "YouTube")
  • packageName: Nome do pacote (ex: "com.google.android.youtube")
  • iconBase64: Ícone em Base64 (opcional)

Exemplo no FlutterFlow:

final installedApps = await getInstalledAppsForFlutterFlow();
// Armazenar em: State > installedApps (JSON)

Implementation

Future<List<Map<String, dynamic>>> getInstalledAppsForFlutterFlow() async {
  print(
      '📱 [INSTALLED_APPS] Obtendo aplicativos instalados para FlutterFlow...');

  try {
    final stopwatch = Stopwatch()..start();

    // Usar método para JSON
    final apps = await StopouBlocker.getInstalledApps();

    stopwatch.stop();
    final duration = stopwatch.elapsedMilliseconds;

    print(
        '📱 [INSTALLED_APPS] ✅ ${apps.length} aplicativos obtidos em ${duration}ms');
    print('📱 [INSTALLED_APPS] 📊 Formato: JSON (compatível FlutterFlow)');

    // Log dos primeiros 3 para validação
    final appsToLog = apps.take(3);
    for (int i = 0; i < appsToLog.length; i++) {
      final app = appsToLog.elementAt(i);
      final hasIcon = app['iconBase64'] != null ? '🎨' : '🚫';
      print(
          '📱 [INSTALLED_APPS] ${i + 1}. $hasIcon ${app['label']} (${app['packageName']})');
    }

    if (apps.length > 3) {
      print('📱 [INSTALLED_APPS] ... e mais ${apps.length - 3} aplicativos');
    }

    return apps;
  } catch (e) {
    print('📱 [INSTALLED_APPS] ❌ Erro ao obter aplicativos: $e');
    rethrow;
  }
}