Orientação gerada a partir de informações públicas. Apenas para referência.
ContainedTabBarView é um widget personalizável do Flutter que combina TabController, TabBar e TabBarView em um único componente coerente. Ele simplifica a implementação de interfaces com abas, gerenciando automaticamente o estado e o layout, permitindo que os desenvolvedores se concentrem no design e no conteúdo. O pacote suporta todas as principais plataformas, incluindo Android, iOS, Web, macOS, Windows e Linux, tornando-o ideal para aplicações multiplataforma. Com APIs limpas e intuitivas, ele melhora a legibilidade do código e reduz o boilerplate. É especialmente útil para criar interfaces de navegação intensiva com múltiplas abas.
Casos de uso
Criando navegação com guias em aplicativos móveis e web
Simplificando implementações complexas de interface de guia
Construindo componentes de guia reutilizáveis entre projetos
Implementando layouts dinâmicos de guias
Design de painéis com guias responsivos
Principais recursos
Encapsulamento de widget único do TabController, TabBar e TabBarView
Gerenciamento de estado embutido para guias
Aparência e comportamento personalizáveis
Suporte multiplataforma
Mínimo boilerplate necessário
Suporta adição/remoção dinâmica de guias
Indicado para
Desenvolvedores procurando interfaces de guia simplificadas
Projetos que exigem navegação consistente com tabulação
Aplicações Flutter multiplataforma
Componentes de interface precisando de lógica de guia reutilizável
Equipes priorizando código mantido
Considerações
Pode exigir estilos adicionais para personalizações avançadas
Limitado a padrões de guia padrão sem personalização profunda
Depende dos widgets de guia embutidos do Flutter
Não ideal para comportamentos de guia altamente não padrão
Mais adequado para fluxos de navegação típicos baseados em guias
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
ContainedTabBarView
ContainedTabBarView encapsulates TabController, TabBar and TabBarView into a single, easy to use Widget and lets you customize its appearance without worrying about internal workings of "TabBar ecosystem".
All of the below examples can be found under example, each written as a simple StatelessWidget.
Basic
Basic usage includes putting a ContainedTabBarView into a Container whose constraints it will obey. Putting a ContainedTabBarView directly into a body of a Scaffold will, expectedly, draw it full-screen.
All the properties that can be set for a TabBar are accessible for setting via tabBarProperties. Also, there are many more for the customization of TabBar's appearance. To create your own ("container-based") indicator, you can use ContainerTabIndicator decoration (see examples 4 and 6) which is a part of this package, but also a separate package whose documentation can be found here. Of course, you can use any other tab bar indicator of your liking.
Property
Type
Default value
Description
width
double
/
The width of TabBar. If not set, it's full available width.
height
double
kToolbarHeight
The height of TabBar. The TabBarView takes the available height minus this value.
background
Container
/
Container that is behind the tabs. See example 8.
position
TabBarPosition
TabBarPosition.top
Position of TabBar in respect to it's TabBarView. See example 5.
alignment
TabBarAlignment
TabBarAlignment.center
Alignment of TabBar (if it's width is not full available) within TabBar-TabBarView flex. See example 5.
padding
EdgeInsets
const EdgeInsets.all(0.0)
The TabBars padding. See example 4.
margin
EdgeInsets
const EdgeInsets.all(0.0)
The TabBars margin. See example 8.
indicator
Decoration
/
The decoration for the active tab. You can use ContainerTabIndicator for various customization. See example 4. Also, see TabBar documentation
To control the state, i.e. move to another tab, from outside of ContainedTabBarView create it with a GlobalKey and then use methods exposed from state: animateTo(), next() and previous().
This package is still in early stages. If you notice any bugs, please file an issue. If you are willing to fix or enhance things yourself, you are very welcome to make a pull request.