本文使用tabbar实现顶部横向滚动多个菜单。

实现tabbar搜索框功能加功能按钮。

话不多说,上代码!

  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_zhihu/kits/color/colorKit.dart';
  4.  
  5. class TestPage extends StatefulWidget {
  6. @override
  7. _TestPageState createState() => _TestPageState();
  8. }
  9.  
  10. class _TestPageState extends State<TestPage>
  11. with SingleTickerProviderStateMixin {
  12. TabController _tabController; //tabbar控制器,控制顶部tabbar切换
  13. //搜索框控制器,适用于在全局监听搜索框内容。如果不需要全局监听,只使用onChanged onSubmitted即可
  14. TextEditingController _textController;
  15. @override
  16. void initState() {
  17. // TODO: implement initState
  18. super.initState();
  19. _tabController = TabController(length: 9, vsync: this);//初始化控制器
  20. _textController = TextEditingController();
  21. _textController.addListener(() {
  22. print('_textController+${_textController.text}');
  23. });
  24. }
  25.  
  26. @override
  27. Widget build(BuildContext context) {
  28. return Scaffold(
  29. appBar: AppBar(
  30. title: Row(
  31. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  32. children: [
  33. Expanded(
  34. child: Icon(
  35. Icons.home,
  36. ),
  37. flex: 0,
  38. ),
  39. Expanded(
  40. child: Container(
  41. height: 30,
  42. margin: EdgeInsets.fromLTRB(10, 5, 10, 0),
  43. child: TextField(
  44. controller: _textController,
  45. decoration: InputDecoration(
  46. fillColor: ColorKit.hexToColor('#F6F6F6'),
  47. filled: true,
  48. contentPadding: EdgeInsets.fromLTRB(10, 0, 10, 0),
  49. hintText: '请输入搜索内容',
  50. hintStyle: TextStyle(fontSize: 13),
  51. border: OutlineInputBorder(
  52. borderRadius: BorderRadius.circular(20),
  53. borderSide: BorderSide.none,
  54. ),
  55. ),
  56. onChanged: (text){
  57. print('onchanged+$text');
  58. },
  59. onSubmitted: (text){
  60. print('onSubmitted+$text');
  61. },
  62. ),
  63. ),
  64. flex: 1,
  65. ),
  66. Expanded(
  67. child: Icon(Icons.pages),
  68. flex: 0,
  69. ),
  70. ],
  71. ),
  72. bottom: PreferredSize(
  73. preferredSize: Size.fromHeight(35),
  74. child: Row(
  75. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  76. children: [
  77. Expanded(
  78. flex: 1,
  79. child: Container(
  80. height: 48,
  81. child: TabBar(
  82. indicatorSize: TabBarIndicatorSize.label,
  83. isScrollable: true,
  84. controller: _tabController,
  85. tabs: [
  86. Container(
  87. width: 60,
  88. alignment: Alignment.center,
  89. child: Text('退机'),
  90. ),
  91. Container(
  92. width: 60,
  93. alignment: Alignment.center,
  94. child: Text('退机'),
  95. ),
  96. Container(
  97. width: 60,
  98. alignment: Alignment.center,
  99. child: Text('退机'),
  100. ),
  101. Container(
  102. width: 60,
  103. alignment: Alignment.center,
  104. child: Text('退机'),
  105. ),
  106. Container(
  107. width: 60,
  108. alignment: Alignment.center,
  109. child: Text('退机'),
  110. ),
  111. Container(
  112. width: 60,
  113. alignment: Alignment.center,
  114. child: Text('退机'),
  115. ),
  116. Container(
  117. width: 60,
  118. alignment: Alignment.center,
  119. child: Text('退机'),
  120. ),
  121. Container(
  122. width: 60,
  123. alignment: Alignment.center,
  124. child: Text('退机'),
  125. ),
  126. Container(
  127. width: 60,
  128. alignment: Alignment.center,
  129. child: Text('退机'),
  130. ),
  131. ],
  132. ),
  133. )),
  134. Expanded(flex: 0, child: Container(
  135. margin: EdgeInsets.fromLTRB(10, 0, 10, 0),
  136. child: Icon(Icons.ac_unit),
  137. ))
  138. ],
  139. ),
  140. ),
  141. ),
  142. //顶部tabbar页面内容
  143. body: TabBarView(
  144. controller: _tabController,//tabbar控制器
  145. children: [
  146. Text('111111111'),
  147. Text('2222222222'),
  148. Text('333333333'),
  149. Text('111111111'),
  150. Text('2222222222'),
  151. Text('333333333'),
  152. Text('111111111'),
  153. Text('2222222222'),
  154. Text('333333333')
  155. ],
  156. ),
  157. );
  158. }
  159. }

