经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Flutter » 查看文章
flutter实现appbar下选项卡切换
来源:jb51  时间:2021/7/12 9:39:37  对本文有异议

本文实例为大家分享了flutter实现appbar下选项卡切换的具体代码,供大家参考,具体内容如下

TabBar 、Tab、TabBarView 结合实现

这里实现的是appbar下的选项卡

  1. import 'package:flutter/material.dart';
  2.  
  3. /**
  4. * 有状态StatefulWidget
  5. * 继承于 StatefulWidget,通过 State 的 build 方法去构建控件
  6. */
  7. class TabBarAndTopTab extends StatefulWidget {
  8. 通过构造方法传值
  9. TabBarAndTopTab();
  10.  
  11. //主要是负责创建state
  12. @override
  13. _DemoStateWidgetState createState() => _DemoStateWidgetState();
  14. }
  15.  
  16. /**
  17. * 在 State 中,可以动态改变数据
  18. * 在 setState 之后,改变的数据会触发 Widget 重新构建刷新
  19. */
  20. class _DemoStateWidgetState extends State<TabBarAndTopTab>
  21. with SingleTickerProviderStateMixin {
  22. _DemoStateWidgetState();
  23.  
  24. List tabs = ["首页", "发现", "我的", "设置"];
  25.  
  26. //用于控制/监听Tab菜单切换
  27. //TabBar和TabBarView正是通过同一个controller来实现菜单切换和滑动状态同步的。
  28. TabController tabController;
  29.  
  30. @override
  31. void initState() {
  32. ///初始化,这个函数在生命周期中只调用一次
  33. super.initState();
  34. tabController = TabController(length: tabs.length, vsync: this);
  35. }
  36.  
  37. @override
  38. void didChangeDependencies() {
  39. ///在initState之后调 Called when a dependency of this [State] object changes.
  40. super.didChangeDependencies();
  41. }
  42.  
  43. @override
  44. Widget build(BuildContext context) {
  45. return buildTabScaffold();
  46. }
  47.  
  48. //通过“bottom”属性来添加一个导航栏底部tab按钮组,将要实现的效果如下:
  49. Widget buildTabScaffold() {
  50. return Scaffold(
  51. appBar: AppBar(
  52. title: Text('标题'),
  53. //设置选项卡
  54. bottom: buildTabBar(),
  55. //设置标题居中
  56. centerTitle: true,
  57. ),
  58. //设置选项卡对应的page
  59. body: buildBodyView(),
  60. );
  61. }
  62.  
  63. //当整个页面dispose时,记得把控制器也dispose掉,释放内存
  64. @override
  65. void dispose() {
  66. tabController.dispose();
  67. super.dispose();
  68. }
  69.  
  70. buildBodyView() {
  71. //构造 TabBarView
  72. Widget tabBarBodyView = TabBarView(
  73. controller: tabController,
  74. //创建Tab页
  75. children: tabs.map((e) {
  76. return Container(
  77. alignment: Alignment.center,
  78. child: Text(e, textScaleFactor: 1),
  79. );
  80. }).toList(),
  81. );
  82. return tabBarBodyView;
  83. }
  84.  
  85. buildTabBar() {
  86. //构造 TabBar
  87. Widget tabBar = TabBar(
  88. //tabs 的长度超出屏幕宽度后,TabBar,是否可滚动
  89. //设置为false tab 将平分宽度,为true tab 将会自适应宽度
  90. isScrollable: false,
  91. //设置tab文字得类型
  92. labelStyle: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  93. //设置tab选中得颜色
  94. labelColor: Colors.white,
  95. //设置tab未选中得颜色
  96. unselectedLabelColor: Colors.white70,
  97. //设置自定义tab的指示器,CustomUnderlineTabIndicator
  98. //若不需要自定义,可直接通过
  99. //indicatorColor 设置指示器颜色
  100. //indicatorWight 设置指示器厚度
  101. //indicatorPadding
  102. //indicatorSize 设置指示器大小计算方式
  103. ///指示器大小计算方式,TabBarIndicatorSize.label跟文字等宽,TabBarIndicatorSize.tab跟每个tab等宽
  104. indicatorSize: TabBarIndicatorSize.tab,
  105. //生成Tab菜单
  106. controller: tabController,
  107. //构造Tab集合
  108. tabs: tabs.map((e) => Tab(text: e)).toList());
  109.  
  110. return tabBar;
  111. }
  112. }

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号