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

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

1、cupertino_IOS风格介绍

在Flutter里是有两种内置风格的:

  • material风格: Material Design 是由 Google 推出的全新设计语言,这种设计语言是为手机、平板电脑、台式机和其他平台提供一致,更广泛的外观和感觉。我喜欢称它为纸墨设计。Material Design 风格是一种非常有质感的设计风格,并会提供一些默认的交互动画。
  • cupertino风格:即 IOS 风格组件,它重现了很多经典的有 IOS 特性的交互和界面风格,让适用于 IOS 的人感觉亲切和友好。

并非选择了一种风格,就要一直使用这种风格,事实是你可以一起使用,兼顾两个风格的特点。

我们在 index_page.dart 页面同时使用两种风格 UI ,只需要在头部分引入了 cupertino.dart、material.dart。注意这两个引入是不分先后顺序的。

index_page.dart 文件:

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

2、使用动态StatefulWidget

上篇文章为了测试入口文件,我们在 index_page.dart 文件里使用了静态组件(也就是继承了StatelessWidget)。

正常情况下,底部导航栏是要根据用户操作不断变化的,所以我们改用动态组件(StatefulWidget)。

修改后的代码如下:

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';class IndexPage extends StatefulWidget {@override_IndexPageState createState() => _IndexPageState();
}class _IndexPageState extends State<IndexPage{@overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text("百姓生活+"),),body: new Center(child: Text("我是居中的文本内容"),),);}
}

改编后的界面效果并未发生改变,不截图了。

3、底部栏

有了动态组件,接下来可以在State部分先声明一个List变量,变量名称为boottomTabs,变量的属性为BottomNavigationBarItem。

其实这个List变量就定义了底部导航的文字和使用的图标。

代码如下:

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('会员中心')),];

底栏的数据有了,怎么使用呢?

修改后的 index_page.dart 文件:

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';class IndexPage extends StatefulWidget {@override_IndexPageState createState() => _IndexPageState();
}class _IndexPageState extends State<IndexPage{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('会员中心')),];@overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text("百姓生活+"),),body: new Center(child: Text("我是居中的文本内容"),),bottomNavigationBar: BottomNavigationBar(type:BottomNavigationBarType.fixed,currentIndex: 0,items:bottomTabs,onTap: (index){},),);}
}

效果图:

下篇将打通4非底部导航栏,关于界面切换以及底栏的实现可参考之前写的一篇文章:
Flutter实 ViewPager、bottomNavigationBar界面切换

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

plugin since you are using Gradle version 4.6 or above

Android studio项目在新的开发环境下打开时报错如下 解决方法如下&#xff1a; 1、目录选到Android状态 2、进入gradle.properties文件。 3、org.gradle.configureondemandfalse——————默认是true。改完false即可

[转]调试 smallcorgi/Faster-RCNN_TF 的demo过程遇到的问题

最近在调试faster R-CNN时&#xff0c;遇到了各种各样的问题。使用的算法库为https://github.com/smallcorgi/Faster-RCNN_TF 注&#xff1a;本文使用的是通过virtualenv 创建python虚拟环境进行调试&#xff0c;python 版本2.7&#xff0c;tensorflow 版本为tensorflow1.4-gpu…

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

04-Flutter移动电商实战-打通底部导航栏 关于界面切换以及底栏的实现可参考之前写的一篇文章&#xff1a;Flutter实 ViewPager、bottomNavigationBar界面切换 1、新建4个基本dart文件 在pages目录下&#xff0c;我们新建下面四个dart文件。 home_page.dart :商城首页UI页面…

【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积

一、前述 怎么样对训练出来的模型进行评估是有一定指标的&#xff0c;本文就相关指标做一个总结。 二、具体 1、混淆矩阵 混淆矩阵如图&#xff1a; 第一个参数true&#xff0c;false是指预测的正确性。 第二个参数true,postitives是指预测的结果。 相关公式&#xff1a; 检测正…

05-Flutter移动电商实战-dio基础_引入和简单的Get请求

05-Flutter移动电商实战-dio基础_引入和简单的Get请求 这篇开始我们学习Dart第三方Http请求库dio&#xff0c;这是国人开源的一个项目&#xff0c;也是国内用的最广泛的Dart Http请求库。 1、dio介绍和引入 dio是一个强大的Dart Http请求库&#xff0c;支持Restful API、 Fo…

