📜  sliver 持久标签栏 - 任何代码示例

📅  最后修改于: 2022-03-11 14:55:12.826000             🧑  作者: Mango

代码示例1
import 'package:flutter/material.dart';
//Shohel Rana Shanto

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
      
    );
  }
}
class HomePage extends StatefulWidget {
  const HomePage({ Key? key }) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length:4 ,
      child: Scaffold(
        backgroundColor: Colors.white10,
        body: NestedScrollView(headerSliverBuilder: (context,_){
          return [
            SliverAppBar(
              leading: Icon(Icons.menu),
              actions: [
                Icon(Icons.notifications),
                Icon(Icons.search)
              ],
              
              title: Text(' Sliver Persistent Header'),
              backgroundColor: Colors.black87,
            
            ),
            SliverPersistentHeader(
              pinned: true, floating: true,
              delegate: MyTab())
          ];
        },
        
         body: TabBarView(children: [
           Container(color: Colors.green,child: GridView.count(crossAxisCount: 3,
           children: 
             List.generate(100, (index) => 
             Card(color:index%4==0?Colors.red:index%4==2?Colors.pink:index%4==1?Colors.yellow:Colors.blue,child: Text('Grid$index'),)
             )
           
           
           ),),
           Container(color: Colors.red,child: ListView.builder(
             itemCount: 6,
             itemBuilder: (context,index){
             return Card(
               
               child: ListTile(
                 title: Text('List$index'),
               ),
             );
           }),),
           Container(color: Colors.yellow,),
           Container(color: Colors.blue,),
         ]),
      
      ),
      ),
    );
  }
}

class MyTab extends SliverPersistentHeaderDelegate{
  @override
  Widget build(BuildContext context,double,bool) {
    return Container(
      decoration: BoxDecoration(
        gradient: LinearGradient(colors: [Colors.black,Colors.blue,Colors.black])
      ),
      
      child: TabBar(
        
        tabs: [
        Tab(text: 'Grid',height:100,),
        Tab(text: 'List',),
        Tab(text: 'Manush',),
        Tab(text: 'Shoytan',),
      ]),
    );
  }
  @override
  bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) {
    
    return true;
  }
  @override
  
  double  maxExtent = 110;
  @override
  
  double  minExtent = 50;
}