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

Flutter 底部导航栏切换实现

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

remedios发布于 2025/2/7更新于 2026/5/2924 浏览
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. 思考
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 相干伊辛机在医疗与医疗 AI 领域的应用前景
  • 使用 TRAE CN 与 MasterGo MCP 将设计稿转化为前端代码
  • 9 本大模型与人工智能入门经典书籍推荐
  • Java 高德地图面检索中 WGS84 坐标转换与 POI 查询实战
  • 当AI学会写“自传”:OpenClaw 的 SOUL.md 如何把配置文件变成一颗会变形的心
  • 解决 NVIDIA RTX 50 系列 (sm_120) 架构下的 PyTorch 与 Unsloth 依赖冲突
  • 开源 AI 网络爬虫 Crawl4AI:智能数据抓取实战
  • LLaMA Factory 大语言模型增量训练实战指南
  • Open Library 开源数字图书馆零代码搭建指南
  • 字节开源 DeerFlow 2.0:重构为 Super Agent 运行时基础设施
  • Python 虚拟环境迁移难题:如何让 .venv 随项目文件夹随意搬家也不坏?
  • 使用 Webhook 向飞书自定义机器人发送消息
  • Java 方法封装与递归详解
  • CTFShow Web 入门:题目 21-28 爆破解析
  • GitHub 7 大 Claude Skills 开源项目:Skill Creator、Superpowers 与 Code Review 解析
  • DeepSeek 中冷启动数据与多阶段训练的作用解析
  • Ollama 本地部署与使用指南
  • 主流 AI 编程工具对比:TRAE、Qoder、Cursor 与 Copilot 选型指南
  • WebLogic 中间件高危漏洞应急响应案例分析
  • 前端请求后端 404/405/500 状态码排查与解决指南

相关免费在线工具

  • 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