У меня есть интерфейсы Flutter с вкладками, использующие DefaultTabController с 3 страницами, каждый с виджетом с отслеживанием состояния.Кажется, я могу просто переключаться между двумя первыми вкладками, но когда я перехожу на 3-ю страницу, объект состояния для первой страницы удаляется.Последующие обновления состояния (с использованием setState ()) затем завершаются неудачей.
Я переопределил метод dispose () объекта состояния для первой страницы, чтобы он выводил сообщение при утилизации.Он становится доступным, как только я нажимаю на третью вкладку.Я не могу найти документацию о том, почему Flutter располагает объектами состояния.(Много в жизненном цикле, но не причины для прохождения этапов.)
Ничего необычного в настройке вкладок, я не думаю.
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
title: Text(title),
bottom: TabBar(
tabs: [
// Use these 3 icons on the tab bar.
Tab(icon: Icon(Icons.tune)),
Tab(icon: Icon(Icons.access_time)),
Tab(icon: Icon(Icons.settings)),
],
),
),
body: TabBarView(
children: [
// These are the 3 pages relating to to the tabs.
ToolPage(),
TimerPage(),
SettingsPage(),
],
Сами страницы довольно просты.Нет анимации.Просто переключатели, ползунки и т. Д. Я думаю о единственных отклонениях, которые я сделал из примеров кода, которые я видел, - это то, что я сделал виджет основного приложения с состоянием, я расширил вкладки для поддержки wantKeepAlive () иЯ перезаписываю wantKeepAlive, чтобы установить для него значение true (хотя это может помочь), и я вызываю setState () на первых двух вкладках внешнего объекта, который Android Studio помечает со слабым предупреждением.Состояние на первых двух страницах обновляется при чтении из веб-сокета, это приложение открывает на удаленном сервере.При дальнейшем тестировании я заметил, что это происходит только при переходе с первой на третью страницу.Переход от первого к второму или от второго к третьему не запускает удаление.
Я ожидаю, что объект State, связанный с StatefulWidget, останется и с wantKeepAlive = true не поймет, почему он удаляется, когда я нажимаюна третью вкладку, особенно потому, что этого не происходит, когда я нажимаю на вторую или со второй на третью.