I am using provider as a state management in flutter. I am currently working on authentication using custom auth not firebase authentication.
I am using provider package, but when I tap on button provider give me value like Email and password does not match but when I press the button second time it give me updated value like email and password are correct.
I am writing following code:
main.dart
class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [ChangeNotifierProvider(create: (_) => SignInBusinessLogic())],
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
          visualDensity: VisualDensity.adaptivePlatformDensity,
        ),
        home: Login(),
      ),
    );
  }
}
login.dart
class Login extends StatelessWidget {
  final SignInValidations _signInValidations = SignInValidations();
  final _formKey = GlobalKey<FormState>();
  TextEditingController _name = TextEditingController();
  TextEditingController _password = TextEditingController();
  @override
  Widget build(BuildContext context) {
    var _authStatus = Provider.of<SignInBusinessLogic>(context);
    return Scaffold(
      appBar: AppBar(
        title: Text("Login"),
      ),
      body: Form(
        key: _formKey,
        child: ListView(
          children: [
            TextFormField(
              controller: _name,
              validator: (val) => _signInValidations.validateUsernameField(val)
                  ? SignInValidationsConstants.emailEmptyValidation
                  : null,
            ),
            TextFormField(
              controller: _password,
              validator: (val) => _signInValidations.validatePasswordField(val)
                  ? SignInValidationsConstants.passwordValidation
                  : null,
            ),
            _authStatus.status == Status.Authenticating
                ? CircularProgressIndicator()
                : RaisedButton(onPressed: () async {
                    if (!_formKey.currentState.validate()) {
                      return;
                    }
                    _authStatus.validateUser(
                        _name.text, _password.text, "2423");
                    switch (_authStatus.status) {
                      case Status.Initialized:
                        print("Initialize");
                        break;
                      case Status.Validated:
                        print("Validate");
                        break;
                      case Status.FirstLogin:
                        print("First Login");
                        break;
                      case Status.DeviceIDNotMatch:
                        print("Device id not match");
                        break;
                      case Status.AccessDenied:
                        print("Access Denied");
                        break;
                      default:
                        print("Default Case");
                    }
                  })
          ],
        ),
      ),
    );
  }
}
signInBusinessLogic.dart
enum Status {
  Initialized,
  FirstLogin,
  Validated,
  AccessDenied,
  DeviceIDNotMatch,
  Authenticating
}
class SignInBusinessLogic with ChangeNotifier {
  Status _status = Status.Initialized;
  AuthServices _authServices = AuthServices();
  Status get status => _status;
  StreamSubscription<List<UserModel>> validateUser(
      String email, String password, String deviceID) {
    return _authServices.validateUser(email, password, deviceID).listen((list) {
      _status = Status.Authenticating;
      notifyListeners();
      if (list.isEmpty) {
        _status = Status.AccessDenied;
        notifyListeners();
      }
      list.map((user) {
        if (user.deviceId == deviceID) {
          _status = Status.Validated;
          print(_status);
          notifyListeners();
        } else if (user.deviceId == "") {
          _status = Status.FirstLogin;
          notifyListeners();
         
        } else {
          _status = Status.DeviceIDNotMatch;
          notifyListeners();
        }
      }).toList();
    });
  }
}
AuthService Class
class AuthServices {
  final FirebaseFirestore _db = FirebaseFirestore.instance;
  ///Check if the user validates
  Stream<List<UserModel>> validateUser(
      String email, String password, String deviceID) {
    return _db
        .collection('classTeachers')
        .where('email', isEqualTo: email)
        .where('password', isEqualTo: password)
        .snapshots()
        .map((list) =>
            list.docs.map((docs) => UserModel.fromJson(docs.data())).toList());
  }
}
Kindly help me in solving me issue. Thanks in advance for your precious time.

