У меня есть FutureBuilder, который возвращает Scaffold с IndexedStack и BottomNavigationBar. один из экранов в стеке имеет собственные дочерние виджеты. когда я нажимаю на один из них, а затем go назад, состояние родительского виджета теряется, и приложение перестраивается с предыдущего экрана на экран со стеком (своего рода экран приветствия).
Я пробовал использовать AutomaticKeepAliveClientMixin. честно говоря, я не был уверен, следует ли мне добавлять его к родительскому виджету или дочерним элементам, поэтому я попробовал все варианты, но это не сработало.
любые идеи о том, как сохранить состояние виджета с помощью стек?
class Jesus extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _JesusState();
}
}
class _JesusState extends State<Jesus>
with AutomaticKeepAliveClientMixin<Jesus> {
@override
bool get wantKeepAlive => true;
int _selectedPage = 0;
List<Widget> pageList = List<Widget>();
SharedPreferences prefs;
var image, email, name, phone;
void _onItemTapped(int index) {
setState(() {
_selectedPage = index;
});
}
@override
Widget build(BuildContext context) {
super.build(context);
return FutureBuilder(
future: getCurrentUser(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (image != null) //(snapshot.hasData)
{
if (pageList.length < 1) {
pageList.add(Screen2());
pageList.add(Settings());
pageList.add(History());
pageList.add(Profile());
pageList.add(About());
}
return Scaffold(
body: IndexedStack(
index: _selectedPage,
children: pageList,
),
bottomNavigationBar: BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.map),
title: Text('Home'),
),
BottomNavigationBarItem(
icon: Icon(Icons.history),
title: Text('Winners'),
),
BottomNavigationBarItem(
icon: Icon(Icons.account_balance),
title: Text('History'),
),
BottomNavigationBarItem(
icon: Icon(Icons.face),
title: Text('Profile'),
),
BottomNavigationBarItem(
icon: Icon(Icons.info_outline),
title: Text('About'),
),
],
currentIndex: _selectedPage,
selectedItemColor: Color(0xFFffd700),
onTap: _onItemTapped,
unselectedItemColor: Colors.grey,
),
);
} else {
return Container(),
),
),
);
}
},
);
}
}