iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Flutter实现底部和顶部导航栏
  • 816
分享到

Flutter实现底部和顶部导航栏

2024-04-02 19:04:59 816人浏览 安东尼
摘要

Flutter底部和顶部导航栏的实现,供大家参考,具体内容如下 带文字图标的底部导航栏(使用BottomNavigationBar和BottomNavigationBarItem)来

Flutter底部和顶部导航栏的实现,供大家参考,具体内容如下

带文字图标的底部导航栏(使用BottomNavigationBar和BottomNavigationBarItem)来实现效果 (可以实现图片很文字,可以监听点击改变图片和文字的颜色)

实现核心代码:

bottomNavigationBar: BottomNavigationBar(
        /// items: List<BottomNavigationBarItem> : 表示需要显示的底控件个数
        items: [
          BottomNavigationBarItem(
          /// 设置Icon: _selectedIndex 如果选中的是当前item icon和文字都需要还
              icon: Image.asset(_selectedIndex == 0
                  ? image_pressed[0]
                  : image_nORMal[0],
                  ///设置图片的宽度和高度   有些图片很大,防止图片过大
                width: 32.0,
                height: 32.0,
              ),
              title: Text(
                titles[0],
                style: TextStyle(
                  color: _selectedIndex == 0
                      ? Color(0xFF46c01b)
                      : Color(0xff999999)
                ),
              ),
          ),

          BottomNavigationBarItem(
            icon: Image.asset(_selectedIndex == 1
                ? image_pressed[1]
                : image_normal[1],
              width: 32.0,
              height: 32.0,
            ),
            title: Text(
              titles[1],
              style: TextStyle(
                  color: _selectedIndex == 1
                      ? Color(0xFF46c01b)
                      : Color(0xff999999)
              ),
            ),
          ),

          BottomNavigationBarItem(
            icon: Image.asset(_selectedIndex == 2
                ? image_pressed[2]
                : image_normal[2],
              width: 32.0,
              height: 32.0,
            ),
            title: Text(
              titles[2],
              style: TextStyle(
                  color: _selectedIndex == 2
                      ? Color(0xFF46c01b)
                      : Color(0xff999999)
              ),
            ),
          ),

          BottomNavigationBarItem(
            icon: Image.asset(_selectedIndex == 3
                ? image_pressed[3]
                : image_normal[3],
              width: 32.0,
              height: 32.0,
            ),
            title: Text(
              titles[3],
              style: TextStyle(
                  color: _selectedIndex == 3
                      ? Color(0xFF46c01b)
                      : Color(0xff999999)
              ),
            ),
          ),
        ],
        //代表BottomNavigationBar 中当前选中的是下表是_selectedIndex的BottomNavigationBarItem控件
        currentIndex: _selectedIndex,
        /// 类型 充满(填充方式)
        type: BottomNavigationBarType.fixed,
        /// 当你点击其中的BottomNavigationBarItem的时候,会调用这个方法
        onTap: (index){
//          print('你点击了哪个按钮 $index');
          //刷新状态
          setState(() {
            /// 在点击方法中改变 选中下标
            _selectedIndex = index;
          });
        },
      ),

Scaffold + Appbar + Tabbar + PageView 来组合实现效果 实现顶部 底部导航栏效果(目前不知道怎么实现这个点击变换图片和文字的颜色)

 核心代码:

