如何在颤振中重新创建单个小部件并使其失去状态?

时间:2020-12-29 12:16:54

标签: flutter dart stateful statefulwidget

我有一个小部件,我想重新创建状态,我该怎么做才能实现这一目标?我听说 UniqueKey 有一种方法,但我对它们不太了解,因为我是初学者(别担心,我已经搜索过了)

到目前为止我尝试的是pop Navigator 然后再次push 同一页面......它有效......但问题是我失去了BottomNavigationBar 当我的页面退出状态时这样做...

这是我目前解决这个问题的方法


@override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.inactive ||
        state == AppLifecycleState.paused) {
      Navigator.pop(context);
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => Home()));
    }
    super.didChangeAppLifecycleState(state);
  }


BottomNavigationBar


int _selectedItem = 0;
  PageController pageController;

  void _onPageChanged(int pageIndex) {
    setState(() {
      _selectedItem = pageIndex;
    });
  }

  void _onTapped(int pageIndex) {
    setState(() {
      _selectedItem = pageIndex;
    });
    pageController.jumpToPage(pageIndex);
  }

  @override
  void initState() {
    pageController = PageController();
    super.initState();
  }

  @override
  void dispose() {
    pageController.dispose();
    super.dispose();
  }

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(
        controller: pageController,
        children: pages,
        onPageChanged: _onPageChanged,
      ),
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        items: bottomNavigationBarItems(context), // You can find this below
        currentIndex: _selectedItem,
        onTap: _onTapped,
      ),
    );
  }
}


bottomNavigationBarItems


List<BottomNavigationBarItem> bottomNavigationBarItems(BuildContext context) {
  final AppLocalization translate = AppLocalization.of(context);
  final BottomNavigationBarItem homePage = BottomNavigationBarItem(
    icon: FaIcon(FontAwesomeIcons.home),
    label: translate.translate('home'),
  );

  final BottomNavigationBarItem newsPage = BottomNavigationBarItem(
    icon: FaIcon(FontAwesomeIcons.newspaper),
    label: translate.translate('news'),
  );

final BottomNavigationBarItem programsPage = BottomNavigationBarItem(
    icon: FaIcon(FontAwesomeIcons.tv),
    label: translate.translate('programs'),
  );
 return [
    homePage,
    newsPage,
    programsPage,
  ];
}

1 个答案:

答案 0 :(得分:0)

任何小部件都给它

key: UniqueKey(),

调用 setState 时会丢失当前状态并再次重建

相关问题