Jmeter——for循环控制器和if逻辑控制器

有时我们不仅仅需要用例按照简单的顺序跑&#xff0c;需要内嵌循环&#xff0c;或者条件分支&#xff0c;让某些用例在满足一定条件时才执行。 1、for循环控制器 此处记录两种应用的场景&#xff0c;一种是直接定义好要循环的变量&#xff0c;循环次数是固定的&#xff0c;写死…

06-Flutter移动电商实战-dio基础_Get_Post请求和动态组件协作

06-Flutter移动电商实战-dio基础_Get_Post请求和动态组件协作 上篇文章中&#xff0c;我们只看到了 dio 的使用方式&#xff0c;但并未跟应用关联起来&#xff0c;所以这一篇将 dio 网络请求与应用界面结合起来&#xff0c;当然这也是为以后的实战作基础准备&#xff0c;基础打…

Cannot merge new index 66395 into a non-jumbo instruction!,uses or overrides a deprecated API.

老项目运行没问题。一打包就报错 解决方法——添加dexOptions android {compileSdkVersion 27dexOptions{jumboMode true}

08-Flutter移动电商实战-dio基础_伪造请求头获取数据

08-Flutter移动电商实战-dio基础_伪造请求头获取数据 在很多时候&#xff0c;后端为了安全都会有一些请求头的限制&#xff0c;只有请求头对了&#xff0c;才能正确返回数据。这虽然限制了一些人恶意请求数据&#xff0c;但是对于我们聪明的程序员来说&#xff0c;就是形同虚设…

工作269:uni--客流分析优化

<template><view><view><view id"main"><!-- 第一步 设置盒子大小 --></view></view><view><view v-for"(item,index) in 10"><view style"display: flex;justify-content: space-between;…

09-Flutter移动电商实战-移动商城数据请求实战

09-Flutter移动电商实战-移动商城数据请求实战 1、URL接口管理文件建立 第一步需要在建立一个URL的管理文件&#xff0c;因为课程的接口会一直进行变化&#xff0c;所以单独拿出来会非常方便变化接口。当然工作中的URL管理也是需要这样配置的&#xff0c;以为我们会不断的切换…

Android 串口开发,发送串口命令,读卡,反扫码,USB通讯,实现demo。——持续更新

应用场景&#xff1a;APP发送串口命令到打印机&#xff0c;打印相应数据小票 // 串口 implementation com.github.licheedev.Android-SerialPort-API:serialport:1.0.1 1、获取全部串口地址devicePath private String[] mDevices; public void getcuankou(){SerialPortFinder…

10-Flutter移动电商实战-使用FlutterSwiper制作轮播效果

10-Flutter移动电商实战-使用FlutterSwiper制作轮播效果 1、引入flutter_swiper插件 flutter最强大的siwiper, 多种布局方式&#xff0c;无限轮播&#xff0c;Android和IOS双端适配. 好牛X得介绍&#xff0c;一般敢用“最”的一般都是神级大神&#xff0c;看到这个介绍后我也是…

工作271:打开弹出框调用当前页面接口

<template><div><button-dialogopen"open"ref"dialog"width"1000px"title"内容关联"ok-button-text"确认关联":destroy-on-close"true"ok"confirmAssociation"><!----><cus…

11-Flutter移动电商实战-首页_屏幕适配方案和制作

11-Flutter移动电商实战-首页_屏幕适配方案和制作 1、flutter_ScreenUtil插件简介 flutter_ScreenUtil屏幕适配方案&#xff0c;让你的UI在不同尺寸的屏幕上都能显示合理的布局。 插件会让你先设置一个UI稿的尺寸&#xff0c;他会根据这个尺寸&#xff0c;根据不同屏幕进行缩…

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

12-Flutter移动电商实战-首页导航区域编写 1、导航单元素的编写 从外部看&#xff0c;导航是一个GridView部件&#xff0c;但是每一个导航又是一个上下关系的Column。小伙伴们都知道Flutter有多层嵌套的问题&#xff0c;如果我们都写在一个组件里&#xff0c;那势必造成嵌套严…