Un widget de Material Design que muestra una fila horizontal de pestañas.
Normalmente se crea como la parte AppBar.bottom de una AppBar y junto con un TabBarView.
Si no se proporciona un TabController, entonces se debe proporcionar un ancestro DefaultTabController en su lugar.
El controlador de pestañas TabController.length debe ser igual a la longitud de la lista de pestañas.
Te mostraremos un ejemplo sencillo para la creación y manejo de TabBars, primeramente debemos agregar a nuestro Widget que extiende de State with SingleTickerProviderStateMixin justo antes de la llave de apertura.
Enseguida declaramos una variable de tipo TabController: TabController tabController; la cual vamos a inicializar en el initState de nuestro widget.
TabController tabController; @override void initState() { tabController = TabController(length: 2, initialIndex: 0, vsync: this); super.initState(); }
En nuestro Scaffold → AppBar → bottom agregamos un TabBar
TabBar( controller: tabController, tabs: <Widget>[ Tab( icon: Icon(Icons.alarm), ), Tab( icon: Icon(Icons.favorite), ) ], )
Como último paso, creamos un TabBarView en nuestro body del Scaffold, los parámetros que llevará son:
- controller → nuestra variable tabController
- children → List<widget>[ WIDGETS que serán las «vistas» ]
TabBarView( controller: tabController, children: <Widget>[ Icon(Icons.alarm), Icon(Icons.favorite) ], )
Nuestro código del main.dart completo de este ejemplo:
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Titulo de AppBar'), debugShowCheckedModeBanner: false, ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin { TabController tabController; @override void initState() { tabController = TabController(length: 2, initialIndex: 0, vsync: this); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Mi app Bar'), bottom: TabBar( controller: tabController, tabs: <Widget>[ Tab( icon: Icon(Icons.alarm), ), Tab( icon: Icon(Icons.favorite), ) ], ), ), body: TabBarView( controller: tabController, children: <Widget>[ Icon(Icons.alarm), Icon(Icons.favorite) ], ), // This trailing comma makes auto-formatting nicer for build methods. ); } }
Espero que te sea de utilidad, hasta la próxima! 😀