Flutter, Redux и Firebase Auth Ошибка недопустимого аргумента - PullRequest
0 голосов
/ 27 декабря 2018

Я занимаюсь разработкой приложения для флаттера и добавил в проект firebase auth.И он работает нормально для входа в Google, но я не понимаю, как работает make. Войдите с помощью электронной почты и пароля.

Я следую приведенному там примеру https://flutterbyexample.com/log-in-redux-cycle-contd.

Я добавил действия, редукторы и промежуточное программное обеспечение следуют инструкциям для входа в Google, но в случае электронной почты и пароля происходит странное событие.

Здесь журнал:

I/FirebaseAuth(27942): [FirebaseAuth:] Loading module via FirebaseOptions.
I/FirebaseAuth(27942): [FirebaseAuth:] Preparing to create service connection to gms implementation
D/FirebaseAuth(27942): Notifying id token listeners about user ( MZr9euoZKEbWWqNIrB5OcZIWcwf2 ).
D/FirebaseApp(27942): Notifying auth state listeners.
D/FirebaseApp(27942): Notified 0 auth state listeners.
I/flutter (27942): [INFO] LoggingMiddleware: {Action: LogInWithMailAndPasswordFail{There was an error loggin in: Invalid argument(s)}, State: AppState{isLoading: false, currentUser: null}}, ts: 2018-12-27 09:03:18.185480}
I/flutter (27942): [INFO] LoggingMiddleware: {Action: Instance of 'LogInWithMailAndPassword', State: AppState{isLoading: false, currentUser: null}}, ts: 2018-12-27 09:03:18.199120}

Как вы можете видеть на самом деле, вход в систему работаетно сразу после входа в систему вызывается действие LogInWithMailAndPasswordFail.

Часть кода промежуточного программного обеспечения здесь:

    Middleware<AppState> _createLogInWithMailAndPasswordMiddleware() {
  // These functions will always take
  // your store,
  // the action thats been dispatched
  // and the a special function called next.
  return (Store store, action, NextDispatcher next) async {
    // FirebaseUser is the type of your User.
    FirebaseUser user;
    // Firebase 'instances' are temporary instances which give
    // you access to your FirebaseUser. This includes
    // some tokens we need to sign in.
    final FirebaseAuth _auth = FirebaseAuth.instance;

    if (action is LogInWithMailAndPassword) {
      try {

        user = await _auth.signInWithEmailAndPassword(
              email: action.getUsername(),
              password: action.getPassword());


        print('Logged in ' + user.displayName);
        // This can be tough to reason about -- or at least it was for me.
        // We're going to dispatch a new action if we logged in,
        //
        // We also continue the current cycle below by calling next(action).
        store.dispatch(new LogInWithMailAndPasswordSuccessful(user: user));
      } catch (error) {
        store.dispatch(new LogInWithMailAndPasswordFail(error));
      }
    }

    // After you do whatever logic you need to do,
    // call this Redux built-in method,
    // It continues the redux cycle.
    next(action);
  };
}

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Моя проблема заключалась в том, что я неправильно запустил промежуточное ПО, потому что в этом разделе у меня более одного промежуточного ПО.

List<Middleware<AppState>> createAuthMiddleware()  {
  print('createAuthMiddleware');
  final logIn = createLogInMiddleware();
  final logOut = createLogOutMiddleware();
  final signUp = createSignUpMiddleware();
  return [
    TypedMiddleware<AppState, LogInWithGoogle>(logIn),
    TypedMiddleware<AppState, LogInWithFacebook>(logIn),
    TypedMiddleware<AppState, LogInEmailAndPassword>(logIn),
    TypedMiddleware<AppState, CheckLogIn>(logIn),
    TypedMiddleware<AppState, ForgotPassword>(logIn),
    TypedMiddleware<AppState, SignUpEmailAndPassword>(signUp),
    TypedMiddleware<AppState, LogOut>(logOut),
  ];
}
0 голосов
/ 06 января 2019

Я бы проверил, есть ли у объекта user свойство displayName.

Проверьте, напечатав объект user вместо user.displayName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...