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! 😀