Войти через Redux и Flutter - PullRequest
       1

Войти через Redux и Flutter

0 голосов
/ 30 марта 2020

Я пытаюсь написать систему для входа пользователя в систему с использованием избыточности для управления состоянием, я сделал то же, что и ниже, но не знаю, что делать дальше

возможно, я что-то делаю неправильно, может кто-то посмотрите и направьте меня по правильному пути?

вот мой код:

user_action.dart

const USER_LOGIN_REQUEST = 'USER_LOGIN_REQUEST';
const USER_LOGIN_SUCCESS = 'USER_LOGIN_SUCCESS';
const USER_LOGIN_FAILURE = 'USER_LOGIN_FAILURE';

RSAA getLoginRequest(String email, String password) {
  return
    RSAA(
      method: 'POST',
      endpoint: 'http://10.0.2.2:80/user/login',
      types: [
        USER_LOGIN_REQUEST,
        USER_LOGIN_SUCCESS,
        USER_LOGIN_FAILURE,
      ],
      headers: {
        'Content-Type': 'application/json',
      },
      body: {"email":email, "password":password}
    );
}

ThunkAction<AppState> getLogin(String email, String password) => (Store<AppState> store) => store.dispatch(getLoginRequest(email, password));

user_reducer.dart

UserState userReducer(UserState state, FSA action) {
  UserState newState = state;

  switch (action.type) {
    case USER_LOGIN_REQUEST:
      newState.login.error = null;
      newState.login.loading = true;
      newState.login.data = null;
      return newState;

    case USER_LOGIN_SUCCESS:
      newState.login.error = null;
      newState.login.loading = false;
      newState.login.data = userFromJSON(action.payload);
      return newState;

    case USER_LOGIN_FAILURE:
      newState.login.error = action.payload;
      newState.login.loading = false;
      newState.login.data = null;
      return newState;

    default:
      return newState;
  }
}

User userFromJSON(dynamic payload){
  return User.fromJSON(json.decode(payload));
}

user_state.dart

class UserState {
  UserLogin login;

  UserState({
    this.login
  });

  factory UserState.initial() => UserState(
    login: UserLogin.initial()
  );
}


class UserLogin {
  dynamic error;
  bool loading;
  User data;

  UserLogin({
    this.error,
    this.data,
    this.loading
  });

  factory UserLogin.initial() => UserLogin(
    error: null,
    loading: false,
    data: null
  );
}

и мой user_login_screen:

class LoginUserScreen extends StatelessWidget{
  void handleInitialBuild(UserLoginScreenProps props){
    props.getUser();
  }

  @override
  Widget build(BuildContext context){
    return StoreConnector<AppState, UserLoginScreenProps>(
      converter: (store) => mapStateToProps(store),
      onInitialBuild: (props) => this.handleInitialBuild(props),
      builder: (context, props){
        // 
      },
    );
  }
}

class UserLoginScreenProps{
  final Function getUser;

  UserLoginScreenProps({
    this.getUser
  });
}

UserLoginScreenProps mapStateToProps(Store<AppState> store){
  return UserLoginScreenProps(
    getUser: (String email, String password) => store.dispatch(getLoginRequest(email, password))
  );
}

Я застрял на этом этапе и не знаю, что делать дальше, кто-нибудь может помочь?

спасибо за любую помощь заранее, действительно, любая помощь будет полезна

1 Ответ

0 голосов
/ 03 апреля 2020

Прежде всего вы должны отправить действие getLogin вместо getLoginRequest. Также тело должно быть строкой, так что json.encode решит это. Я не уверен, почему это происходит, но когда у меня будет время, я поработаю над этим.

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