flutter 如何防止在Index Stack中不重建UI

bf1o4zei  于 11个月前  发布在  Flutter
关注(0)|答案(1)|浏览(138)

我在主屏幕上使用索引堆栈显示不同的屏幕在同一时间。
我的问题是,子部件再次重建,使API调用时,我重新进入任何屏幕。
主屏幕代码:

final _currentPage =
        context.select<MenuProvider, int>((provider) => provider.currentPage);

    void _onItemTapped(int index) {
      Provider.of<MenuProvider>(context, listen: false)
          .updateCurrentPage(index);
    }

    List<MenuItem> mainMenu = [
      MenuItem(
        AppLocalizations.of(context)!.sd_title,
        'Home',
        Icons.home,
        0,
      ),
      MenuItem(
        AppLocalizations.of(context)!.profile_title,
        'Profile',
        Icons.person,
        1,
      ),
      MenuItem(
        AppLocalizations.of(context)!.sd_calculator,
        'Calculator',
        Icons.calculate_rounded,
        2,
      ),
    ];

    var screens = [
      mainMenu[_currentPage].index == 0 ? const HomeFragment() : Container(),
      mainMenu[_currentPage].index == 1 ? const Profile() : Container(),
      mainMenu[_currentPage].index == 2
          ? LoanCalculatorScreen(isHome: true)
          : Container(),
    ];

    var container = Container(
      alignment: Alignment.center,
      color: Colors.white,
      child: FadeIndexedStack(
        index: mainMenu[_currentPage].index,
        children: screens,
      ),
    );

字符串
脚手架主体采用集装箱。
底部导航:

bottomNavigationBar: BottomNavigationBar(
        items: mainMenu
            .map(
              (item) => BottomNavigationBarItem(
                label: item.bottomTitle,
                icon: Icon(
                  item.icon,
                ),
              ),
            )
            .toList(),
        currentIndex: _currentPage,
        selectedItemColor: Colors.amber[800],
        onTap: _onItemTapped,
      )


主屏幕:在初始化状态下进行呼叫;

@override
  void initState() {
    var homeData = Provider.of<HomeProvider>(context, listen: false);
    homeData.getOffersAndPartnersSlider();

    super.initState();
  }


我使用Provider进行状态管理和API调用。
任何建议都将帮助我编写更好的代码,并取得良好的性能。
我已经尝试过页面视图也发生同样的事情里面的孩子被重建。
我只想调用一次API。

vsdwdz23

vsdwdz231#

为了解决这个问题,我对Pages进行了更改。
Decrement的网页列表上面建立的方法与PageRightKey。

final List<Widget> pages = [
        const HomeFragment(
          key: PageStorageKey('Page1'),
        ),
        const Profile(
          key: PageStorageKey('Page2'),
        ),
        Lo

LoanCalculatorScreen(key: const PageStorageKey('Page'), isHome: true),
  ];

字符串
和调用索引堆栈小部件子级中的页面

Container(
        alignment: Alignment.center,
        color: Colors.white,
        child: FadeIndexedStack(
          index: mainMenu[_currentPage].index,
          children: pages,
        ),
      )

相关问题