Flutter / Dart: как сохранить состояние родительского виджета при использовании indexedStack - PullRequest
0 голосов
/ 28 мая 2020

У меня есть 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(),
              ),
            ),
          );
        }
      },
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...