@override
  Widget build(BuildContext context) {
    // TODO: implement build
    ///顶部TABBar的模式
    if (this._type == GYTabBarWidget.TOP_TAB) {
      return Scaffold(
        ///设置侧边滑出 drawer, 不需要的可以不设置 drawer: Scaffold存在的侧滑属性
        drawer: _drawer,

        /// 设置悬浮按钮,不需要的可以不设置
        floatingActionButton: _floatingActionButton,

        /// 标题栏
        appBar: AppBar(
          title: _title,
          backgroundColor: _backgroundColor,

          /// 设置tabBar空件
          bottom: TabBar(
            ///顶部模式下  tabBar可以滑动的模式
            isScrollable: true, //这个属性设置 顶部tabBar是否可以滑动 如果不可以 就全部不显示在一个屏内,如果数量多可能看不见文字
            ///设置Controller属性  必须要有控制器 雨pageView的控制器同步
            controller: _tabController,//该导航栏中的 tabBar 设置一个控制器

            /// 每一个tab item 是一个List<Widget>
            tabs: _tabItems,//设置需要现实的 Items

            ///tab底部选中颜色
            indicatorColor: _indicatorColor,
          ),
        ),


        //TabBarView  必须要配合TabController来使用   这个TabBar和PageView 组合来实现这个顶部导航栏的效果
        //设置页面主题 pageView 用于承载Tab对应的页面
        body: PageView( //pageView
          /// 必须要有控制器 与TabBar的控制器同步
          controller: _pageController,

          ///每一个 tab 对应的页面主体,是一个List<Widget>
          children: _tabViews,
          ///页面触摸作用滑动回调,用于同步tab选中状态
          onPageChanged: (index) {
            _tabController.animateTo(index);
          },
        ),
      );
    }

    ///底部TAbBar模式
    return new Scaffold(
      ///设置侧边滑出 drawer,不需要可以不设置
        drawer: _drawer,
        ///设置悬浮按键,不需要可以不设置
        floatingActionButton: _floatingActionButton,
        ///标题栏
        appBar: new AppBar(
          backgroundColor: _backgroundColor,
          title: _title,
        ),
        ///页面主体,PageView,用于承载Tab对应的页面
        body: new PageView(
          ///必须有的控制器,与tabBar的控制器同步
          controller: _pageController,
          ///每一个 tab 对应的页面主体,是一个List<Widget>
          children: _tabViews,
          onPageChanged: (index) {
            ///页面触摸作用滑动回调,用于同步tab选中状态
            _tabController.animateTo(index);
          },
        ),
        ///底部导航栏,也就是tab栏  bottomNavigationBar: Scaffold控件中底部导航栏属性
        bottomNavigationBar: new Material(
          color: _backgroundColor,
          ///tabBar控件
          child: new TabBar(
            ///必须有的控制器,与pageView的控制器同步
            controller: _tabController,
            ///每一个tab item,是一个List<Widget>
            tabs: _tabItems,
            ///tab底部选中条颜色
            indicatorColor: _indicatorColor,
          ),
        ));


  }
}

上述代码注意:

1.要创建TabController 和PageController 来监听 tabbar和PageView的一些滑动和同步操作

2.切换时需要动画 必须要通过 with SingleTickerProviderStateMixin 实现动画效果。

3.当你切换每个页面的时候,发现每次都会重新调用initState()方法来初始化你的页面,解决方法:
让每个子页面

class _TabBarPageFirstState extends State<TabBarPageFirst> with AutomaticKeepAliveClientMixin {
//然后在其中实现这个方法 你就会发现你的子页面不会每次切换时都会重新加载构建
@override
  bool get wanTKEepAlive => true;
}

Scaffold + Appbar + Tabbar + TabBarView 来实现顶部导航栏(目前还不知道点击怎么变化图片和文字颜色)

class GYTopTabBarController extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    /// 这里需要使用DefaultTabController来包裹 ,如果没有包裹则使用TabBarView
    /// 会报错
    return DefaultTabController(
      length: 8,
      child: Scaffold(
        appBar: AppBar(
          title: Text('DefaultTabBarController'),

          bottom: TabBar(
            isScrollable: true,
            tabs: <Widget>[
               /// 这里可以使用Tab控件 来时先图标和文字的效果
               
  /// Tab(icon : , title: ),
              Text('111'),
              Text('222'),
              Text('333'),
              Text('444'),
              Text('555'),
              Text('666'),
              Text('777'),
              Text('888'),
            ],
          ),
        ),
            
        body: TabBarView(
          children: <Widget>[
            TabBarPageFirst(),
            TabBarPageSecond(),
            TabBarPageThree(),
            TabBarPageFour(),
            TabBarPageFirst(),
            TabBarPageSecond(),
            TabBarPageThree(),
            TabBarPageFour(),
          ],
        ),
      ),
    );
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Flutter实现底部和顶部导航栏

