NavigationView class

A navigation control that provides top-level navigation for your app.

The NavigationView adapts to a variety of screen sizes and supports multiple display modes: left, top, compact, and minimal. It automatically switches between these modes based on the available width when using PaneDisplayMode.auto.

NavigationView Preview

{@tool snippet} This example shows a basic navigation view with left navigation:

int selectedIndex = 0;

NavigationView(
  appBar: NavigationAppBar(
    title: Text('My App'),
  ),
  pane: NavigationPane(
    selected: selectedIndex,
    onChanged: (index) => setState(() => selectedIndex = index),
    items: [
      PaneItem(
        icon: Icon(FluentIcons.home),
        title: Text('Home'),
        body: HomePage(),
      ),
      PaneItem(
        icon: Icon(FluentIcons.settings),
        title: Text('Settings'),
        body: SettingsPage(),
      ),
    ],
  ),
)

{@end-tool}

Display modes

The navigation pane can be displayed in different modes using NavigationPane.displayMode:

Adaptive behavior

When using PaneDisplayMode.auto:

  • Width >= 1008px: Open mode (expanded pane)
  • Width 641-1007px: Compact mode (icons only)
  • Width <= 640px: Minimal mode (hamburger menu)

Router integration

For apps using go_router or similar routers, use paneBodyBuilder to integrate with your routing system:

{@tool snippet}

NavigationView(
  pane: NavigationPane(
    selected: _calculateSelectedIndex(context),
    items: _buildPaneItems(),
  ),
  paneBodyBuilder: (item, body) {
    // Return your router's body widget
    return body ?? const SizedBox.shrink();
  },
)

{@end-tool}

See also:

Inheritance

Constructors

Creates a navigation view.
const

Properties

clipBehavior Clip
Controls how to clip.
final
content Widget?
The content of the pane.
final
contentShape ShapeBorder?
How the body content should be clipped
final
hashCode int
The hash code for this object.
no setterinherited
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
onDisplayModeChanged ValueChanged<PaneDisplayMode>?
Called when the display mode changes.
final
onOpenSearch VoidCallback?
Called when the search button is tapped.
final
pane NavigationPane?
The navigation pane, that can be displayed either on the left, on the top, or above the body.
final
paneBodyBuilder NavigationContentBuilder?
Can be used to override the widget that is built from the PaneItem.body. Only used if pane is provided. If nothing is selected, body will be null.
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
titleBar Widget?
final
transitionBuilder AnimatedSwitcherTransitionBuilder?
The transition builder.
final

Methods

createElement() StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() State<NavigationView>
Creates the mutable state for this widget at a given location in the tree.
override
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object.
inherited
toStringShort() String
A short, textual description of this widget.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited

Static Methods

dataOf(BuildContext context) NavigationViewContext
Get useful info about the current navigation view.
maybeOf(BuildContext context) NavigationViewState?
Gets the closest NavigationViewState ancestor, if any.
of(BuildContext context) NavigationViewState
Gets the current navigation view state.