尽管设置了“currentIndex”,Flutter BottomNavigationBar 永远不会更改突出显示的选项

问题描述 投票:0回答:1

我一定在这里度过了一段金发碧眼的时刻;我想做的事情很简单,但我无法弄清楚。

我有一个

BottomNavigationBar
,它可以很好地导航到不同的页面,但底部栏始终将第一个项目显示为当前项目,它始终是突出显示的项目。

我正在使用

setState
来更改
currentIndex
,我可以看到正在发生这种情况,但底部栏永远不会改变。

这是代码:

import 'package:flutter/material.dart';
import 'package:myfestival/models/app_config_model.dart';
import 'package:myfestival/pages/user_mode/menus/user_app_named_routes.dart';

class BottomMenu extends StatefulWidget {
  const BottomMenu({super.key, required this.menus});

  final List<AppMenu> menus;

  @override
  State<BottomMenu> createState() => _BottomMenuState();
}

class _BottomMenuState extends State<BottomMenu> {

  int? currentIndex;

  @override
  Widget build(BuildContext context) {


    print('current index is $currentIndex');

    return BottomNavigationBar(
      type: BottomNavigationBarType.fixed,
      currentIndex: currentIndex??0,
      items: [
        for (final menu in widget.menus.take(5))
          BottomNavigationBarItem(
            icon: menu.smallIcon,
            label: menu.title,
          ),
      ],
      onTap: (value) {
        setState(() {currentIndex = value;});
        UserAppRouter.navigateToMenu(context, widget.menus[value]);
      },
    );
  }
}

这是单击不同底部按钮的输出(我有 3 个):

current index is null
current index is 2
current index is null
current index is 1
current index is null
current index is 2
current index is null
current index is 0
current index is null
current index is 1
current index is null
current index is 2

但底部栏看起来与此没有什么不同:

(即第一项始终是选定的)

我错过了什么?

为什么突出显示的底部栏选项不会改变?

flutter menu bottomnavigationview
1个回答
0
投票

null
打印是一个赠品,可能每次调用导航时,您都没有传递所选当前索引的参数,因此,绘制小部件时它始终是未定义的。

一种解决方案可能是在每次调用小部件时强制使用 currentIndex 并将其用作参数。

另一种方法是创建一个全局变量来存储

currentIndex
并确保小部件在构建调用时读取。

© www.soinside.com 2019 - 2024. All rights reserved.