# ThreePaneScaffoldNavigator

# ThreePaneScaffoldNavigator

Artifact:[androidx.compose.material3.adaptive:adaptive-navigation](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive)  
[View Source](https://cs.android.com/search?q=file:androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator.kt+class:androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator)  
Added in[1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.0.0)
Common/AllAndroid/JVM
  - Cmn  

  ```
  @ExperimentalMaterial3AdaptiveApi
  interface ThreePaneScaffoldNavigator<T : Any?>
  ```

*** ** * ** ***

The common interface of the default navigation implementations for different three-pane scaffolds.

In general, we suggest you to use[rememberListDetailPaneScaffoldNavigator](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/package-summary#rememberListDetailPaneScaffoldNavigator(androidx.compose.material3.adaptive.layout.PaneScaffoldDirective,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldAdaptStrategies,kotlin.Boolean,kotlin.collections.List))or[rememberSupportingPaneScaffoldNavigator](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/package-summary#rememberSupportingPaneScaffoldNavigator(androidx.compose.material3.adaptive.layout.PaneScaffoldDirective,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldAdaptStrategies,kotlin.Boolean,kotlin.collections.List))to get remembered default instances of this interface for[ListDetailPaneScaffold](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/package-summary#ListDetailPaneScaffold(androidx.compose.material3.adaptive.layout.PaneScaffoldDirective,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldValue,kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function2,androidx.compose.material3.adaptive.layout.PaneExpansionState))and[SupportingPaneScaffold](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/package-summary#SupportingPaneScaffold(androidx.compose.material3.adaptive.layout.PaneScaffoldDirective,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldValue,kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function2,androidx.compose.material3.adaptive.layout.PaneExpansionState)), respectively. Those default implementations work independently from any navigation frameworks.

If you need to integrate with existing navigation frameworks or implement your own custom navigation logic, usually creating whole new APIs that's tailored for your own solution will be recommended, instead of implementing this interface. But we recommend you refer to the API design and the default implementation to get better understanding and address the intricacies of navigation in an adaptive scenario.  

|                                       Parameters                                       |
|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `<T : `[Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html)`?>` | the type representing the content key/id for a navigation destination. This type must be storable in a Bundle. Used to customize navigation behavior (for example,[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)). If this customization is unneeded, you can pass[Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html). |

## Summary

|                                                            ### Public functions                                                            |
|--------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----|
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                                                        | [canNavigateBack](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#canNavigateBack(androidx.compose.material3.adaptive.navigation.BackNavigationBehavior))`(backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)`)` Returns`true`if there is a previous destination to navigate back to.                                                                                                                                                                                                                                                                                                                                                                                                  | Cmn |
| `suspend `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                                              | [navigateBack](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#navigateBack(androidx.compose.material3.adaptive.navigation.BackNavigationBehavior))`(backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)`)` Navigates to the previous destination, possibly with an animation, and suspends until the animation is complete.                                                                                                                                                                                                                                                                                                                                                            | Cmn |
| `suspend `[Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                                    | [navigateTo](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#navigateTo(androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole,kotlin.Any))`(pane: `[ThreePaneScaffoldRole](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldRole)`, contentKey: T?)` Navigates to a new destination, possibly with an animation, and suspends until the animation is complete.                                                                                                                                                                                                                                                                                                                                                                         | Cmn |
| [ThreePaneScaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldValue) | [peekPreviousScaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#peekPreviousScaffoldValue(androidx.compose.material3.adaptive.navigation.BackNavigationBehavior))`(` ` backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior) `)` Returns the scaffold value associated with the previous destination, assuming there is a previous destination to navigate back to.                                                                                                                                                                                                                                                                                                           | Cmn |
| `suspend `[Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)                                                    | [seekBack](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#seekBack(androidx.compose.material3.adaptive.navigation.BackNavigationBehavior,kotlin.Float))`(` ` backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)`,` ` fraction: @`[FloatRange](https://developer.android.com/reference/kotlin/androidx/annotation/FloatRange)`(from = 0.0, to = 1.0) `[Float](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html) `)` Seeks the[scaffoldState](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldState())transition to the previous destination, as in a predictive back animation. | Cmn |

|                                                                        ### Public properties                                                                         |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----|
| [ThreePaneScaffoldDestinationItem](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldDestinationItem)`<T>?` | [currentDestination](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#currentDestination()) The current destination as tracked by the navigator.                                                                                                                                                                                                                              | Cmn |
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                                                                                  | [isDestinationHistoryAware](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#isDestinationHistoryAware()) Indicates if the navigator should be aware of pane destination history when deciding the result[ThreePaneScaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldValue)by a navigation operation. | Cmn |
| [PaneScaffoldDirective](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/PaneScaffoldDirective)                             | [scaffoldDirective](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldDirective()) The current layout directives that the associated three pane scaffold needs to follow.                                                                                                                                                                                              | Cmn |
| [ThreePaneScaffoldState](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldState)                           | [scaffoldState](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldState()) The current state of the associated three pane scaffold, used to query the transition between layout states.                                                                                                                                                                                | Cmn |
| [ThreePaneScaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldValue)                           | [scaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldValue()) The current layout value of the associated three pane scaffold, which represents unique layout states of the scaffold.                                                                                                                                                                      | Cmn |

## Public functions

### canNavigateBack

Cmn  
Added in[1.2.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.2.0)  

```
fun canNavigateBack(
    backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange
): Boolean
```

Returns`true`if there is a previous destination to navigate back to.

Implementors of this interface should ensure the logic of this function is consistent with[navigateBack](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#navigateBack(androidx.compose.material3.adaptive.navigation.BackNavigationBehavior)).  

|                                                                                                           Parameters                                                                                                            |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)` = BackNavigationBehavior.PopUntilScaffoldValueChange` | the behavior describing which backstack entries may be skipped during the back navigation. See[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior). |

### navigateBack

Cmn  

```
suspend fun navigateBack(
    backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange
): Boolean
```

Navigates to the previous destination, possibly with an animation, and suspends until the animation is complete. Returns`true`if there is a previous destination to navigate back to.

Implementors of this interface should ensure the logic of this function is consistent with[canNavigateBack](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#canNavigateBack(androidx.compose.material3.adaptive.navigation.BackNavigationBehavior)).  

|                                                                                                           Parameters                                                                                                            |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)` = BackNavigationBehavior.PopUntilScaffoldValueChange` | the behavior describing which backstack entries may be skipped during the back navigation. See[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior). |

### navigateTo

Cmn  
Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.1.0)  

```
suspend fun navigateTo(pane: ThreePaneScaffoldRole, contentKey: T? = null): Unit
```

Navigates to a new destination, possibly with an animation, and suspends until the animation is complete. The new destination is supposed to have the highest priority when calculating the new[scaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldValue()).

Implementors of this interface should ensure the new destination pane will be expanded or adapted in a reasonable way so it provides users the sense that the new destination is the pane currently being used.  

|                                                                    Parameters                                                                    |
|--------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------|
| `pane: `[ThreePaneScaffoldRole](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldRole) | the new destination pane.                                               |
| `contentKey: T? = null`                                                                                                                          | the optional key or id representing the content of the new destination. |

### peekPreviousScaffoldValue

Cmn  
Added in[1.2.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.2.0)  

```
fun peekPreviousScaffoldValue(
    backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange
): ThreePaneScaffoldValue
```

Returns the scaffold value associated with the previous destination, assuming there is a previous destination to navigate back to. If not, this is the same as[scaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldValue()).  

|                                                                                                           Parameters                                                                                                            |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)` = BackNavigationBehavior.PopUntilScaffoldValueChange` | the behavior describing which backstack entries may be skipped during the back navigation. See[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior). |

### seekBack

Cmn  

```
suspend fun seekBack(
    backNavigationBehavior: BackNavigationBehavior = BackNavigationBehavior.PopUntilScaffoldValueChange,
    fraction: @FloatRange(from = 0.0, to = 1.0) Float = 1.0f
): Unit
```

Seeks the[scaffoldState](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldState())transition to the previous destination, as in a predictive back animation.

This does not affect the current[scaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#scaffoldValue())or backstack. To do so, call[navigateBack](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/ThreePaneScaffoldNavigator#navigateBack(androidx.compose.material3.adaptive.navigation.BackNavigationBehavior))when the back navigation action is finalized.  

|                                                                                                           Parameters                                                                                                            |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `backNavigationBehavior: `[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior)` = BackNavigationBehavior.PopUntilScaffoldValueChange` | the behavior describing which backstack entries may be skipped during the back navigation. See[BackNavigationBehavior](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/navigation/BackNavigationBehavior). |
| `fraction: @`[FloatRange](https://developer.android.com/reference/kotlin/androidx/annotation/FloatRange)`(from = 0.0, to = 1.0) `[Float](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html)` = 1.0f`       | the progress fraction of the transition of backwards navigation.                                                                                                                                                                              |

## Public properties

### currentDestination

Cmn  
Added in[1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.0.0)  

```
val currentDestination: ThreePaneScaffoldDestinationItem<T>?
```

The current destination as tracked by the navigator.

Implementors of this interface should ensure this value is updated whenever a navigation operation is performed.  

### isDestinationHistoryAware

Cmn  
Added in[1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.0.0)  

```
var isDestinationHistoryAware: Boolean
```

Indicates if the navigator should be aware of pane destination history when deciding the result[ThreePaneScaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/ThreePaneScaffoldValue)by a navigation operation. If the value is`false`, only the current destination will be considered in the scaffold value calculation.  

|                                                                                                                                                                          See also                                                                                                                                                                           |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|
| [calculateThreePaneScaffoldValue](https://developer.android.com/reference/kotlin/androidx/compose/material3/adaptive/layout/package-summary#calculateThreePaneScaffoldValue(kotlin.Int,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldAdaptStrategies,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldDestinationItem,kotlin.Int)) | for more detailed explanation about history awareness. |

### scaffoldDirective

Cmn  
Added in[1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.0.0)  

```
val scaffoldDirective: PaneScaffoldDirective
```

The current layout directives that the associated three pane scaffold needs to follow. It's supposed to be automatically updated when the window configuration changes.  

### scaffoldState

Cmn  
Added in[1.1.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.1.0)  

```
val scaffoldState: ThreePaneScaffoldState
```

The current state of the associated three pane scaffold, used to query the transition between layout states.  

### scaffoldValue

Cmn  
Added in[1.0.0](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive#1.0.0)  

```
val scaffoldValue: ThreePaneScaffoldValue
```

The current layout value of the associated three pane scaffold, which represents unique layout states of the scaffold.