slimboy
slimboy

Reputation: 1653

pushing new page when state changes is causing weird behaviour

im new to flutter. I am trying to push to a new page whenever my qrcode reader detects a qrcode. however upon detecting the qrcode, infinite pages are being pushed. Can anyone provide me with some advice or sample code that pushes to a new page whenever the state changes?

class _QRViewExampleState extends State<QRViewExample> {
  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
  _QRViewExampleState({this.state});
  var state = false;

  QRViewController controller;

  @override
  Widget build(BuildContext context) {
    if (state == true) {
      WidgetsBinding.instance.addPostFrameCallback((_) {
        Navigator.of(context).push(
          MaterialPageRoute(builder: (ctx) => Menu()),
        );
        // Navigation
      });
    }
    return Scaffold(
     ...
    );
  }

  void _onQRViewCreated(QRViewController controller) {
    this.controller = controller;
    controller.scannedDataStream.listen((scanData) {
      setState(() {
        state = true;
          });
    });
  }

Upvotes: 0

Views: 68

Answers (1)

Haris Thohir
Haris Thohir

Reputation: 36

first of all, this line of code:

WidgetsBinding.instance.addPostFrameCallback((_) {});

usually used when you want run statement after build finished, and called inside initState(). in your case i think you don't need it.

i recommend you to call navigator inside your QRViewController listener:

_onQRViewCreated(QRViewController controller) {
    this.controller = controller;
    controller.scannedDataStream.listen((scanData) {
      Navigator.of(context).push(
          MaterialPageRoute(builder: (ctx) => Menu(scanData)),
        );
    });
}

Upvotes: 1

Related Questions