plugin_scanner_qr 0.2.0
plugin_scanner_qr: ^0.2.0 copied to clipboard
Plugin Flutter para leitura de QR Code no Android usando ML Kit e CameraX. Oferece leitura única em tela cheia e leitura contínua com preview embutido na árvore de widgets (PlatformView), com debounce [...]
0.2.0 #
Preview embutido (PlatformView) #
QrScannerPreview+QrScannerController— a leitura contínua agora usa uma PlatformView embutida na árvore de widgets, em vez de uma Activity de tela cheia. Isso permite desenhar UI Flutter por cima do preview: overlay de status, botões, drawer eshowDialog.- Renderização com
PreviewView.ImplementationMode.COMPATIBLE(TextureView) e Texture Layer Hybrid Composition (initSurfaceAndroidView).hybridComposition: truedisponível como alternativa. - Canais por instância (
preview_$viewId), eliminando oEventSinkestático. Eventos agora sãoMapcom discriminadortype(barcode/cameraOpened/error), em vez deStringcrua. PreviewLifecycleOwner— cada preview tem seu próprioLifecycleRegistry, combinando intenção do Dart + foreground da Activity + view anexada.pauseScanning/resumeScanningnão recriam mais as use cases do CameraX.
Correções #
- Permissão de câmera não mente mais.
requestCameraPermission()respondiatrueantes de o usuário decidir, e a Activity pedia permissão sem trataronRequestPermissionsResult— resultado: tela preta permanente na primeira execução. Agora háRequestPermissionsResultListenere oFuturesó completa após a resposta real. - Novo
hasCameraPermission()— consulta pura. O plugin não solicita permissão no caminho do preview, evitandoCan request only one set of permissions at a timequando o app usapermission_handler. - Vazamentos corrigidos: cliente do ML Kit era criado a cada
switchCamera()e nunca fechado;cameraExecutorsó era desligado no modo contínuo (sair pelo botão voltar vazava);scanEventSinkestático e singletonMlKitScannerActivity.currentremovidos; listeners de Activity agora são desregistrados no detach. unbind(preview, analysis)em vez deunbindAll()—ProcessCameraProvideré singleton de processo eunbindAll()derrubaria outros consumidores de câmera.uses-feature android:requiredpassou afalse— comotrue, era mesclado no app consumidor e o removia da Play Store para aparelhos sem câmera.- Removido o atributo
packagedo manifest da lib (obsoleto no AGP 8) e o blocodependencies {}que estava aninhado dentro deandroid {}. - Removidas ~200 linhas de pipeline CameraX morto (
startCamera,bindCameraUseCases,stopScanner,QRCodeAnalyzer) que nunca eram alcançadas. - Corrigido o teste de widget do example, que procurava um texto inexistente.
Breaking changes #
startContinuousScanrespondeUNSUPPORTED. UseQrScannerPreviewcomQrScannerController.ContinuousQrScannere os métodos globais do modo contínuo seguem disponíveis, marcados@Deprecated; os globais delegam para a últimaQrScannerPreviewcriada.requestCameraPermission()marcado@Deprecated— prefira gerenciar a permissão no app.- CameraX 1.3.1 → 1.3.4. Requer
ndkVersion = "27.0.12077973"no app consumidor.
0.1.0 #
- Leitura contínua oficializada — API pública completa com
startContinuousScan,pauseScanning,resumeScanningestopContinuousScan. - Novos modelos Dart —
ContinuousScanOptions(debounce, cooldown, câmera, orientação, torch) eQrScanResult(valor + timestamp). ContinuousQrScanner— helper de alto nível que encapsula permissão, abertura da câmera e ciclo de vida do stream.- Debounce nativo — o Android suprime reemissões do mesmo QR dentro do intervalo
duplicateDebounce(padrão 1500 ms), sem round-trip para o Flutter. - Cooldown nativo — após cada leitura, o scanner pausa automaticamente pelo tempo configurado em
cooldown(padrãoDuration.zero= sem pausa). - Toasts removidos por padrão — feedback visual de "Leitura pausada/retomada" agora só é exibido quando
showNativeFeedback: true. PluginScannerQrrefatorada como fachada fina; toda lógica de canal delegada àPluginScannerQrPlatform.onBarcodeScanned— stream oficial tipado comoStream<QrScanResult>na platform interface e no method channel.- Example atualizado para usar
ContinuousQrScannercom slider de cooldown configurável.
0.0.1 #
- Versão inicial com leitura única (
scanQRCode,scanQRCodeWithOptions).