O componente da gaveta de navegação é um menu deslizante que permite que os usuários naveguem por várias seções do app. Os usuários podem ativar esse recurso deslizando para o lado ou tocando em um ícone de menu.
Considere estes três casos de uso para implementar uma gaveta de navegação:
- Organização do conteúdo: permite que os usuários alternem entre diferentes categorias, como em apps de notícias ou blogs.
- Gerenciamento da conta:forneça links rápidos para o perfil e as configurações da conta. seções em apps com contas de usuário.
- Descoberta de recursos: organize vários recursos e configurações em uma única para facilitar a descoberta e o acesso de usuários em apps complexos.
No Material Design, há dois tipos de gavetas de navegação:
- Padrão:compartilhe o espaço em uma tela com outros conteúdos.
- Modal: aparece sobre outros conteúdos em uma tela.
Exemplo
Você pode usar o elemento combinável ModalNavigationDrawer
para implementar um
gaveta de navegação.
Use o slot drawerContent
para fornecer um ModalDrawerSheet
e fornecer
o conteúdo da gaveta, como no exemplo abaixo:
ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { Text("Drawer title", modifier = Modifier.padding(16.dp)) HorizontalDivider() NavigationDrawerItem( label = { Text(text = "Drawer Item") }, selected = false, onClick = { /*TODO*/ } ) // ...other drawer items } } ) { // Screen content }
ModalNavigationDrawer
aceita vários outros parâmetros de gaveta. Para
exemplo, é possível ativar ou não a resposta da gaveta às ações de arrastar com o
parâmetro gesturesEnabled
como no exemplo a seguir:
ModalNavigationDrawer( drawerContent = { ModalDrawerSheet { // Drawer contents } }, gesturesEnabled = false ) { // Screen content }
Controlar o comportamento
Para controlar como a gaveta abre e fecha, use DrawerState
. Você deve
transmitir um DrawerState
para a ModalNavigationDrawer
usando a função drawerState
;
.
DrawerState
fornece acesso às funções open
e close
, além
de propriedades relacionadas ao estado atual da gaveta. Essas funções de suspensão
exigem um CoroutineScope
, que pode ser instanciado usando
rememberCoroutineScope
. Você também pode chamar as funções de suspensão
resposta a eventos de interface.
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val scope = rememberCoroutineScope() ModalNavigationDrawer( drawerState = drawerState, drawerContent = { ModalDrawerSheet { /* Drawer content */ } }, ) { Scaffold( floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show drawer") }, icon = { Icon(Icons.Filled.Add, contentDescription = "") }, onClick = { scope.launch { drawerState.apply { if (isClosed) open() else close() } } } ) } ) { contentPadding -> // Screen content } }