0

我有一个BottomNavigationBar,特别是BubbleBottomBar。我已经嵌套MaterialApp了 s 来给Navigator内部的小部件一个新的。但是,当我切换选项卡时,底部导航栏中的每个小部件都会重新构建。这对我不利,因为我想让小部件保持相同状态。我将如何实现这一目标?

4

2 回答 2

1

我认为您可以通过使用CupertinoTabScaffold&&轻松解决该问题CuppertinoTabBarCupertinoTabView它具有该功能。

如果需要,请阅读更多信息:Cupertino Widgets

官方示例:Cupertino Navigation&TabBar

这是我的代码,它按照您希望的方式工作。(更改选项卡时不重建)您可以将其转换为您的代码:

import 'package:flutter/cupertino.dart';

CupertinoTabScaffold(
          tabBar: CupertinoTabBar(items: [
            BottomNavigationBarItem(
                icon: Icon(Icons.explore), title: Text('Explore')),
            BottomNavigationBarItem(
                icon: Icon(Icons.card_travel), title: Text('Adventure')),
            BottomNavigationBarItem(
                icon: Icon(Icons.search), title: Text('Search')),
            BottomNavigationBarItem(
                icon: Icon(Icons.collections_bookmark),
                title: Text('Bookmarks')),
            BottomNavigationBarItem(
                icon: Icon(Icons.person), title: Text('Profile')),
          ]),
          tabBuilder: (context, index) {
            return CupertinoTabView(
              builder: (context) {
                switch (index) {
                  case 0:
                    return ExplorePage();
                    break;
                  case 1:
                    return AdventurePage();
                    break;
                  case 2:
                    return SearchTourPage();
                    break;
                  case 3:
                    return Text('Bookmark Page');
                    break;
                  case 4:
                    return ProfilePage();
                    break;
                  default:
                    return SearchTourPage();
                }
              },
            );
          })
于 2019-03-07T04:48:32.790 回答
1

您可以使用AutomaticKeepAliveClientMixin强制您的底栏内容不被处理。但是要使这件事起作用,您可能必须将您的BottomNavigationBar内部包装为Stateful Widget.

我认为这个问题可能有您正在寻找的详细答案。

例子:

class CustomBottomBar extends StatefulWidget {
  @override
  _CustomBottomBarState createState() => _CustomBottomBarState();
}

class _CustomBottomBarState extends State<CustomBottomBar> with AutomaticKeepAliveClientMixin {
  @override
  Widget build(BuildContext context) {
    return BubbleBottomBar(
      /*Your bottom bar code goes here*/
    );
  }

  // Setting it true will force the bottom bar to never be disposed. This could be dangerous.
  @override
  bool get wantKeepAlive => true;
}
于 2019-03-07T05:43:27.757 回答