跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Dart大前端

Flutter 底部导航栏切换实现

Flutter 底部导航栏切换实现。通过 BottomNavigationBar 组件配合 StatefulWidget 状态管理实现页面切换。定义三个子页面(首页、分类、我的),在 Tabs 组件中维护当前索引,点击事件触发 setState 更新 body 内容。相比原生 Android Fragment 切换,Flutter 实现更简洁。

remedios发布于 2025/2/7更新于 2026/7/1941 浏览
Flutter 底部导航栏切换实现

Flutter 底部导航栏切换实现

在 Android 原生开发中,底部导航栏通常涉及自定义布局和 Fragment 切换。在 Flutter 中,可以通过 BottomNavigationBar 组件更便捷地实现。

效果

效果

解析

除了主界面以外,必然需要这三个界面,界面布局如下

界面布局

然后还需要一个 bottom.dart 表示主界面,tabs.dart 表示底部栏以及调用上面三个界面,所以总共五个 dart 文件,不需要资源文件

单独界面 Category.dart

每一个界面很简单,只需要显示有色方块即可,用同一个模板,如 分类界面,显示绿色的框

import 'package:flutter/material.dart';

class CategoryPage extends StatefulWidget {
  CategoryPage({Key key}) : super(key: key);
  _CategoryPageState createState() => _CategoryPageState();
}

class _CategoryPageState extends State<CategoryPage> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 300,
      height: 300,
      color: Colors.green,
    );
  }
}

另外两个类似

底部导航栏 tabs.dart

bottomNavigationBar 组件,可以直接显示底部按钮,onTap 方法进行交互,setState 方法可以实时渲染修改界面,currentIndex 表示当前按下的位置

import 'package:flutter/material.dart';
import 'pages/Category.dart';
import 'pages/Home.dart';
import 'pages/Setting.dart';

class Tabs extends StatefulWidget {
  Tabs({Key key}) : super(key: key);
  _TabsState createState() => _TabsState();
}

class _TabsState extends State<Tabs> {
  int _currentIndex = 0;
  //下面的三个方法都是三个界面的方法
  List _pageList = [
    HomePage(),
    CategoryPage(),
    SettingPage()
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('底部导航栏切换'),
      ),
      /** * 切换底部导航栏的时候动态修改 body 内容 */
      body: _pageList[_currentIndex],
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: _currentIndex,
        //实现底部导航栏点击选***能
        onTap: (int index) {
          setState(() {
            _currentIndex = index;
          });
        },
        items: [
          BottomNavigationBarItem(
              icon: Icon(Icons.home),
              title: Text("首页")
          ),
          BottomNavigationBarItem(
              icon: Icon(Icons.category),
              title: Text("分类")
          ),
          BottomNavigationBarItem(
              icon: Icon(Icons.settings),
              title: Text("我的")
          )
        ],
      ),
    );
  }
}
主界面 bottom.dart

其实很简单,只需要调用 Tabs() 即可,具体只是想分离代码模块

import 'package:flutter/material.dart';
import 'tabs.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Tabs()
    );
  }
}

所有代码都在,直接运行即可

思考

本质上,这个切换是用列表排好的,但是最好应该使用键值对的形式,可能 Flutter 有类似的方法我还没学到吧,不过,以上从理解的简单程度和实现的简单程度都是碾压原生开发的!

目录

  1. Flutter 底部导航栏切换实现
  2. 效果
  3. 解析
  4. 单独界面 Category.dart
  5. 底部导航栏 tabs.dart
  6. 主界面 bottom.dart
  7. 思考
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于 Web Unlocker 与 n8n 的自动化资讯采集与推送实践
  • 原生 JavaScript 跨浏览器事件处理兼容方案
  • Stable Diffusion 与 ComfyUI 整合包安装及使用指南 v4.10
  • 医疗 AI 可信革命全栈实现:向量索引与贝叶斯网络(下)
  • LLM Agent 规划工作流深度解析与实现
  • 前端安全核心实践:XSS、CSRF 与依赖管理
  • 链表经典 OJ 题目详解
  • Ollama 本地 CPU 部署开源大模型教程
  • 从 Python 到 OpenClaw:本地 AI 助理构建路径
  • 基于FPGA的时间数字转换器(TDC)抖动测试系统
  • Spring Boot 消息队列与异步通信实战
  • IntelliJ IDEA 配置 Google Java Format 插件指南
  • SpringBoot3 开发实战:核心功能与高级特性
  • 老旧笔记本部署飞牛 NAS 及常见问题解决方案
  • JavaScript Promise 对象核心原理与用法
  • Unix AI 发布第三代 Panther 机器人,聚焦真实场景交付能力
  • jQuery WebUI Popover 插件快速入门与实战
  • CANN 技术栈解析:Python、C++ 及算子开发选型指南
  • AI 无人机智慧巡检平台架构与功能解析
  • 手机浏览器 Console 日志同步至电脑调试指南

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online