本文链接: https://www.lsjlt.com/news/165495.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter实现底部和顶部导航栏
    Flutter底部和顶部导航栏的实现,供大家参考,具体内容如下 带文字图标的底部导航栏(使用BottomNavigationBar和BottomNavigationBarItem)来...
    99+
    2024-04-02
  • flutter实现底部导航栏
    本文实例为大家分享了flutter实现底部导航栏的具体代码,供大家参考,具体内容如下 一.flutter底部导航栏常用组件BottomNavigationBar 属性介绍 Botto...
    99+
    2024-04-02
  • Android Fragment实现顶部、底部导航栏
    前言 无论是顶部还是底部导航栏,都是大多数APP的标配,网络上的相关实现教程也非常之多。最近回忆起以前写的小项目,发现对这块内容有些遗忘,不妨就再整理一遍代码逻辑,记录下来,方便日后...
    99+
    2024-04-02
  • Flutter实现顶部导航栏功能
    本文实例为大家分享了Flutter实现顶部导航栏的具体代码,供大家参考,具体内容如下 import 'package:flutter/material.dart'; class A...
    99+
    2024-04-02
  • flutter实现底部导航栏切换
    本文实例为大家分享了flutter实现底部导航栏切换的具体代码,供大家参考,具体内容如下 思路:MaterialApp是提供了bottomnavigationbar的,可以使用,这个...
    99+
    2024-04-02
  • flutter实现底部不规则导航栏
    本文实例为大家分享了flutter实现底部不规则导航栏的具体代码,供大家参考,具体内容如下 scafford的bottomNavigationBar参数赋值BottomAppBar可...
    99+
    2024-04-02
  • Flutter实现底部导航栏创建详解
    目录添加依赖项如何使用功能属性主题预览图代码Flutter web问题:Failed to load network image我的解决办法参考资料ConvexBottomBar是一...
    99+
    2024-04-02
  • Flutter如何实现底部导航栏创建
    Flutter如何实现底部导航栏创建,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。ConvexBottomBar是一个底部导航栏组件,用于展现凸起的TAB效果,...
    99+
    2023-06-26
  • FragmentTabHost FrameLayout实现底部导航栏
    app经常用到底部导航栏,早前使用过RadioGroup+FrameLayout实现或者RadioGroup+ViewPager实现,现在基本使用FragmentTabHost+FrameLayout来实现,因为使用起来简单易用。下面写一个...
    99+
    2023-05-31
    fragmenttabhost framelayout 导航栏
  • 【UniApp开发小程序】顶部导航栏和底部导航栏设置+iconfont图标引入
    文章目录 顶部导航栏和底部导航栏设置创建几个需要底部导航栏切换的页面使用阿里巴巴矢量图标库完成底部导航栏tabBar设置页面顶部导航栏标题 样式优化 顶部导航栏和底部导航栏设置 在正式开发小程序的功能之前,首先需要确定小程序...
    99+
    2023-08-16
    uni-app 小程序 apache 导航栏
  • Android实现底部导航栏效果
    目前网上主流的文章都是用底部的 RadioGroup + 页面部分的 Fragment 实现导航栏切换页面效果的。 然而底部的 RadioGroup 是如此麻烦,每个按钮的图片和文字...
    99+
    2024-04-02
  • android实现简单底部导航栏
    本文实例为大家分享了android实现底部导航栏的具体代码,供大家参考,具体内容如下 常见的底部导航栏 动态效果 实现步骤 1.底部导航栏样式 我们应该在项目的res文件夹下新建...
    99+
    2024-04-02
  • Flutter自定义底部导航栏的方法
    本文实例为大家分享了Flutter自定义底部导航栏的具体代码,供大家参考,具体内容如下 文件结构: main.dart import 'package:flutter/materi...
    99+
    2024-04-02
  • CSS+HTML实现顶部导航栏的方法
    这篇文章主要介绍了CSS+HTML实现顶部导航栏的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更...
    99+
    2023-06-14
  • Android使用RadioGroup实现底部导航栏
    RadioGroup实现底部导航栏效果,如图:: 实现可最基本的导航栏功能,不能左右滑动,只能点击内嵌的fragment的布局:<?xml version="1.0" encoding="utf-8"?>...
    99+
    2023-05-30
    radiogroup 导航栏 gr
  • 如何实现iview tabs顶部导航栏和模块切换栏
    这篇文章将为大家详细讲解有关如何实现iview tabs顶部导航栏和模块切换栏,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.顶部导航栏:html: <...
    99+
    2024-04-02
  • Android实现底部导航栏方法(Navigation篇)
    Navigation实现底部导航栏 前言导入和基本使用导入基础使用创建nav文件编辑Nav文件添加页面(代码版)添加页面(图解版) 创建导航动作 action创建action(代码版)...
    99+
    2023-10-10
    android
  • ElementUI 复杂顶部和左侧导航栏实现示例
    描述:如图 项目路径如下图所示: 代码实现: 首先在store.js中添加两个状态: import Vue from 'vue' import Vuex from 'vuex' ...
    99+
    2024-04-02
  • ElementUI复杂顶部和左侧导航栏怎么实现
    这篇文章主要介绍了ElementUI复杂顶部和左侧导航栏怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ElementUI复杂顶部和左侧导航栏怎么实现文章都会有所收获,下面我们一起来看看吧。描述:如图项目...
    99+
    2023-06-29
  • android : 底部导航栏的实现(使用ViewPager和BottomNavigationView)
      本案例中需要用的控件ViewPager和BottomNavigationView ViewPager:主要是页面的切换Fragment:碎片(也就是每个页面的内容)BottomNavigationView:底部导航栏 非常简单,主要就...
    99+
    2023-09-01
    android android studio ide
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作