flutter 顶部导航tabbar自定义的更多相关文章

  1. Flutter学习笔记(17)--顶部导航TabBar、TabBarView、DefaultTabController

    如需转载,请注明出处:Flutter学习笔记(17)--顶部导航TabBar.TabBarView.DefaultTabController 上一篇我们说了BottmNavigationBar底部导航 ...

  2. 顶部导航TabBar、TabBarView、DefaultTabController

    原文地址:https://www.cnblogs.com/upwgh/p/11369537.html TabBar:Tab页的选项组件,默认为水平排列. TabBarView:Tab页的内容容器,Ta ...

  3. uni-app自定义导航栏按钮|uniapp仿微信顶部导航条

    最近一直在学习uni-app开发,由于uniapp是基于vue.js技术开发的,只要你熟悉vue,基本上很快就能上手了. 在开发中发现uni-app原生导航栏也能实现一些顶部自定义按钮+搜索框,只需在 ...

  4. 微信小程序自定义顶部导航

    注释:自定义导航需要自备相应图片 一.设置自定义顶部导航 Navigation是小程序的顶部导航组件,当页面配置navigationStyle设置为custom的时候可以使用此组件替代原生导航栏. 1 ...

  5. [置顶] xamarin Tablayout+Viewpager+Fragment顶部导航栏

    最近几天不忙,所以把项目中的顶部导航栏的实现归集一下.android中使用TabLayout+ViewPager+Fragment制作顶部导航非常常见,代码实现也比较简单.当然我这个导航栏是基于xam ...

  6. uni-app实现顶部导航栏显示按钮+搜索框

    最近公司准备做app,最终决定使用uni-app框架开发,但是当把设计图给我的时候我心里有点没底,因为他的设计图顶部长成这个样子: 因为这个功能在小程序是根本无法实现的,可能受这个影响,我感觉好像实现 ...

  7. TabLayout实现顶部导航(一)

    代码地址如下:http://www.demodashi.com/demo/14552.html 前言 顶部导航栏,是我们在开发中比较常见的一种显示布局,它的实现可以有多种方式,那么今天我们就来讲讲 T ...

  8. Android之仿今日头条顶部导航栏效果

    随着时间的推移现在的软件要求显示的内容越来越多,所以要在小的屏幕上能够更好的显示更多的内容,首先我们会想到底部菜单栏,但是有时候像今日头条新闻客户端要显示的内容太多,而且又想在主界面全部显示出来,所以 ...

  9. 【React -- 9/100】 抽离顶部导航栏 - [组件复用]

    今天写的页面中需要重复使用到顶部导航栏,所以把顶部导航栏抽离出来 考虑复用组件的健壮性,使用PropTypes校验,可以自定义一个click事件 JSX import React from " ...

  10. uni-app动态修改顶部导航栏标题

    动态修改顶部导航栏标题有两种方法方式一.使用自定义到导航栏,覆盖原生导航栏 缺点:自定义到导航栏性能远远不如原生导航栏,手机顶部状态栏区域会被页面内容覆盖,这是因为窗体是沉浸式的原因,即全屏可写内容: ...

随机推荐

  1. C# RichTextBox跳转到指定行(文本行跳转和显示行跳转)

    文本行跳转: 对禁止自动换行(WordWrap属性为False)有效 1 /// <summary>跳到指定行</summary> 2 private void JumpToL ...

  2. Gitbook部署

    title: Gitbook部署 # 标题 date: 2020-06-14 08:00:00 借助Gitbook,写自己的第一本电子书 Gitbook部署 一.电脑环境 Git 环境,我的电脑上已经 ...

  3. 重新安装office原版本没卸载干净

    先在设置--卸载界面确保已经卸载 在键盘上按"win+R",在运行窗口里面输入"regedit",回车 ,进入注册表编辑器 找到products 删除与offi ...

  4. 使用layui+jQuery实现点击删除单行数据

    使用layui+jQuery实现点击删除单行数据 首先要用到layui的官网手册 地址:https://www.layui.com/ 注意1.  此功能是在使用layui展示数据的基础上实现 3.  ...

  5. pytest-2 之前后置及 conftest.py+fixture+yield实现用例前后置

    pytest测试用例及类级别的前置,可以和unittest一样进行定义,也可以把该前置方法或类定义到conftest.py里,而在需要前置的方法的参数里加上该前置名作为参数: pytest有两种方式来 ...

  6. JAVA学习笔记-06

    多态:可以理解为事物存在的多种体现形态 1.多态的基本体现 父类的引用指向了自己的子类对象 父类的引用也可以接收自己的子类对象 2.多态的前提 必须是类与类之间有关系,要么继承,要么实现 通常还有一个 ...

  7. 梦想Android版CAD控件(安卓CAD二次开发,安卓CAD控件)2023.02.26更新

    下载地址:https://www.mxdraw.com/ndetail_40240.html1. 增加willBeReturnStart事件2. 增加使用OpenGL缓存3. 优化界面响应时间4. 修 ...

  8. CRC校验模板

    #ifndef CRC_H #define CRC_H #include "main.h" #ifdef CRC_C #endif typedef struct { uchar R ...

  9. JS——如果数组中的信息存在多个相同的属性,那么则将这些相同的信息放到同一个children中。

    var arr = [ {name: '张三', age: 10, sex: '男'}, {name: '李四', age: 10, sex: '男'}, {name: '钱五', age: 11, ...

  10. source insight c++ namespace 无法跳转解决方法

    source insight c++ namespace 无法跳转解决方法 2016年02月15日 11:47:35 暗小夜 阅读数:4460   勾选igore namespace declarat ...