En este ejemplo hago un menú vertical en Flutter usando el lenguaje Dart. El código y el resultado se muestran a continuación:
Para el diseño de la interfaz, se utiliza un Row para dividir la pantalla en dos partes: el menú vertical y el contenido a la derecha. El menú vertical se crea como una ListView que contiene varias opciones (ListTile). El contenido dinámico se muestra en la parte derecha y cambia según la opción seleccionada en el menú.
Creo un método y como ejemplo lo vamos a llamar actualizarContenido(), en el que iremos cambiando el contenido según la opción seleccionada. Actualiza la variable contenido cuando se selecciona una opción en el menú. Se utiliza setState() para indicar a Flutter que debe redibujar la interfaz de usuario con el nuevo contenido.
A continuación dejo el código usado para el ejemplo de menú vertical en Flutter
En la siguiente imagen se observa el resultado.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Menú Vertical Flutter'),
),
body: MenuVertical(),
),
);
}
}
class MenuVertical extends StatefulWidget {
@override
_MenuVerticalState createState() => _MenuVerticalState();
}
class _MenuVerticalState extends State<MenuVertical> {
String contenido = 'Contenido inicial';
void actualizarContenido(String opcionSeleccionada) {
setState(() {
contenido = 'Contenido de $opcionSeleccionada';
});
}
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
width: 200,
color: Colors.blue,
child: ListView(
children: <Widget>[
ListTile(
title: Text('Inicio'),
onTap: () => actualizarContenido('Inicio'),
),
ListTile(
title: Text('Menú Opción 2'),
onTap: () => actualizarContenido('Menú Opción 2'),
),
ListTile(
title: Text('Menú Opción 3'),
onTap: () => actualizarContenido('Menú Opción 3'),
),
ListTile(
title: Text('Menú Opción 4'),
onTap: () => actualizarContenido('Menú Opción 4'),
),
],
),
),
Expanded(
child: Container(
padding: EdgeInsets.all(16),
color: Colors.white,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Menú Vertical Flutter',
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 16),
Text(
contenido,
style: TextStyle(fontSize: 16),
),
],
),
),
),
],
);
}
}
Por último ejecutamos y vemos el resultado.

Espero que les sirva de ayuda y que tengan un feliz día!
