Как перейти к родителю виджета во флаттере - PullRequest
1 голос
/ 11 марта 2020

Я хочу перейти ко второму нижнему элементу на странице во флаттере, с других страниц.

enter image description here

Родитель здесь - BottomNavigationBar, который я хочу настроить изменение страницы (я определяю ключ для нее в провайдере для доступа к ней с других страниц).

 List<Widget> pages = new List<Widget>();
  BottomNavigationBar bottomNavigationBar;

  updateList(){
    pages.addAll({
      Dashboard(),
      AllServices(),
      Account(),
      Charge(),
    });
  }

  int _selectedIndex = 0;

  Widget _bottomNavigationBar(int selectedIndex,key)  {
    return BottomNavigationBar(
      key: key,
      onTap: (int index) => setState(() => _selectedIndex = index),
      currentIndex: selectedIndex,
      type: BottomNavigationBarType.fixed,
      items: <BottomNavigationBarItem>[
        BottomNavigationBarItem(
          icon: new Icon(Icons.home),
          title:  new Text("A page"),
        ),
        BottomNavigationBarItem(
          icon: new Icon(Icons.location_on),
          title: new Text("B page")
        ),
        BottomNavigationBarItem(
          icon: new Icon(Icons.store),
          title: new Text("C page")
        ),
        BottomNavigationBarItem(
          icon: new Icon(Icons.person),
          title:new Text("D page")
        ),
      ],
    );

  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    updateList();
  }

  @override
  Widget build(BuildContext context) {
    final globalKeyForBottomNavigate =  Provider.of<Controller>(context, listen: false).bottomNavigate;

    return Scaffold(
      bottomNavigationBar: _bottomNavigationBar(_selectedIndex,globalKeyForBottomNavigate),
      body: pages[_selectedIndex],
    );
  }

А потомками являются страницы A, B, C, D. теперь со страницы AI Перейдите на страницу F. Затем, если действие инициировано, я хочу перейти на страницу B, но мое решение состоит в том, чтобы изменить индекс BottomNavigationBar на странице F, а затем перейти на страницу A. Это работает, но не ведет непосредственно к содержимое страницы B и BottomNavigationBar. В моем решении я говорю «хорошо» сначала измените индекс BottomNavigationBar, затем go до последней страницы (здесь это страница A), но, как вы видите, я не знаю, как напрямую перейти на страницу B. Это код для страница F.

onTap: (){
        var bottomKey=Provider.of<Controller>(context, listen: false).bottomNavigate;

        final BottomNavigationBar navigationBar = bottomKey.currentWidget;
        navigationBar.onTap(1);

        Navigator.pop(context);

      },

1 Ответ

1 голос
/ 11 марта 2020

Вы можете попробовать использовать переменную окружения в приложении. и на основе действия изменить значение переменной среды. Во-вторых, свяжите значение selectedIndex с этой переменной среды, поэтому, когда эта переменная изменится, она изменит значение selectedIndex и вызовет страницу панели мониторинга с новым значением индекса, после чего вы перейдете на нужную страницу из нижней панели.

...