0

Hi I have a scenario where in I enter the username password based on the credentials it will redirect the user to second screen . I am not sure where did I got wrong? but I am getting this error below: Unhandled Exception: Navigator operation requested with a context that does not include a Navigator.

Here is the code:

import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'Animation/FadeAnimation.dart'; import 'AuthenticationService.dart'; import 'PatientList.dart'; class HomePage extends StatelessWidget { final TextEditingController emailController = TextEditingController(); final TextEditingController passwordController = TextEditingController(); gotoPatientList(BuildContext context) { Navigator.push( context, MaterialPageRoute(builder: (context) =>PatientList()), ); } @override Widget build(BuildContext context) { return MultiProvider( providers: [ Provider<AuthenticationService>( create: (_) => AuthenticationService(FirebaseAuth.instance), ), StreamProvider( create: (context) => context.read<AuthenticationService>().authStateChanges, ), ], child:MaterialApp( home: SingleChildScrollView( child:RaisedButton( onPressed: () { gotoPatientList(context); context.read<AuthenticationService>().signIn( email: emailController.text.trim(), password: passwordController.text.trim(), ); }, child: Container( child: Column( children: <Widget>[ Container( height: 400, decoration: BoxDecoration( image: DecorationImage( image: AssetImage('assets/images/loginHeader.png'), fit: BoxFit.fill)), child: Stack( children: <Widget>[], ), ), Padding( padding: EdgeInsets.all(30.0), child: Column( children: <Widget>[ FadeAnimation( 1.8, Container( padding: EdgeInsets.all(5), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( color: Color.fromRGBO(143, 148, 251, .2), blurRadius: 20.0, offset: Offset(0, 10)) ]), child: Column( children: <Widget>[ Container( padding: EdgeInsets.all(8.0), decoration: BoxDecoration( border: Border( bottom: BorderSide( color: Colors.grey[100]))), child: TextField( controller: emailController, decoration: InputDecoration( border: InputBorder.none, hintText: "Email or Phone number", hintStyle: TextStyle( color: Colors.grey[400])), ), ), Container( padding: EdgeInsets.all(8.0), child: TextField( controller: passwordController, obscureText: true, decoration: InputDecoration( border: InputBorder.none, hintText: "Password", hintStyle: TextStyle( color: Colors.grey[400])), ), ) ], ), )), SizedBox( height: 30, ), FadeAnimation( 2, Container( height: 50, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), gradient: LinearGradient(colors: [ Color.fromRGBO(214, 0, 27, 1), Color.fromRGBO(214, 0, 27, 1), ])), child: Center( child: Text( "Login", style: TextStyle( color: Colors.white, fontWeight: FontWeight.bold), ), ), )), SizedBox( height: 70, ), FadeAnimation( 1.5, Text( "Forgot Password?", style: TextStyle( color: Color.fromRGBO(214, 0, 27, 1)), )), ], ), ) ], ), ), ), ), ), ); } } class AuthenticationWrapper extends StatelessWidget { @override Widget build(BuildContext context) { final firebaseUser = context.watch<User>(); if (firebaseUser != null) { return HomePage(); } return PatientList(); } }

1 Answer 1

1

You can wrap the button in builder to get the context of the app:

Builder( builder: (context) => RaisedButton( onPressed: () { gotoPatientList(context); context.read<AuthenticationService>().signIn( email: emailController.text.trim(), password: passwordController.text.trim(), ); }, ... ), ); 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.