How To Add SliverAppBar To Your Flutter App

Master the SliverAppBar widget to create dynamic, collapsible app bars that respond to scrolling. Learn implementation techniques for polished mobile UIs.

What Is SliverAppBar and Why Use It

SliverAppBar is a Material Design widget in Flutter that provides a scrollable or collapsible app bar. The term "sliver" refers to scrollable areas in Flutter's rendering system--portions of a scrollable view that can be lazily built and optimized for performance. SliverAppBar integrates with the CustomScrollView widget to create seamless scrolling experiences where the app bar can change its size, appearance, or visibility based on scroll position.

Unlike a traditional AppBar widget that maintains a fixed height at the top of the screen, SliverAppBar offers several advantages for modern mobile applications. First, it maximizes screen real estate by allowing content to flow behind the app bar when expanded, creating visually immersive experiences. Second, it improves user engagement by providing contextual information that appears when users scroll down and condenses when they need more content visibility.

The widget is particularly valuable for content-heavy applications such as news readers, social media feeds, e-commerce product listings, and media streaming apps. When a user scrolls through a feed, the expanded app bar can display rich content like hero images, promotional banners, or user profile information. As the user continues scrolling, the app bar smoothly collapses to a more compact form, allowing more content to be visible on the screen.

SliverAppBar must be used as a child of the CustomScrollView widget, which provides the scrolling infrastructure that enables the app bar's dynamic behavior. This architecture provides fine-grained control over how scrollable content behaves, as each sliver manages its own scrolling physics and rendering.

If you're building mobile applications professionally, understanding these advanced UI components is essential for creating polished user interfaces. Our mobile app development services team specializes in Flutter implementations that leverage these powerful widgets to deliver exceptional user experiences.

Core Properties of SliverAppBar

Key configuration options for controlling app bar behavior

expandedHeight

Sets the height when fully expanded. Typically 150-250 pixels for rich content displays.

collapsedHeight

Defines minimum height when collapsed. Usually matches standard toolbar height (60-80 pixels).

flexibleSpace

Widget stacked behind toolbar. Used with FlexibleSpaceBar for animated backgrounds and collapsing titles.

floating

When true, app bar appears immediately when scrolling upward toward it.

pinned

When true, app bar remains visible at top in collapsed form even when scrolled to bottom.

snap

When true with floating, app bar snaps between expanded and collapsed states.

Basic SliverAppBar Implementation
1import 'package:flutter/material.dart';2 3void main() => runApp(MyApp());4 5class MyApp extends StatelessWidget {6 @override7 Widget build(BuildContext context) {8 return MaterialApp(9 home: Scaffold(10 body: CustomScrollView(11 slivers: <Widget>[12 SliverAppBar(13 expandedHeight: 200.0,14 flexibleSpace: FlexibleSpaceBar(15 title: Text('My App'),16 background: Image.network(17 'https://example.com/header-image.jpg',18 fit: BoxFit.cover,19 ),20 ),21 ),22 SliverList(23 delegate: SliverChildBuilderDelegate(24 (context, index) => ListTile(title: Text('Item $index')),25 childCount: 50,26 ),27 ),28 ],29 ),30 ),31 );32 }33}

Behavior Properties: floating, pinned, and snap

The floating, pinned, and snap properties control how the SliverAppBar responds to scrolling and are the most important properties for achieving the desired user experience:

floating: true - The app bar becomes visible as soon as the user scrolls towards it, even if scrolling upward from the top of the content. This creates a "quick reveal" effect.

pinned: true - The app bar remains visible at the top of the scroll view even when scrolled to the bottom of the content.

snap: true - When combined with floating, this property causes the app bar to "snap" into view rather than smoothly following the scroll position.

Behavior Combinations:

floatingpinnedsnapBehavior
falsefalsefalseStandard scrolling - app bar scrolls away completely
truefalsefalseQuick reveal when scrolling up
truetruefalseAlways visible at top in collapsed form
truefalsetrueSnapping app bar with quick reveal
truetruetrueFull-featured snapping app bar

The combination of these properties produces distinct scrolling behaviors. A floating app bar appears immediately when the user initiates an upward scroll gesture. When pinned is enabled, the app bar stays fixed at the top in its collapsed form, providing persistent access to navigation or actions. The snap property, when combined with floating, causes the app bar to animate quickly to either its expanded or collapsed state, creating a more decisive user interface.

For most content-heavy applications, the combination of floating: true, pinned: true, snap: true provides the most polished user experience, keeping the app bar always accessible while allowing it to expand and snap smoothly between states.

SliverAppBar Properties Reference
PropertyTypeDescription
titleWidget?Primary widget displayed in the app bar
expandedHeightdouble?Height when fully expanded
collapsedHeightdouble?Height when fully collapsed
flexibleSpaceWidget?Widget stacked behind toolbar
floatingboolApp bar appears when scrolling toward it
pinnedboolApp bar remains visible at start of scroll
snapboolApp bar snaps into view (requires floating)
stretchboolApp bar stretches on overscroll
actionsList<Widget>?Widgets displayed after title
leadingWidget?Widget displayed before title
backgroundColorColor?Fill color for app bar Material
elevationdouble?Z-coordinate relative to parent
shadowColorColor?Color of shadow below app bar
bottomPreferredSizeWidget?Widget shown across bottom of app bar
centerTitlebool?Whether title should be centered
titleSpacingdouble?Horizontal spacing around title

Advanced Customization Techniques

Detecting Scroll State for Dynamic Content

