04-Flutter移动电商实战-打通底部导航栏

关于界面切换以及底栏的实现可参考之前写的一篇文章:
Flutter实 ViewPager、bottomNavigationBar界面切换

1、新建4个基本dart文件

在pages目录下,我们新建下面四个dart文件。

  • home_page.dart :商城首页UI页面,首页相关的UI我们都会放到这个文件里。
  • category_page.dart: 商城分类UI页面,这个页面会有复杂的动态组件切换。
  • cart_page.dart:商城购物车UI页面,这个页面会包括购物车的全套功能。
  • member_page.dart:商城会员中心页面,这个页面我们会制作会员中心的全部UI效果。

其实这一部就是建立了底部导航栏需要的四个基本页面,有了这四个基本页面就可以制作底部tab的切换功能了。

这里我只给一个页面(home_page.dart)的基础代码(后期这些代码都要更换,这里只是为了看到效果使用),然后你可以暗装一个的代码,复制到其它页面,进行修改。

import 'package:flutter/material.dart';class HomePage extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(body:Center(child: Text('商城首页'),));}
}

记得其他三个页面都进行复制,并修改类名和Text文本属性。

2、引入页面并建立List

页面创建好以后,要使用import引入到index_page.dart中,引入后才可以使用,如果不引入,VScode会很智能的报错。代码如下。

import 'home_page.dart';
import 'category_page.dart';
import 'cart_page.dart';
import 'member_page.dart';

引入后声明一个List型变量,这个变量主要用于切换的,我们把页面里的类,放到了这个List中。

 List tabBarList = [HomePage(),CategoryPage(),CartPage(),MemberPage()];

声明两个变量,并进行initState初始化:

  • currentIndex:int类型,负责tabBodies的List索引,改变索引就相当于改变了页面。
  • currentPage:利用currentIndex得到当前选择的页面,并进行呈现出来。
    代码如下:
  int currentIndex = 0;var currentPage;@overridevoid initState() {currentPage = tabBarList[currentIndex];super.initState();}

3、build方法的编写

build方法我们会返回一个Scaffold部件,在部件里我们会添加底部导航栏,并利用onTap事件(单击事件),来改变导航栏的状态和切换页面。因为有界面变化,所以这也是要使用动态组件的原因。

  @overrideWidget build(BuildContext context) {return Scaffold(backgroundColor: Color.fromRGBO(244, 245, 245, 1.0),bottomNavigationBar: BottomNavigationBar(type:BottomNavigationBarType.fixed,currentIndex: currentIndex,items:bottomTabs,onTap: (index){setState(() {currentIndex = index;currentPage = tabBodies[currentIndex]; });},),body:currentPage);}

这里有句代码type:BottomNavigationBarType.fixed,这个是设置底部tab的样式,它有两种样式fixed和shifting,只有超过3个才会有区别,国人的习惯一般是使用fixed的。感兴趣的小伙伴可以自行折腾shifting模式。

这时候就可以启动虚拟机,进行预览了。为了更好的让小伙伴们学习,在这里给出index_page.dart文件的源码。

index_page.dart文件:

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'home_page.dart';
import 'category_page.dart';
import 'cart_page.dart';
import 'member_page.dart';class IndexPage extends StatefulWidget {@override_IndexPageState createState() => _IndexPageState();
}class _IndexPageState extends State<IndexPage> {// tab分组List tabBarList = [HomePage(),CategoryPage(),CartPage(),MemberPage()];final List<BottomNavigationBarItem> bottomTabs = [BottomNavigationBarItem(icon:Icon(CupertinoIcons.home),title:Text('首页')),BottomNavigationBarItem(icon:Icon(CupertinoIcons.search),title:Text('分类')),BottomNavigationBarItem(icon:Icon(CupertinoIcons.shopping_cart),title:Text('购物车')),BottomNavigationBarItem(icon:Icon(CupertinoIcons.profile_circled),title:Text('会员中心')),];int currentIndex = 0;var currentPage;@overridevoid initState() {currentPage = tabBarList[currentIndex];super.initState();}@overrideWidget build(BuildContext context) {return Scaffold(backgroundColor: Color.fromRGBO(244, 245, 245, 1.0),bottomNavigationBar: BottomNavigationBar(type:BottomNavigationBarType.fixed,currentIndex: currentIndex,items:bottomTabs,onTap: (index){setState(() {currentIndex = index;currentPage = tabBarList[currentIndex];});},),body:currentPage);}
}

效果图:

4、总结

通过这节课的学习,应该掌握如下知识点:

  • 页面切换的技巧和变量如何定义。
  • BottomNavigationBar部件的使用,最终作成底部切换效果。

posted @ 2019-06-14 20:45 niceyoo 阅读(...) 评论(...) 编辑 收藏

