Closed dazed-daydreamer closed 2 years ago
SliverPadding( padding: EdgeInsets.all(20), ),
会自动叠加到pinned上。
pinnedHeaderSliverHeightBuilder 如果设pinned 的总高度,overlapsContent 和 shrinkOffset不触发。当设pinnedHeaderSliverHeightBuilder 的数值少于 pinned 总高度 ,overlapsContent 和 shrinkOffset才会触发
测试该问题的时候请先把SliverPadding组件删除
如果你用的官方的SliverPersistentHeader,那是不是应该用官方的组件?
import 'package:flutter/material.dart' hide NestedScrollView; import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
void main() { runApp(MyApp()); }
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } }
class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key);
final String title; @override _MyHomePageState createState() => _MyHomePageState(); }
class _MyHomePageState extends State
with SingleTickerProviderStateMixin {
TabController tabController;
@override
void initState() {
super.initState();
this.tabController = TabController(length: 4, vsync: this);
}
Future _onRefresh() {}
//tab Widget _tabListWidget(bool ceiling) { return Container( padding: EdgeInsets.symmetric(horizontal: 15), color: ceiling ? Colors.white : Colors.transparent, height: 50, child: TabBar( labelColor: Colors.black, controller: this.tabController, indicatorWeight: 3.5, indicatorSize: TabBarIndicatorSize.label, indicatorColor: Colors.red, labelStyle: TextStyle(fontSize: 17, fontWeight: FontWeight.bold), unselectedLabelStyle: TextStyle( fontSize: 15, ), tabs:[
Tab(text: '精选产品'),
Tab(text: '吃货联盟'),
Tab(text: '电脑办公'),
Tab(text: '生活家电'),
],
),
);
}
//tabview Widget _tabViewWidget() { return Container( child: ListView.builder( itemBuilder: (BuildContext context, int index) { return Container( height: 30, child: Text('$index'), ); }, itemCount: 100, ), ); }
@override Widget build(BuildContext context) { final double statusBarHeight = MediaQuery.of(context).padding.top; return Scaffold( body: NestedScrollViewRefreshIndicator( onRefresh: _onRefresh, child: NestedScrollView( headerSliverBuilder: (context, ceiling) { return [ //搜索框 SliverAppBar( pinned: true, elevation: 0, title: Text('搜索栏'), ),
} }
class StickyTabBarDelegate extends SliverPersistentHeaderDelegate { final child; final ceiling;
StickyTabBarDelegate({@required this.child, @required this.ceiling});
@override Widget build( BuildContext context, double shrinkOffset, bool overlapsContent) { return overlapsContent ? this.ceiling : this.child; }
@override double get maxExtent => 50;
@override double get minExtent => 50;
@override bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) { return true; } }