当前位置: 首页 > article >正文

Flutter组件————BottomNavigationBar

BottomNavigationBar 是Flutter中用于在屏幕底部显示导航栏的组件,它允许用户在几个主要视图之间进行切换。

参数

参数名类型描述
itemsList定义导航栏中的每个项目,通常包含图标和标签。
onTapValueChanged当用户点击导航栏中的项目时触发的回调函数,接收一个整数参数,表示被点击项目的索引。
currentIndexint指定当前选中的项目索引,默认值为0。
typeBottomNavigationBarType指定导航栏的类型,有 BottomNavigationBarType.fixedBottomNavigationBarType.shifting 两种。
iconSizedouble设置图标大小,默认值为24.0。
elevationdouble设置阴影的大小,默认值根据Material Design规范设置。
selectedFontSizedouble设置选中状态下标签文本的字体大小,默认值为14.0。
unselectedFontSizedouble设置未选中状态下标签文本的字体大小,默认值为12.0。
selectedIconThemeIconThemeData设置选中状态下的图标主题,如颜色、大小等。
unselectedIconThemeIconThemeData设置未选中状态下的图标主题,如颜色、大小等。
selectedLabelStyleTextStyle设置选中状态下的标签样式,如字体大小、颜色等。
unselectedLabelStyleTextStyle设置未选中状态下的标签样式,如字体大小、颜色等。
backgroundColorColor设置导航栏的背景颜色。
showSelectedLabelsbool控制是否显示选中状态下的标签文本,默认是显示的。
showUnselectedLabelsbool控制是否显示未选中状态下的标签文本,默认是显示的。
mouseCursorMouseCursor定义鼠标悬停在导航栏项目上时的光标样式,默认是系统默认光标。
landscapeLayoutBottomNavigationBarLandscapeLayout在横屏模式下定义底部导航栏的布局方式,默认值为 BottomNavigationBarLandscapeLayout.spread

示例代码

class _MyHomePageState extends State<MyHomePage> {
  int pageIndex = 0;
  //所有右侧行为按钮
  List<Widget> actionList = const [
    Icon(Icons.social_distance),
    SizedBox(
      width: 30,
    ),
    Icon(Icons.cyclone),
    SizedBox(
      width: 30,
    ),
    Icon(Icons.manage_accounts),
    SizedBox(
      width: 40,
    )
  ];
  List<Widget> pageList = const [
    Text("首页"),
    Text("新增"),
    Text("用户"),
  ];

  void floatBtnFunc() {
    debugPrint("点击了悬浮按钮");
    HapticFeedback.vibrate();
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        //省略样式代码
      ), //顶部栏
      body: Center(
        child: ListView(
          padding: const EdgeInsets.only(top: 15),
          children: [
            Row(
              children: [pageList[pageIndex]],
            )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: floatBtnFunc, //点击事件
        tooltip: "悬浮按钮", //长按提示信息
        backgroundColor: Colors.blue, //背景颜色
        foregroundColor: Colors.white, // 内部组件颜色
        elevation: 10, //阴影
        shape: ShapeBorder.lerp(
            const CircleBorder(), const CircleBorder(), 0.5), //按钮形状
        mini: false, //是否小尺寸
        hoverColor: Colors.green, //悬浮颜色
        splashColor: Colors.yellow, //点击颜色
        focusColor: Colors.red, //获取焦点颜色
        autofocus: true, //是否自动获取焦点

        clipBehavior: Clip.hardEdge, //裁剪方式
        child: const Icon(Icons.info), // //按钮内部组件
      ), //浮动按钮
      floatingActionButtonLocation:
          FloatingActionButtonLocation.centerDocked, //浮动按钮位置
      bottomNavigationBar: BottomNavigationBar(
        items: const <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(Icons.home), //图标
            label: "首页",  //标签
            tooltip: "首页",  //长按提示信息
            backgroundColor: Colors.blueAccent,  //背景颜色
            activeIcon: Icon(Icons.home_filled),  //选中图标
          ),
          BottomNavigationBarItem(icon: Icon(Icons.add), label: "新增"),
          BottomNavigationBarItem(icon: Icon(Icons.verified_user), label: "用户"),
        ], //底部导航栏
        currentIndex: pageIndex, //当前页面索引
        onTap: (index) {
          setState(() {
            pageIndex = index;
          });
        }, //点击事件
        type: BottomNavigationBarType.fixed, //导航栏的类型
        iconSize: 25,  //图标大小
        elevation: 20, //阴影
        selectedFontSize: 12, //选中字体大小
        unselectedFontSize: 12, //未选中字体大小
        selectedItemColor: Colors.blue, //选中颜色
        unselectedItemColor: Colors.black, //未选中颜色
        showUnselectedLabels: true, //是否显示未选中的标签
        selectedLabelStyle: const TextStyle(color: Colors.blue), //选中文本样式
        unselectedLabelStyle: const TextStyle(color: Colors.black), //未选中文本样式
        backgroundColor: const Color.fromARGB(255, 99, 255, 247),
        showSelectedLabels: true, //分别控制是否显示选中和未选中的标签文本,默认都是显示的
      ),
    );
  }
}

效果

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/445034.html

相关文章:

  • 【进程篇】操作系统
  • WatchAlert - 开源多数据源告警引擎
  • 运维日记
  • [创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论
  • 远程连接:构建智能家居舒适生活
  • 记录一下自己对网络安全法的笔记
  • vue2 - Day03 - (生命周期、组件、组件通信)
  • scala图书馆系统
  • ChatGPT生成接口测试用例(二)
  • mybatisPlus使用步骤详解
  • 安卓环境配置及打开新项目教程,2024年12月20日最新版
  • uniapp Native.js 调用安卓arr原生service
  • 《军工记忆》第二季播出,科技创新铸国之重器
  • mybatis逆向工程插件MyBatisX使用介绍
  • 裸金属服务器和传统服务器的区别
  • XLSTM+informer时间序列预测模型
  • 深入理解 Linux wc 命令
  • 【开源免费】基于Vue和SpringBoot的在线宠物用品交易网站(附论文)
  • WebGL入门到进阶教程 - 系统学习Web3D技术
  • 依托 SSM 与 Vue 的电脑测评系统:展现电脑真实实力
  • Unity Shader学习日记 part 2 线性代数--矩阵
  • 搭建 Elasticsearch 集群:完整教程
  • 分布式链路追踪简介-01-dapper 论文思想介绍
  • linux部分rpm包总结描述
  • libilibi项目总结(17)Elasticsearch 的使用
  • 搭建私有链