stopou_blocker 0.7.3
stopou_blocker: ^0.7.3 copied to clipboard
Plugin do Stopou para bloqueio por VPN local (preparado para estratégias futuras).
🛡️ Stopou Blocker #
Plugin Flutter para bloqueio de conteúdo via VPN local e detecção de palavras-chave.
Versão: 0.7.3
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.7.3
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