For advanced use cases, you may need to change app bar content based on its scroll state. The NotificationListener widget can monitor scroll notifications to track the app bar's position:

NotificationListener<ScrollNotification>(
 onNotification: (scrollNotification) {
 if (scrollNotification is ScrollUpdateNotification) {
 final pixels = scrollNotification.metrics.pixels;
 // Update UI based on scroll position
 }
 return false;
 },
 child: CustomScrollView(
 slivers: [
 SliverAppBar(
 expandedHeight: 250.0,
 pinned: true,
 // App bar configuration
 ),
 ],
 ),
)

Using SliverAppBar.large and SliverAppBar.medium

Flutter provides predefined style constructors for common use cases. The SliverAppBar.large constructor creates an app bar with Material Design 3's large collapsed toolbar height, while SliverAppBar.medium uses a medium height for standard content sections:

// Large app bar - for prominent sections
SliverAppBar.large(
 title: Text('Gallery'),
 leading: IconButton(
 icon: Icon(Icons.arrow_back),
 onPressed: () {},
 ),
),

// Medium app bar - for standard sections
SliverAppBar.medium(
 title: Text('Article Title'),
),

Implementing Stretch Behavior

The stretch property enables the app bar to stretch beyond its expanded height when overscrolling:

SliverAppBar(
 expandedHeight: 200.0,
 stretch: true,
 stretchTriggerOffset: 100.0,
 onStretchTrigger: () async {
 // Load fresh content when stretched
 await refreshContent();
 },
 flexibleSpace: FlexibleSpaceBar(
 stretchModes: [StretchMode.zoomBackground],
 background: Image.network(url, fit: BoxFit.cover),
 ),
),

Adding Actions and Icons

The actions property accepts a list of widgets displayed after the title in the app bar. These are typically IconButton widgets that provide access to app features or navigation actions. The leading property places a widget before the title, commonly used for menu buttons or back navigation.

SliverAppBar(
 expandedHeight: 180.0,
 floating: true,
 pinned: true,
 leading: IconButton(
 icon: Icon(Icons.menu),
 onPressed: () {},
 ),
 actions: <Widget>[
 IconButton(
 icon: Icon(Icons.search),
 onPressed: () {},
 ),
 IconButton(
 icon: Icon(Icons.settings),
 onPressed: () {},
 ),
 ],
),

For developers working on cross-platform applications, understanding these Flutter-specific UI patterns is essential. The introduction to using Dart in Flutter provides foundational knowledge that complements these advanced UI techniques.

Best Practices for SliverAppBar Implementation

Performance Considerations

When implementing SliverAppBar with background images, always use appropriate image caching and loading strategies to prevent jank during scrolling. Use FadeInImage for smooth transitions while images load, and consider the cached_network_image package for network images to prevent repeated downloads during scroll animations.

Accessibility and Platform Conventions

Ensure that your SliverAppBar implementation respects platform-specific conventions. On iOS, users typically expect the navigation bar to appear with a blur effect behind the content, while Android users expect more pronounced elevation and shadow. The backgroundColor, elevation, and shadowColor properties should be configured to match each platform's design guidelines while maintaining a consistent look across platforms.

Content Strategy for Expanded State

The expanded content of a SliverAppBar is valuable real estate that should be used strategically. Consider displaying promotional content, user profile information, category headers, or search functionality in the expanded state. Avoid overcrowding the expanded area with too much information--focus on one or two key elements that provide immediate value to users when they first encounter the content.

Testing Across Screen Sizes

SliverAppBar behavior should be tested across various screen sizes and orientations. Use MediaQuery to ensure appropriate proportions on different devices. Consider using kToolbarHeight and kTextHeight constants from Flutter's foundation library to maintain consistent proportions with other app bars in your application.

Common Issues and Solutions

Overlapping Content: When the SliverAppBar collapses, its content may overlap with the scrollable content below. This is typically resolved by ensuring that your scrollable content starts at the correct position or by using a SliverToBoxAdapter to create appropriate spacing.

Scroll Physics Inconsistency: The scrolling behavior of SliverAppBar may not match the rest of your app if CustomScrollView uses different ScrollPhysics than surrounding scrollable widgets. Ensure consistent physics configuration across all scrollable widgets in your application.

Performance Degradation with Complex Backgrounds: Complex background widgets in the FlexibleSpaceBar can cause scrolling performance issues. Use simple, optimized backgrounds for the expanded state, or consider using RepaintBoundary to isolate expensive rendering operations.


SliverAppBar is an essential tool for creating modern, engaging mobile applications in Flutter. By understanding its core properties--expandedHeight, collapsedHeight, flexibleSpace, floating, pinned, and snap--you can implement sophisticated scrolling behaviors that rival native mobile applications. The widget's integration with CustomScrollView provides flexibility for combining app bars with lists, grids, and other scrollable content. Start with basic implementations using the provided code examples, then progressively add advanced features like dynamic content switching, stretch behaviors, and custom animations to create polished user experiences.

For teams building cross-platform mobile applications, mastering SliverAppBar is just one piece of creating exceptional user interfaces. Consider combining this with our React Native vs Flutter comparison to choose the right framework for your next project, or explore user acquisition strategies to ensure your well-designed app reaches its target audience. To dive deeper into Flutter's widget ecosystem, learn about flutter slider widgets for more interactive UI components.

Frequently Asked Questions

Ready to Build Professional Mobile Apps?

Our team specializes in creating polished, high-performance mobile applications using Flutter and modern development practices.