У меня есть экран для отображения данных, загруженных из файлов пользователю, и эти данные периодически обновляются из удаленной службы.Чтобы читать файлы и показывать пользователю, я вызываю метод загрузки данных из 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
,при возврате ни один метод не вызывается для прослушивания при отображении экрана.