Какой метод вызывается сразу, когда представление отображается на Flutter? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть экран для отображения данных, загруженных из файлов пользователю, и эти данные периодически обновляются из удаленной службы.Чтобы читать файлы и показывать пользователю, я вызываю метод загрузки данных из void initState(), но при этом этот метод вызывается только один раз при создании экрана, поэтому при любом изменении экран не обновляется.Другой вариант - вызвать метод загрузки данных из Widget build(BuildContext context), но он вызывался много раз, и я этого не хочу.Я хочу написать что-то вроде используемого на Swift viewWillAppear(), но я не нашел способ сделать это.

Я должен загружать данные каждый раз, когда пользователь переходит на экран, из любого локального яиспользуя Navigator.push() и Navigator.pop() для навигации между экранами.

Экран: HomePage

class HomePage extends StatefulWidget {
  State<StatefulWidget> createState() => new HomePageState();
}

class HomePageState extends State<HomePage> {

  @override
  void initState() {    
    print('HOME SCREEN INIT STATE');
    super.initState();
  }

  @override
  Widget build(BuildContext context) {      
      return new Scaffold(
        floatingActionButton: FloatingActionButton(
            onPressed: () {
              Navigator.push(context, MaterialPageRoute(builder: (context) => AddExpensePage()));
            },
            child: new Icon(Icons.add),
            backgroundColor: Color(0xFF7B7BAD),
        ),
      ...
     }

Экран: AddExpensePage

class AddExpensePage extends StatefulWidget {
  State<StatefulWidget> createState() => new AddExpensePageState();
}

class AddExpensePageState extends State<AddExpensePage> {

 @override
  Widget build(BuildContext context) {
  ...
  }
}

Сценарий: Главный экран HomePage, в первый раз вызывается initState(), поэтому я перехожу к AddExpensePage, а с AddExpensePage нажимаю стрелку назад, чтобы вернуться к HomePage,при возврате ни один метод не вызывается для прослушивания при отображении экрана.

1 Ответ

0 голосов
/ 18 февраля 2019

Нет ничего похожего на viewWillAppear, но правильные зацепки для этого в флаттере: initState и didUpdateWidget.И затем убедитесь, что очистка на dispose.

  • initState вызывается при первом подключении вашего состояния к дереву
  • didUpdateWidget вызывается каждый раз, когдато же самое состояние затем присоединяется к новому виджету.
...