Home > Blockchain >  Navigator.push not working as its supposed to be
Navigator.push not working as its supposed to be

Time:01-16

I am trying to go to the LoginScreen from my StartScreen but it does not work when I click on the elevated button

PersonStatus(
              label: 'EMPLOYER',
              imageProvider: 'assets/images/employer.png',
              onPressed: (context) {
                int employerNum = 1;
                Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => LoginScreen(
                        employerNumber: employerNum,
                      ),
                    ));
              },
            ),

Following is the LoginScreen

class LoginScreen extends StatefulWidget {
  final int employerNumber;
  const LoginScreen({Key? key, required this.employerNumber}) : super(key: key);

  @override
  _LoginScreenState createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  @override
  Widget build(BuildContext context) {
    return Form(
      child: ListView(
        children: [
          PersonStatus(
              label: widget.employerNumber == 1 ? 'EMPLOYER' : 'EMPLOYEE',
              imageProvider: widget.employerNumber == 1
                  ? 'assets/images/employer.png'
                  : 'assets/images/employee.png'),
        ],
      ),
    );
  }
}

Although I passed some parameters forward I expected it to work.

CodePudding user response:

Maybe you are passing the wrong context to the navigator, try removing the context parameter in the onpressed:

PersonStatus(
              label: 'EMPLOYER',
              imageProvider: 'assets/images/employer.png',
              onPressed: () {
                int employerNum = 1;
                Navigator.push(
                    context,
                    MaterialPageRoute(
                      builder: (context) => LoginScreen(
                        employerNumber: employerNum,
                      ),
                    ));
              },
            ),

CodePudding user response:

You can create callback for PersonStatus:

PersonStatus(
              Function(int result) onTap// it's a callback
              label: 'EMPLOYER',
              imageProvider: 'assets/images/employer.png',
              onPressed: (context) {
                int employerNum = 1;
                onTap(employerNum);
              },
            )

and then use it:

class LoginScreen extends StatefulWidget {
  final int employerNumber;
  const LoginScreen({Key? key, required this.employerNumber}) : super(key: key);

  @override
  _LoginScreenState createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  @override
  Widget build(BuildContext context) {
    return Form(
      child: ListView(
        children: [
          PersonStatus(
              label: widget.employerNumber == 1 ? 'EMPLOYER' : 'EMPLOYEE',
              imageProvider: widget.employerNumber == 1
                  ? 'assets/images/employer.png'
                  : 'assets/images/employee.png',
            onTap: (result) {
               Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => LoginScreen(
                    employerNumber: employerNum,
                  ),
                ));

            },),
        ],
      ),
    );
  }
}
  •  Tags:  
  • Related