效果图

main.dart

  1. import 'package:flutter/material.dart';
  2. import 'pages/index_page.dart';
  3. void main() => runApp(MyApp());
  4. class MyApp extends StatelessWidget {
  5. @override
  6. Widget build(BuildContext context) {
  7. return MaterialApp(
  8. title: '百姓生活+',
  9. home: IndexPage(),
  10. theme: ThemeData.light(),
  11. );
  12. }
  13. }

indexPage.dart

  1. import 'package:flutter/material.dart';
  2. import 'home_page.dart';
  3. import 'category_page.dart';
  4. import 'cart_page.dart';
  5. import 'person_page.dart';
  6. class IndexPage extends StatefulWidget {
  7. @override
  8. _IndexPageState createState() => _IndexPageState();
  9. }
  10. class _IndexPageState extends State<IndexPage> {
  11. final List<BottomNavigationBarItem> bottomTabs = [
  12. BottomNavigationBarItem(
  13. icon: Icon(Icons.home),
  14. title: Text('首页')
  15. ),
  16. BottomNavigationBarItem(
  17. icon: Icon(Icons.category),
  18. title: Text('分类')
  19. ),
  20. BottomNavigationBarItem(
  21. icon: Icon(Icons.shopping_cart),
  22. title: Text('购物车')
  23. ),
  24. BottomNavigationBarItem(
  25. icon: Icon(Icons.person),
  26. title: Text('我的')
  27. )
  28. ];
  29. final List tabBodies = [
  30. HomePage(),
  31. CategoryPage(),
  32. CartPage(),
  33. PersonPage()
  34. ];
  35. int currentIndex = 0;
  36. var currentPage;
  37. void initState(){
  38. currentPage = tabBodies[currentIndex];
  39. super.initState();
  40. }
  41. @override
  42. Widget build(BuildContext context) {
  43. return Scaffold(
  44. body: currentPage,
  45. bottomNavigationBar: BottomNavigationBar(
  46. type: BottomNavigationBarType.fixed,
  47. currentIndex: currentIndex,
  48. items: bottomTabs,
  49. onTap: (index){
  50. setState(() {
  51. currentIndex = index;
  52. currentPage = tabBodies[index];
  53. });
  54. },
  55. )
  56. );
  57. }
  58. }

home_page.dart


  1. import 'package:flutter/material.dart';
  2. class HomePage extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Scaffold(
  6. appBar: AppBar(title: Text('HomePage')),
  7. );
  8. }
  9. }

category_page.dart


  1. import 'package:flutter/material.dart';
  2. class CategoryPage extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Scaffold(
  6. appBar: AppBar(title: Text('CategoryPage')),
  7. );
  8. }
  9. }

cart_page.dart


  1. import 'package:flutter/material.dart';
  2. class CartPage extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Scaffold(
  6. appBar: AppBar(title: Text('CartPage')),
  7. );
  8. }
  9. }

person_page.dart


  1. import 'package:flutter/material.dart';
  2. class PersonPage extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Scaffold(
  6. appBar: AppBar(title: Text('PersonPage')),
  7. );
  8. }
  9. }

flutter tabbar创建与显示的更多相关文章

  1. MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)

    属性页对话框包括向导对话框和一般属性页对话框两类,上一节讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.将上 ...

  2. MFC编程入门之十二(对话框:非模态对话框的创建及显示)

    上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 非模态对话框显示后,程序其他窗口仍然能正常运行,可以响应用户输入,还可以相互切换.上一讲中创建的Tip模态对话框 ...

  3. 创建、显示和删除保存的用户名和密码(cmdkey)

    创建,显示和删除保存的用户名和密码: cmdkey.exe /add:targetname /user:username /pass:password

  4. VS2010/MFC对话框:向导对话框的创建及显示

    向导对话框的创建及显示 本节将为大家演示如何创建向导对话框. 仍然以前面的“加法计算器”的例子为基础,在其中加入向导对话框,我们可以用它来说明加法计算器的使用方法,一步一步引导用户操作,这也是比较常见 ...

  5. VS2010/MFC对话框:一般属性页对话框的创建及显示

    一般属性页对话框的创建及显示 本节将介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.鸡啄米将上一节中的向导对话框进行少量修改,使其成为一般属性页对话 ...

  6. VS2010/MFC对话框:非模态对话框的创建及显示

    非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切 ...

  7. 科学计算三维可视化---TVTK入门(创建和显示三维对象)

    一:创建一个基本的三维对象 (一)长方体操作 traits:就是TVTK对象的属性 (1)对象属性操作 >>> from tvtk.api import tvtk >>& ...

  8. VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)

    属性页对话框包括向导对话框和一般属性页对话框两类,上一节鸡啄米讲了如何创建并显示向导对话框,本节将继续介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的 ...

  9. VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)

    上一节鸡啄米讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 鸡啄米已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将 ...

随机推荐

  1. 25、Nginx常见典型故障

    1.为什么nginx里面有的是浏览器渲染出的页面,有的时候就变成下载文件? 这个一个取决于服务端nginx,一个取决于你浏览器.在Nginx服务端的配置文件目录下,有一个mime.types 文件,内 ...

  2. 小程序UI设计(1)-布局

    工欲善其事必先利其器.下面为大家介绍一款工具软件,如何做到轻松布局. 工具简介:小程序layout设计工具,可视化方式进行小程序UI设计.通过鼠标拖拽组件方式进行UI布局.工具提供符合微信视觉统一的模 ...

  3. Efficient Estimation of Word Representations in Vector Space (2013)论文要点

    论文链接:https://arxiv.org/pdf/1301.3781.pdf 参考: A Neural Probabilistic Language Model (2003)论文要点  https ...

  4. mysql安装及加固

    mysql安装 查看是否安装mysql 我们先看一下有没有安装mysql yum list installed mysql | grep mysql 本地只安装了php链接mysql的库,没有安装my ...

  5. adb简介

    Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令 ...

  6. 更换Red Hat Enterprise Linux 7 64位的yum为centos的版本

    查看redhat原有的yum包有哪些: [root@localhost ~]# rpm -qa|grep yum yum-utils-1.1.31-24.el7.noarch yum-langpack ...

  7. BZOJ1306 [CQOI2009]match循环赛/BZOJ3139 [Hnoi2013]比赛[dfs剪枝+细节题]

    地址 看数据范围很明显的搜索题,暴力dfs是枚举按顺序每一场比赛的胜败情况到底,合法就累计.$O(3^{n*(n-1)/2})$.n到10的时候比较大,考虑剪枝. 本人比较菜所以关键性的剪枝没想出来, ...

  8. nginx第一天

    nginx 介绍 常见的webserver(排行https://news.netcraft.com/archives/2018/) 老牌:httpd(早期叫Apache),开源,市场份额最高 微软:i ...

  9. 把自己的web项目发布到网页上

    一.首先,登录自己的bce百度云,bce.baidu.com,建立一个自己的网站 点击左边的应用引擎BAE 点击BAE基础版的部署列表,刚开始是没有的,要添加部署 其中的选项只需要写域名(应用名称会和 ...

  10. 使用sql做迁移矩阵

    在数据分析数据差异的时候 经常用到一个图叫做迁移矩阵. 其中里面的值可以是数量也可以是百分比,我们可以从一个时间点明确的看到在另一个时间点或者另一个时间点 子类之间数量迁移. 比如这次我在公司与业务核 ...