之前的文章记录了Flutter开发的一小部分基础代码,今天还是要继续记录一个常用的小功能,那就是底部切换栏。做过移动开发的开发者都知道,底部切换栏是大多数应用的必备功能。话不多说,老规矩,直接按步骤上截图,上代码:

首先在我们自己的项目中的lib文件下建立几个需要切换的.dart文件,我自己是5个文件,其中4个是对应底部切换栏的4个按钮(HomePage是第一个页面、MsgPage消息页面、CartPage购物车页面、MinePage个人中心页面),还有一个就是承载着4个页面的文件MainPage,如下图:

其次,在main.dart文件中编写入口代码,如下:

import 'package:flutter/material.dart';
import 'package:flutterapp/MainPage.dart';void main() {runApp(new MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return new MaterialApp(theme: new ThemeData(primarySwatch: Colors.blue,),home: MainPage(),//启动MainPage);}
}

然后,在我们创建好的文件MainPage里面编写代码,如下:

import 'package:flutter/material.dart';
import 'package:flutterapp/CartPage.dart';
import 'package:flutterapp/HomePage.dart';
import 'package:flutterapp/MinePage.dart';
import 'package:flutterapp/MsgPage.dart';class MainPage extends StatefulWidget {@overrideState<StatefulWidget> createState() {return _IndexState();}
}class _IndexState extends State<MainPage> {final List<BottomNavigationBarItem> bottomNavItems = [BottomNavigationBarItem(backgroundColor: Colors.blue,icon: Icon(Icons.home),title: Text("首页"),),BottomNavigationBarItem(backgroundColor: Colors.green,icon: Icon(Icons.message),title: Text("消息"),),BottomNavigationBarItem(backgroundColor: Colors.amber,icon: Icon(Icons.shopping_cart),title: Text("购物车"),),BottomNavigationBarItem(backgroundColor: Colors.red,icon: Icon(Icons.person),title: Text("个人中心"),),];int currentIndex;final pages = [new HomePage(), new MsgPage(), new CartPage(), new MinePage()];@overridevoid initState() {super.initState();currentIndex = 0;}@overrideWidget build(BuildContext context) {return Scaffold(
//      appBar: AppBar(
//        title: Text("底部导航栏"),
//      ),bottomNavigationBar: BottomNavigationBar(items: bottomNavItems,currentIndex: currentIndex,type: BottomNavigationBarType.fixed,onTap: (index) {_changePage(index);},),body: pages[currentIndex],);}/*切换页面*/void _changePage(int index) {/*如果点击的导航项不是当前项  切换 */if (index != currentIndex) {setState(() {currentIndex = index;});}}
}

最后,在之前创建的4个用于切换显示的文件中,编写一个简单的代码就可以看到切换的效果了。如果你想写一些小功能放到没个页面里,也是可以的,我就在首页文件HomePage里写了显示一张图片和一个按钮,下面看代码:

import 'package:flutter/material.dart';
import 'package:flutterapp/ProductList.dart';
import 'package:fluttertoast/fluttertoast.dart';//void main() {
//  runApp(new HomePage());
//}class HomePage extends StatelessWidget {// 重写build 方法,build 方法返回值为Widget类型,返回内容为屏幕上显示内容。@overrideWidget build(BuildContext context) {// MaterialApp 控制界面风格为安卓风格// CupertinoApp 界面风格为iOS 风格// TODO: implement buildreturn MaterialApp(title: "首页",// debugShowCheckedModeBanner: false,// Scaffold:脚手架 用于展示基础框架结构,如appBar、body、bottomNavigationBarhome: Scaffold(// AppBar:相当于iOS 的导航栏appBar: AppBar(// AppBar上的显示内容// Text 用于展示文本内容,相当于iOS中的UILabeltitle: Text("首页"),),// body:AppBar及BottomNavigationBar之间展示的内容// Center 是用于把子Widget 居中的Widgetbody: Card(child: Column(children: [new FadeInImage.assetNetwork(placeholder: 'images/logo.png',image:'https://haiguo.oss-cn-beijing.aliyuncs.com/goods/360e1d0da22c2fcd9d81961d916abed4de6a4aff.jpg',fit: BoxFit.fill,),RaisedButton(child: Text('跳转', style: const TextStyle(fontSize: 16.0),),onPressed: () {print('pressIndex:页面跳转');Navigator.push(context, new MaterialPageRoute(builder: (context) => new ProductList()));Fluttertoast.showToast(msg: "跳转",gravity: ToastGravity.BOTTOM,timeInSecForIosWeb: 1,backgroundColor: Colors.black45,textColor: Colors.white,fontSize: 16.0);},padding: const EdgeInsets.only(top: 20.0),),],)),),);}
}

好了,这次的介绍就到这里了,下面放上一张运行成功的截图,每天学习一点,坚持不懈,收获就会多多,希望可以给大家有什么问题和感想,可以在评论区一起交流,如有不足,尽请指教,感谢各位!

Flutter学习之路(二)相关推荐

  1. Flutter学习笔记(二)登陆注册界面的实现

    Flutter学习笔记(二)登陆注册界面的实现 简单的登录和注册界面的布局 SharedPreferences存储数据 页面路由和参数传递的心得 这几天按照顺序先完成了登录和注册的页面,没有什么特别的 ...

  2. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  3. iOS程序猿的flutter学习之路

    日常学习Flutter开发的积累 推荐一些平时自己学习Flutter开发当中接触到的优秀文章 -------------------------基础知识 ----------------------- ...

  4. Hive学习之路(二):Hive表操作详讲

    操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...

  5. python 剑指offer 学习之路(二)

    剑指offer 学习之路 合并两个排序的链表 树的子结构 顺时针打印矩阵 包含min函数的栈 从上往下打印二叉树 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 数组中出现次数超过 ...

  6. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  7. Flutter学习之路(一)

    作为一名实际开发近10年的Android程序员,对于前端技术不断的更新,有着自己的迷茫,不过身边有人在不断学习和进步,倍感压力. 闲言少叙,开始正题,众所周知flutter是谷歌的移动UI框架,可以快 ...

  8. Flutter学习之路 AspectRatio 组件

    一.Flutter  AspectRatio组件介绍 AspectRatio 的作用是根据设置调整子元素child的宽高比,Flutter提供此组件,就免去了自定义所带来麻烦,AspectRatio适 ...

  9. Flutter学习记录(二、Flutter项目学习Widget)

    在flutter当中,所有页面元素都是一个Widget,一个文本显示是widget,一个包含文本显示的容器也是widget,下面是三个demo: 1.一个简单的显示titlebar的app impor ...

最新文章

  1. 通过apt自动生成建造者模式单线程版代码(一)
  2. 【Codeforces 922D】Robot Vacuum Cleaner
  3. Java Thread源码分析
  4. java static变量销毁_JAVA里static 变量在程序执行结束后是否被消毁
  5. promise使用promise进行封装拉起微信支付
  6. 【WebRTC专场】WebRTC的下个10年,又会有怎样的惊喜?
  7. 路由器与交换机的工作原理
  8. 看ExtJs API文档的阅读方法
  9. python基础整理——ASCII码、Unicode、utf-8、gbk
  10. bash: ./install_software: Permission denied
  11. fd抓包数据类型_fd抓包教程 FD入门简介(配置教程) fd视频教程2016
  12. linux jdk下载并安装
  13. android支持u盘格式文件,安卓系统OTG支持U盘格式
  14. windows 的快捷截图
  15. firefly-rk3288点mipi屏TV080WUM-NL0有显示无背光
  16. threeJS鼠标单击模型边缘高亮
  17. AI相关英语词汇(持续更新)
  18. 周志华机器学习(一)
  19. 最小二乘法多元函数超曲面拟合(python)
  20. 【Quip】多人协作在线编辑文档

热门文章

  1. 使用MATLAB toolbox标定摄像头的参数
  2. Markdown(5):锚链接
  3. 在photoshop下安装Imagenomic_Portraiture(磨皮插件)图解全过程
  4. (翻译)2022 年免费的 4 个最佳文本到语音在线工具
  5. 统计信号处理知识点总结_概率论与数理统计之二维离散性随机变量及其分布的知识点总结...
  6. 35岁软件测试工程师如何避免中年危机?10年测试总监的感悟总结
  7. 拆机指点杆小红点的线序及PTPM754DR引脚定义
  8. EEG电流源密度分析(CSD)-容积传导效应-脑电Laplacian滤波
  9. 数学教学通讯杂志数学教学通讯杂志社数学教学通讯编辑部2023年第5期目录
  10. JDBC实现数据库的增删改查