热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android仿京东底部导航菜单,flutter封装组件底部导航栏BottomNavigationBar

开发工具:AndroidStudio3.4.1介绍:flutter里可以理解为万物皆组件(Widget),类似于Java的万物皆对象(Ob

开发工具:

Android Studio 3.4.1

介绍:

flutter里可以理解为 万物皆组件(Widget),类似于Java的万物皆对象(Object);

通过对组件的封装,后期可快速实现出对应的界面效果,同时,还可知己移植到其他项目,重复使用;

目的:

可移植

使用频率高

快速构建

通常底部导航栏是目前主流app通用的一种布局方式,比如说微信、qq、支付宝、京东、思否;

所以将此布局封装出来,以后使用的时候,几行代码就能搭建出来;

效果图

bVbu8ar

实现的代码

红色区域:

pageList是内容界面,有三个;

一行代码便实现了底部导航栏效果;

bVbu8aQ

自定义TabWidget

封装的详细代码如下,可能还不够完善,后期再慢慢修改。

基本上都写了注释。。应该还是挺好理解的;

import 'package:flutter/material.dart';

class TabWidget extends StatefulWidget {

// 页面

List pageList;

// 标题,可以为空。默认为控字符串

List titleList = List();

// 图标 可以为空。默认为home

List iconList = List();

Color navBackgroundColor;

TabWidget(this.pageList,{List titles,List icons,this.navBackgroundColor}){

if(titles &#61;&#61; null || titles.length<1){

for(int i&#61;0;i

// 由于BottomNavigationBarItem必须要设置一个标题。默认给一个空字符串

titleList.add("");

}

}

if(icons &#61;&#61; null || icons.length<1){

for(int i&#61;0;i

// 添加默认图标-add default icon

iconList.add(Icon(Icons.home));

}

}

if(pageList &#61;&#61; null || pageList.length<1){

// 内容界面为空&#xff0c;抛出 异常

throw FormatException(&#39;one page at least!&#39;);

}

if(pageList &#61;&#61; null || pageList.length<1 || pageList.length!&#61;titleList.length || pageList.length!&#61;iconList.length){

// 内容界面数量、标题数量、图标数量不一致&#xff0c;抛出异常。

throw FormatException(&#39;data list is null or not equal!&#39;);

}

}

&#64;override

_TabWidgetState createState() &#61;> _TabWidgetState();

}

class _TabWidgetState extends State {

// 保存当前选中的位置

int _currentIndex &#61; 0;

&#64;override

Widget build(BuildContext context) {

return Container(

child: Scaffold(

body: widget.pageList[_currentIndex],

bottomNavigationBar: BottomNavigationBar(

// 条目

items: this._getNavItems(),

// 设置当前选中位置

currentIndex: this._currentIndex,

// 点击事件->设置当前选中位置,重新刷新界面

onTap: (index){

setState(() {

this._currentIndex &#61; index;

});

},

// 设置BottomNavigationBar背景颜色&#xff0c;默认设置为白色

backgroundColor: widget.navBackgroundColor &#61;&#61; null ? Colors.white: widget.navBackgroundColor,

),

),

);

}

List _getNavItems(){

List items &#61; List();

for(int i&#61;0;i

items.add(BottomNavigationBarItem(

icon: widget.iconList[i],

title:Text( widget.titleList[i]),

)

);

}

return items;

}

}

完整项目地址

项目代码&#xff1a;github地址--->机票

总结

关注flutter挺长一段时间了。最近才开始试着写代码&#xff0c;有什么不对的地方&#xff0c;各位大佬请轻喷&#xff0c;O(∩_∩)O哈哈~



推荐阅读
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
author-avatar
雅枝建彰3
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有