import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:zhiying_base_widget/pages/main_page/main_page.dart'; class MinePage extends StatefulWidget { @override _MinePageState createState() => _MinePageState(); } class _MinePageState extends State with TickerProviderStateMixin { TabController _tabController; Map _datas = Map(); @override void initState() { _tabController = TabController(length: 3, vsync: this); // 模拟数据 List> list = List(); list.add( Map.from({'mod_name': 'index_search', 'mod_id': 5})); list.add( Map.from({'mod_name': 'index_carousel', 'mod_id': 6})); list.add(Map.from({'mod_name': 'multi_nav', 'mod_id': 7})); list.add(Map.from( {'mod_name': 'index_banner_one', 'mod_id': 8})); list.add(Map.from( {'mod_name': 'index_banner_two', 'mod_id': 9})); list.add(Map.from( {'mod_name': 'index_recommend_list', 'mod_id': 10})); _datas['components'] = list; super.initState(); } @override void dispose() { _tabController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { List _silverBuilder(BuildContext context, bool innerBoxIsScrolled) { return [ SliverAppBar(), SliverPersistentHeader( pinned: true, delegate: _SilverAppBarDelegate( Container( color: Colors.amber, child: TabBar( labelColor: Colors.blue, unselectedLabelColor: Colors.black, controller: _tabController, tabs: [ new Tab( text: "tab10", ), new Tab( text: "tab2", ), new Tab( text: "tab3", ), ], ), ), ), ), ]; } return Scaffold( body: SafeArea( child: NestedScrollView( headerSliverBuilder: _silverBuilder, body: TabBarView( controller: _tabController, children: [ MainPage(_datas), ListView.builder( itemCount: 50, itemBuilder: (context, count) { return Container( height: 50, color: Colors.primaries[count % Colors.primaries.length], child: Text('aaaaa ${count.toString()}'), ); }), MainPage(_datas), ], ), )), ); } } class _SilverAppBarDelegate extends SliverPersistentHeaderDelegate { _SilverAppBarDelegate(this.child); final Widget child; @override double get minExtent => 44; @override double get maxExtent => 44; @override Widget build( BuildContext context, double shrinkOffset, bool overlapsContent) { return new Container( child: child, ); } @override bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) { return false; } }