🛡️ Stopou Blocker
Plugin Flutter para bloqueio de conteúdo via VPN local e detecção de palavras-chave.
Versão: 0.1.2
Compatibilidade: Flutter 3.3.0+ | FlutterFlow ✅
🎯 Funcionalidades
- ✅ Bloqueio VPN: Filtragem DNS em tempo real via VPN local
- ✅ Detecção Keywords: Alertas para palavras-chave via Accessibility Service
- ✅ Status em Tempo Real: APIs para verificar permissões e estado dos serviços
- ✅ Overlays Customizáveis: Modais personalizáveis para alertas
- ✅ Recovery Automático: Sistema robusto com retry e health checks
- ✅ FlutterFlow Ready: APIs otimizadas para desenvolvimento visual
🚀 Instalação
dependencies:
stopou_blocker: ^0.1.2
flutter pub get
📋 Uso Básico
1. Verificar e Solicitar Permissões
// Verificar status das permissões
final hasVpnPermission = await StopouBlocker.hasVpnPermission();
final hasAccessibilityPermission = await StopouBlocker.hasAccessibilityPermission();
// Solicitar permissões se necessário
if (!hasVpnPermission) {
await StopouBlocker.requestPermission();
}
if (!hasAccessibilityPermission) {
await StopouBlocker.requestAccessibilityPermission();
}
2. Iniciar Bloqueio VPN
await StopouBlocker.start(
blocklist: ['.bet.br', 'exemplo.com'],
logAttempts: true,
dnsServers: ['1.1.1.1', '8.8.8.8'],
strategies: [BlockStrategies.vpn],
);
3. Configurar Bloqueio de Keywords
await StopouBlocker.startKeywordBlocker([
'bet',
'casino',
'apostas',
]);
4. Monitorar Status
// Verificar se serviços estão rodando
final vpnRunning = await StopouBlocker.isVpnRunning();
final keywordBlockerRunning = await StopouBlocker.isKeywordBlockerRunning();
// Escutar eventos em tempo real
StopouBlocker.events.listen((event) {
print('Evento: ${event['status']}');
if (event['type'] == 'keyword_alert') {
print('Palavra detectada: ${event['message']}');
}
});
🎛️ API Completa
| Método | Descrição | Retorno |
|---|---|---|
hasVpnPermission() |
Verifica permissão VPN | Future<bool> |
hasAccessibilityPermission() |
Verifica permissão acessibilidade | Future<bool> |
hasNotificationPermission() |
Verifica permissão notificação | Future<bool> |
isVpnRunning() |
Status do serviço VPN | Future<bool> |
isKeywordBlockerRunning() |
Status do bloqueador keywords | Future<bool> |
start() |
Inicia bloqueio VPN | Future<void> |
stop() |
Para todos os serviços | Future<void> |
startKeywordBlocker() |
Inicia detecção keywords | Future<List<String>> |
stopKeywordBlocker() |
Para detecção keywords | Future<void> |
events |
Stream de eventos | Stream<BlockEvent> |
🏗️ Melhorias v0.1.2
📖 Ver documentação completa das melhorias
Principais Adições:
- ✅ 6 novos métodos de verificação de status
- ✅ Overlay customizável para alertas (substitui Toast)
- ✅ Accessibility Service otimizado (-80% eventos processados)
- ✅ VPN com retry automático e health checks
- ✅ Cache persistente de keywords
- ✅ Testes unitários expandidos
- ✅ App exemplo completamente redesenhado
🔧 Configuração Android
Permissões (Automáticas)
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Configuração Proguard
Adicione ao android/app/proguard-rules.pro:
-keep class app.stopou.stopou_blocker.** { *; }
🧪 Exemplo de Uso Completo
Veja o app de exemplo para uma implementação completa com:
- Dashboard de status em tempo real
- Gestão inteligente de permissões
- Controles adaptativos baseados no estado
- Log de eventos detalhado
📱 Compatibilidade FlutterFlow
O plugin foi otimizado para FlutterFlow com:
- ✅ APIs síncronas para verificação de estado
- ✅ Widgets condicionais baseados em permissões
- ✅ Event listeners para atualizações em tempo real
- ✅ Tratamento robusto de erros
Exemplo FlutterFlow:
// Use em Actions do FlutterFlow
if (await StopouBlocker.hasVpnPermission()) {
// Mostrar botão "Iniciar VPN"
} else {
// Mostrar botão "Configurar Permissões"
}
🐛 Troubleshooting
VPN não inicia
- Verificar permissão:
await StopouBlocker.hasVpnPermission() - Ver eventos:
StopouBlocker.events.listen() - Verificar logs no console
Keywords não detectadas
- Habilitar acessibilidade:
await StopouBlocker.requestAccessibilityPermission() - Verificar status:
await StopouBlocker.isKeywordBlockerRunning() - Testar com keywords simples primeiro
Performance Issues
- Use
hasVpnPermission()em vez de tentar iniciar VPN - Limite keywords a 10-20 termos
- Evite polling frequente de status
🤝 Contribuição
- Fork o projeto
- Crie feature branch:
git checkout -b feature/nova-funcionalidade - Commit:
git commit -m 'Adiciona nova funcionalidade' - Push:
git push origin feature/nova-funcionalidade - Abra Pull Request
📄 Licença
Este projeto está sob licença MIT. Veja LICENSE para detalhes.
🆘 Suporte
- 📧 Email:
[email protected] - 🐛 Issues: GitHub Issues
- 📖 Wiki: Documentação Detalhada