TabBar y TabBarView


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.
    );
  }
}
Resultado del ejemplo anterior

Espero que te sea de utilidad, hasta la próxima! 😀


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *