You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter页面切换报错:'0 <= currentIndex && currentIndex < items.length'不成立

问题解决:BottomNavigationBar currentIndex越界错误

错误原因

这个断言失败的核心问题是:BottomNavigationBar的currentIndex必须是其items数组的有效索引(范围0到items.length-1)。你的底部导航栏只有2个item(对应索引0、1),但点击Drawer的设置/帮助选项后,_currentIndex被设为2或3,超出了底部导航栏item的索引范围,直接触发了断言检查失败。

解决方案:拆分状态变量

用两个独立变量分别控制当前显示的页面和底部导航栏的选中状态,避免索引冲突:

  1. 替换原有索引变量:
// 原变量:int _currentIndex = 0;
int _currentPageIndex = 0; // 控制当前显示的页面
int _selectedBottomNavIndex = 0; // 控制底部导航栏的选中项
  1. 修改底部导航栏配置:
bottomNavigationBar: BottomNavigationBar(
  onTap: (index) {
    setState(() {
      _selectedBottomNavIndex = index;
      _currentPageIndex = index; // 点击底部导航时同步页面
    });
  },
  items: const [
    BottomNavigationBarItem(
      icon: Icon(Icons.home),
      label: 'Home',
    ),
    BottomNavigationBarItem(
      icon: Icon(Icons.ad_units),
      label: 'Free Coin',
    ),
  ],
  currentIndex: _selectedBottomNavIndex, // 改用底部导航专属变量
  selectedItemColor: Colors.amber[800],
),
  1. 更新Drawer的点击逻辑:
// 首页选项:同步底部导航选中状态
ListTile(
  leading: const Icon(Icons.home),
  title: const Text('Home'),
  onTap: () {
    setState(() {
      _currentPageIndex = 0;
      _selectedBottomNavIndex = 0;
      Navigator.of(context).pop();
    });
  },
),
// 设置选项:仅切换页面,不修改底部导航选中状态
ListTile(
  leading: const Icon(Icons.settings),
  title: const Text('Settings'),
  onTap: () {
    setState(() {
      _currentPageIndex = 2;
      Navigator.of(context).pop();
    });
  },
),
// 帮助选项:仅切换页面,不修改底部导航选中状态
ListTile(
  leading: const Icon(Icons.help),
  title: const Text('Help'),
  onTap: () {
    setState(() {
      _currentPageIndex = 3;
      Navigator.of(context).pop();
    });
  },
),
  1. 修改body的页面索引:
body: SafeArea(
  child: pages[_currentPageIndex],
),

补充说明

BottomNavigationBar要求currentIndex必须是有效索引,无法设置为无效值来取消高亮。保持原有选中状态是更合理的做法,用户返回底部导航页面时能看到之前的选中位置。

内容的提问来源于stack exchange,提问作者RmTomal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:30:24