I'm developing a QR code reader app and I use an external QR reader package (https://pub.dev/packages/qr_code_scanner). It listens to a Stream and returns QR data. But when I write the data to sqlite database it writes the same data several times because it doesn't stop listening to Stream. I dont think unsubscribing from stream is a good idea because i still need the stream to listen after coming back from a url launch or closing the dialog. Please correct me if I'm wrong and suggest a solution, Thank You.
void _onQRViewCreated(QRViewController controller) {
this.controller = controller;
controller.scannedDataStream.listen((scanData) async {
setState(() {
qrData = scanData;
});
if (await canLaunch(qrData)) {
var status = await launch(qrData);
if(status){
final data = QrModel(
content: scanData,
date: DateFormat.yMMMd().add_jm().format(DateTime.now()),
);
await dbProvider.addData(data);
}
} else {
if (!alertBoxOpen) {
final data = QrModel(
content: scanData,
date: DateFormat.yMMMd().add_jm().format(DateTime.now()),
);
await dbProvider.addData(data);
setState(() => alertBoxOpen = true);
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text(qrData),
actions: [
MaterialButton(
child: Text('OK',
style: TextStyle(
fontSize: 18.0, fontWeight: FontWeight.bold)),
onPressed: () {
setState(() => alertBoxOpen = false);
Navigator.of(context).pop();
}),
],
);
});
}
}
});
}