如何禁用底部导航栏在颤动中随键盘一起上升的行为

Aze*_*mil 9 dart flutter flutter-bottomnavigation

在我的应用程序中,我有一个搜索页面,当我单击搜索文本字段时,底部导航栏也会随键盘一起向上移动,它应该隐藏在键盘下方。因为当键盘显示时我可以导航到其他页面,这是不良行为。

代码:

class _AppHomeViewState extends State<AppHomeView>
    with TickerProviderStateMixin {

  TabController tabController;

  @override
  void initState() {
    super.initState();
    tabController = TabController(length: 4, vsync: this, initialIndex: 0);
    tabController.addListener(handleTabSelection);
  }

  @override
  Widget build(BuildContext context) {
    final scaffold = Scaffold(
      body: SafeArea(child: _buildBody(context)),
      bottomNavigationBar: Container(
        height: 48,
        decoration: BoxDecoration(
          color: StyledColors.BACKGROUND_COLOR,
          boxShadow: [
            BoxShadow(
              color: StyledColors.FORGROUND_COLOR.withOpacity(0.16),
              blurRadius: 12,
              offset: Offset(0, 0),
            ),
          ],
        ),
        child: SafeArea(
          child: _buildTabBar(context),
        ),
      ),
    );
  }

  Widget _buildBody(BuildContext context) {
    return TabBarView(
      physics: NeverScrollableScrollPhysics(),
      controller: tabController,
      children: <Widget>[
        HomeView(),
        SearchView(),
        OrdersView(),
        ProfileView(),
      ],
    );
  }

  Widget _buildTabBar(BuildContext context) {
    return TabBar(
      controller: tabController,
      tabs: <Widget>[
        Tab(
          icon: Icon(
            Icons.store,
            size: 28,
          ),
        ),
        Tab(
          icon: Icon(
            Icons.search,
            size: 28,
          ),
        ),
        Tab(
          icon: Icon(
            Icons.receipt,
            size: 28,
          ),
        ),
        Tab(
          icon: Icon(
            Icons.person,
            size: 28,
          ),
        )
      ],
      indicatorColor: Colors.transparent,
      unselectedLabelColor: StyledColors.MEDIUM_GREY,
      labelColor: StyledColors.PRIMARY_COLOR,
    );
  }

  void handleTabSelection() {
    setState(() {});
  }
}
Run Code Online (Sandbox Code Playgroud)

不良行为

应该的行为是,当我单击搜索时,底部导航栏应该留在键盘后面而不是出现键盘?

Nit*_*esh 10

resizeToAvoidBottomInset: false,在 Scaffold 小部件中设置

  • 无法使用最新版本的 flutter =&gt; 2.5.0 (11认同)
  • 我也是。升级 flutter 2.5.1 后不起作用 (2认同)
  • 这不起作用 (2认同)

joh*_*ohn 7

如果您有嵌套Scaffold,请检查您的根 Scaffold是否也已resizeToAvoidBottomInset: false设置。


小智 5

我刚刚遇到了同样的问题,当启用键盘时,我的底部导航栏随键盘一起向上移动。我通过检查键盘是否打开来解决这个问题。如果它是打开的,只需隐藏禁用底部导航栏,当它关闭时,就可以启用导航栏了.. 这是它的样子.. 首先创建一个布尔变量来检查键盘是否打开..

bool isKeyboardOpen = MediaQuery.of(context).viewInsets.bottom != 0.0;
Run Code Online (Sandbox Code Playgroud)

现在做这样的事情来切换你的底部导航栏

  bottomNavigationBar: isKeyboardOpen
      ? null
      : BottomAppBar();
Run Code Online (Sandbox Code Playgroud)

该技术也适用于浮动动作底部问题。