04-Flutter移动电商实战-打通底部导航栏相关推荐

  1. Python Web前端实战案例——电商网站商品菜单导航栏

    jQuery是一个快速.小巧.轻量级的.写的少.做的多.功能丰富的 JavaScript 库,是目前最流行的 JS 框架.利用它可以帮我们快速实现一些炫酷的效果. 目录 1 原理先知 2 思路概要 3 ...

  2. android底部导航栏中间凸起,Flutter学习笔记--仿闲鱼底部导航栏带有中间凸起图标...

    仿闲鱼底部导航栏带有中间凸起图标 刚接触Flutter,需要实现一个类似闲鱼APP的底部导航栏的实现 要实现的效果如图: 好的,下面开始上代码了: 一. 在main.dart文件中,定义APP的入口信 ...

  3. 闲鱼底部tab android,Flutter学习笔记--仿闲鱼底部导航栏带有中间凸起图标

    image 霸图镇楼 仿闲鱼底部导航栏带有中间凸起图标 需求情景: 需要实现一个类似闲鱼APP的底部导航栏的实现 要实现的效果如图 image 好的,下面开始上代码了: 一. 在main.dart文件 ...

  4. Flutter移动电商实战 --(14)首页_拨打电话操作

    拨打电话的功能在app里也很常见,比如一般的外卖app都会有这个才做.其实Flutter本身是没给我们提供拨打电话的能力的,那我们如何来拨打电话那? 1.编写店长电话模块 这个小伙伴们一定轻车熟路了, ...

  5. 01-Flutter移动电商实战-项目学习记录

    01-Flutter移动电商实战-项目学习记录 一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常 ...

  6. flutter底部导航栏

    更多文章请查看 lutter从入门 到精通 实现底部导航栏并点击切换页面可简述为有三种方式 TabBar + TabBarView BottomNavigationBar + BottomNaviga ...

  7. 03-Flutter移动电商实战-底部导航栏制作

    03-Flutter移动电商实战-底部导航栏制作 1.cupertino_IOS风格介绍 在Flutter里是有两种内置风格的: material风格: Material Design 是由 Goog ...

  8. 微信小程序电商实战-首页(上)

    IT实战联盟博客:http://blog.100boot.cn 上一篇:微信小程序电商实战-入门篇 嗨,大家好!经过近两周的精心准备终于开始微信小程序电商实战之路喽.那么最终会做成什么样呢?当然可以肯 ...

  9. 12-Flutter移动电商实战-首页导航区域编写

    12-Flutter移动电商实战-首页导航区域编写 1.导航单元素的编写 从外部看,导航是一个GridView部件,但是每一个导航又是一个上下关系的Column.小伙伴们都知道Flutter有多层嵌套 ...

最新文章

  1. bulma.css_如何建立一个? 具有Bulma CSS的特斯拉响应页面
  2. 9位AI教授总结2017年:技术变得平民化,但商业竞争在不断升级
  3. 分布式监控报警平台Centreon之:Centreon依赖安装
  4. ASP.Net MVC 在ajax接收controller返回值为Json数据
  5. 教师编计算机知识大全,高效老师必要知道的电脑常用知识技巧整理大全
  6. [Javascript]XMLHttpRequest对象实现下载进度条
  7. 少年派的一生,树莓派的十年,Raspberry Pi上市十周年
  8. JWT、JWE、JWS 、JWK 都是什么鬼?还傻傻分不清?
  9. 再见收费的 XShell,我改用国产良心工具,完全免费!
  10. Android 通过应用设置系统日期和时间的方法
  11. ROS实验笔记之——SLAM无人驾驶初入门
  12. 关于ASP.Net的validateRequest=false(验证请求)
  13. 工程中脉冲函数 c语言,怎样用C语言画出二阶系统单位脉冲响应函数的动态曲线...
  14. 曾扬言 机器人合法公民_简直荒谬!这个机器人被授予合法公民身份,并公开嘲笑马斯克!...
  15. RabbitMQ原理名词解释
  16. Why and How zk-SNARK Works 1: Introduction the Medium of a Proof
  17. 哪些Apple设备支持这次系统更新?来看你的旧Apple设备支持最新系统吗
  18. python利用server酱推送IP地址
  19. 关于VBS 文件执行后自动删除执行的文件
  20. fpga的jtag接口扫不到器件_FPGA中AS和JTAG接口的使用

热门文章

  1. [html] 如何使用H5实现电子签名?请说说你的思路
  2. [js] 举例说明js立即执行函数的写法有哪些?
  3. 工作128:element上传组件时候的钩子--event里面有数据参数
  4. 前端学习(2259)查看历史
  5. 前端学习(1530):钩子函数--代码演示(面试重点)
  6. mybatis学习(4):工具类和实体类的创建
  7. 第六十三期:放下你手里的代码,小心被抓!
  8. Python-100例(7-8) 复制列表 打印乘法口诀
  9. 程序员的数学笔记1--进制转换
  10. o_rdonly_O_RDWR, O_CREAT等open函数标志位在哪里定义? | 学步园