You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
and wrapped the SliverFixedExtentList in a SliverStickyHeader element and the headers are not sticking to the top of the list. I've tried this in a variety of places but can't seem to make a sticky header work using this library or even the original which used RenderObjects. Any thoughts as to why this might be?
Here's the full code as an example:
import'package:flutter/material.dart';
import'package:flutter_sticky_header/flutter_sticky_header.dart';
voidmain() =>runApp(constMyApp());
classMyAppextendsStatelessWidget {
constMyApp({Key? key}) :super(key: key);
staticconstString _title ='Flutter Code Sample';
@overrideWidgetbuild(BuildContext context) {
returnconstMaterialApp(
title: _title,
home:MyStatelessWidget(),
);
}
}
classMyStatelessWidgetextendsStatelessWidget {
constMyStatelessWidget({Key? key}) :super(key: key);
@overrideWidgetbuild(BuildContext context) {
finalList<String> _tabs =<String>['Tab 1', 'Tab 2'];
returnDefaultTabController(
length: _tabs.length, // This is the number of tabs.
child:Scaffold(
body:NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
// These are the slivers that show up in the "outer" scroll view.return<Widget>[
SliverOverlapAbsorber(
// This widget takes the overlapping behavior of the SliverAppBar,// and redirects it to the SliverOverlapInjector below. If it is// missing, then it is possible for the nested "inner" scroll view// below to end up under the SliverAppBar even when the inner// scroll view thinks it has not been scrolled.// This is not necessary if the "headerSliverBuilder" only builds// widgets that do not overlap the next sliver.
handle:NestedScrollView.sliverOverlapAbsorberHandleFor(context),
sliver:SliverAppBar(
title:constText('Books'), // This is the title in the app bar.
pinned:true,
expandedHeight:150.0,
// The "forceElevated" property causes the SliverAppBar to show// a shadow. The "innerBoxIsScrolled" parameter is true when the// inner scroll view is scrolled beyond its "zero" point, i.e.// when it appears to be scrolled below the SliverAppBar.// Without this, there are cases where the shadow would appear// or not appear inappropriately, because the SliverAppBar is// not actually aware of the precise position of the inner// scroll views.
forceElevated: innerBoxIsScrolled,
bottom:TabBar(
// These are the widgets to put in each tab in the tab bar.
tabs: _tabs.map((String name) =>Tab(text: name)).toList(),
),
),
),
];
},
body:TabBarView(
// These are the contents of the tab views, below the tabs.
children: _tabs.map((String name) {
returnSafeArea(
top:false,
bottom:false,
child:Builder(
// This Builder is needed to provide a BuildContext that is// "inside" the NestedScrollView, so that// sliverOverlapAbsorberHandleFor() can find the// NestedScrollView.
builder: (BuildContext context) {
returnCustomScrollView(
// The "controller" and "primary" members should be left// unset, so that the NestedScrollView can control this// inner scroll view.// If the "controller" property is set, then this scroll// view will not be associated with the NestedScrollView.// The PageStorageKey should be unique to this ScrollView;// it allows the list to remember its scroll position when// the tab view is not on the screen.
key:PageStorageKey<String>(name),
slivers:<Widget>[
SliverOverlapInjector(
// This is the flip side of the SliverOverlapAbsorber// above.
handle:NestedScrollView.sliverOverlapAbsorberHandleFor(
context),
),
SliverPadding(
padding:constEdgeInsets.all(8.0),
// In this example, the inner scroll view has// fixed-height list items, hence the use of// SliverFixedExtentList. However, one could use any// sliver widget here, e.g. SliverList or SliverGrid.
sliver:SliverStickyHeader(
header:Text('header'),
sliver:SliverFixedExtentList(
// The items in this example are fixed to 48 pixels// high. This matches the Material Design spec for// ListTile widgets.
itemExtent:48.0,
delegate:SliverChildBuilderDelegate(
(BuildContext context, int index) {
// This builder is called for each child.// In this example, we just number each list item.returnListTile(
title:Text('Item $index'),
);
},
// The childCount of the SliverChildBuilderDelegate// specifies how many children this inner list// has. In this example, each tab has a list of// exactly 30 items, but this is arbitrary.
childCount:30,
),
),
),
),
],
);
},
),
);
}).toList(),
),
),
),
);
}
}
The text was updated successfully, but these errors were encountered:
I took the first sample from Flutter's documentation on this page:
https://api.flutter.dev/flutter/widgets/NestedScrollView-class.html#widgets.NestedScrollView.1
and wrapped the
SliverFixedExtentList
in aSliverStickyHeader
element and the headers are not sticking to the top of the list. I've tried this in a variety of places but can't seem to make a sticky header work using this library or even the original which used RenderObjects. Any thoughts as to why this might be?Here's the full code as an example:
The text was updated successfully, but these errors were encountered: