Что эквивалентно для `componentDidMount ()` в Flutter - PullRequest
0 голосов
/ 04 мая 2020

Я из ReactJS и React Native. Я хочу попробовать Флаттер. Пока что я хочу иметь экран входа в систему. Поэтому я хочу проверить, если пользователь уже вошел в систему. Если это так, перейдите на главный экран. Если нет, покажите экран входа в систему.

В React с TypeScript и Firebase я бы сделал так:

interface RootScreenState {
  isLoading: boolean;
  user: firebase.User | null;
}

class RootScreen extends React.Component<{}, RootScreenState> {

  constructor(props) {
    super(props);

    this.state = {
      isLoading: true,
      user: null
    }
  }

  componentDidMount() {

    // make an async call to some firebase libraries to look for stored user credentials
    // if some credentials are found try to login
    // of no credentials are found or login fails return null
    // otherwise the user is returned
    tryToLogin().then((currentUser: firebase.User | null) => {
      this.setState({
        isLoading: false,
        user: currentUser
      }).catch(err => { /* do some error handling */});
  }

  render() {
    const { isLoading, user } = this.state;

    if(isLoading) return ( /* loading screen */ );
    else if(user === null) return ( /* login screen */ );
    else return ( /* home screen */ );
  }
}

Как мне работать с Flutter? Я не мог найти ничего о эквиваленте compnentDidMount(), я должен сделать это в конструкторе? В React это не получится.

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Вы можете сделать это в initState Флаттера. Сначала он вызывается при рендеринге вашего дерева виджетов.

Проверьте код ниже:

  @override
  void initState() {
    super.initState();
  }

Для получения более подробной информации о различных вещах в React Native, которые вы хотели бы знать во Flutter. См. Ссылку ниже: Это официальная документация людей, приходящих во Флаттер из фона React Native.

Документация

Надеюсь, это поможет.

1 голос
/ 04 мая 2020

используйте initState в виджете с отслеживанием состояния. InitState вызывается, когда виджет с сохранением состояния впервые рисуется. Для бывших

class _MyAppState extends State<MyApp> {
  Future<Album> futureAlbum;

  @override
  void initState() {
    super.initState();
    futureAlbum = fetchAlbum();
  }
0 голосов
/ 04 мая 2020

Когда дело доходит до запроса данных с сервера, вы можете использовать FutureBuilder напрямую.

Иногда сборка виджета запускается дважды, если вы неправильно установили начальные состояния в состояния.

Я предпочитаю поместить FutureBuilder в область виджетов сборки и сделать ее более понятной и понятной для меня.

...