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

flutterTabBarList自定义样式实现,AutomaticKeepAliveClientMixin每次切换页面不需要重新加载

TabBarListimportpackage:ZyFlutterthemefont.dart;importpackage:fluttermaterial.dart;impo

TabBarList

import 'package:ZyFlutter/theme/font.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';/// 顶部tabBar
class TabBarList extends StatefulWidget {// 标题final Widget title;// 右侧功能区域final List actions;// 左侧区域final Widget leading;// 内容区域final List child;// tab列表final List tabs;TabBarList({Key key, this.title, this.actions, this.leading, this.child, this.tabs}): super(key: key);@override_TabBarListState createState() => _TabBarListState();
}class _TabBarListState extends Statewith SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin {// Tab控制器TabController _tabController;int _tabIndex = 0;List myTabs = [];// 初始化@overridevoid initState() {super.initState();_tabController = TabController(length: widget.tabs.length, vsync: this);setState(() {myTabs = widget.tabs;});}@overridevoid dispose() {super.dispose();_tabController.dispose();}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(leading: widget.leading,title: widget.title,actions: widget.actions,shadowColor: Colors.white,bottom: TabBar(indicator: BoxDecoration(border: Border(bottom: BorderSide(color: Theme.of(context).toggleableActiveColor,width: 3.sp,style: BorderStyle.solid),),),tabs: myTabs,indicatorSize: TabBarIndicatorSize.label,labelStyle: TextStyle(color: Theme.of(context).colorScheme.primary,fontSize: Font.firstLevelTitle,fontWeight: FontWeight.bold),unselectedLabelStyle: TextStyle(color: Theme.of(context).colorScheme.primaryVariant,fontSize: Font.secondaryTitle),controller: _tabController,),),body: TabBarView(controller: _tabController,children: widget.child,),);}@overridebool get wantKeepAlive => true;
}

使用

import 'package:ZyFlutter/components/TabBarList.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:tapped/tapped.dart';class Village extends StatefulWidget {@override_VillageState createState() => _VillageState();
}class _VillageState extends State {List list = [Tab(text: "精选",),Tab(text: "本村",),Tab(text: "关注",),];@overrideWidget build(BuildContext context) {return TabBarList(tabs: list,title: Center(child: Text("村里"),),child: [Text("123"), Text("999"), Text("123")],actions: [Padding(child: Tapped(child: Icon(Icons.camera_alt,color: Theme.of(context).colorScheme.primaryVariant,),),padding: EdgeInsets.only(right: 16.sp),)],);}
}


推荐阅读
author-avatar
爱碩爱你_静莫失心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有