【问题标题】:Dynamic Bottom Navigation Bar from list FlutterFlutter 列表中的动态底部导航栏
【发布时间】:2021-06-17 10:08:55
【问题描述】:

如何制作底部导航栏,底部导航栏项从列表中获取数据?

来自flutter documentation的底部导航栏示例

bottomNavigationBar: BottomNavigationBar(
    items: const <BottomNavigationBarItem>[
      BottomNavigationBarItem(
        icon: Icon(Icons.home),
        label: 'Home',
      ),
      BottomNavigationBarItem(
        icon: Icon(Icons.business),
        label: 'Business',
      ),
      BottomNavigationBarItem(
        icon: Icon(Icons.school),
        label: 'School',
      ),
    ],
    currentIndex: _selectedIndex,
    selectedItemColor: Colors.amber[800],
    onTap: _onItemTapped,
  ),

【问题讨论】:

    标签: list flutter navbar bottomnavigationview flutter-bottomnavigation


    【解决方案1】:
    1. 创建自定义类
        class MyTabItem {
    
        String title;
        IconData icon;
    
        MyTabItem(this.name, this.icon);
    
        }
    
    1. 创建选项卡列表:
    List<MyTabItem> _items = [
      MyTabItem('Home', Icons.home),
      MyTabItem('Business', Icons.business),
      MyTabItem('School', Icons.school),
    ];
    
    1. 创建一个方法来遍历_items 集合并返回List&lt;BottomNavigationBarItem&gt;
    List<BottomNavigationBarItem> getBottomTabs( List<MyTabItem> tabs) {
        return tabs
            .map(
              (item) =>
              BottomNavigationBarItem(
                icon: Icon(item.icon),
                label: item.title,
              ),
        )
            .toList();
      }
    
    1. 最后调用方法:
    bottomNavigationBar: BottomNavigationBar(
              items: getBottomTabs(items),
             ),
    

    答案的灵感来自@Muldec 回复:Flutter: Show different icons based on value

    【讨论】:

      【解决方案2】:

      试试这个:

      List<String> items = ['Home', 'Business', 'School'];
      
      bottomNavigationBar: BottomNavigationBar(
          items: items.map((item) {
              Widget itemIcon = Icon(Icons.home);
      
              if(item == 'Home')
              {
                itemIcon = Icon(Icons.home),
              }else if(item == 'Business')
              {
                itemIcon = Icon(Icons.business),
              }else if(item == 'School')
              {
                itemIcon = Icon(Icons.school),
              }
      
              BottomNavigationBarItem(
                icon: itemIcon ,
                label: item,
              ),
            }).toList(),
          currentIndex: _selectedIndex,
          selectedItemColor: Colors.amber[800],
          onTap: _onItemTapped,
        ),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-07
        • 2021-11-27
        • 1970-01-01
        • 2020-07-30
        • 2021-04-18
        相关资源
        最近更新 更多