contained_tab_bar_view_with_custom_page_navigator

Creator: coderz1093

Last updated:

0 purchases

contained_tab_bar_view_with_custom_page_navigator Image
contained_tab_bar_view_with_custom_page_navigator Images

Languages

Categories

Add to Cart

Description:

contained tab bar view with custom page navigator

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".


Usage

Basic Examples
Intermediate

TabBarProperties
TabBarViewProperties
TabBarPosition
TabBarAlignment
Intermediate Examples


Advanced

Change tab from another Widget
Advanced Examples




Contributing

Usage #
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.
// Example 1
import 'package:contained_tab_bar_view/contained_tab_bar_view.dart';

...

Container(
padding: const EdgeInsets.all(8.0),
color: Colors.blue,
width: 200,
height: 300,
child: ContainedTabBarView(
tabs: [
Text('First'),
Text('Second'),
],
views: [
Container(color: Colors.red),
Container(color: Colors.green)
],
onChange: (index) => print(index),
),
),
copied to clipboard





Intermediate #
TabBarProperties #
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


indicatorColor
Color
/
see TabBar documentation


indicatorPadding
EdgeInsetsGeometry
const EdgeInsets.all(0.0)
see TabBar documentation


indicatorSize
TabBarIndicatorSize
/
see TabBar documentation


indicatorWeight
double
2.0
see TabBar documentation


isScrollable
bool
false
see TabBar documentation


labelColor
Color
/
see TabBar documentation


labelPadding
EdgeInsetsGeometry
const EdgeInsets.all(0.0)
see TabBar documentation


labelStyle
TextStyle
/
see TabBar documentation


unselectedLabelColor
Color
/
see TabBar documentation


unselectedLabelStyle
TextStyle
/
see TabBar documentation



TabBarViewProperties #
All the properties that can be set for a TabBarView are accessible for setting via tabBarViewProperties.



Property
Type
Default value
Description




dragStartBehavior
DragStartBehavior
DragStartBehavior.start
See TabBarView documentation


physics
ScrollPhysics
(platform specific)
See TabBarView documentation



For example, if you want to disable swiping behavior on the TabBarView, set the option like this:
ContainedTabBarView(
...
tabBarViewProperties: TabBarViewProperties(
physics: NeverScrollableScrollPhysics(),
),
)
copied to clipboard
TabBarPosition #
enum TabBarPosition { top, bottom, left, right }
copied to clipboard
TabBarAlignment #
enum TabBarAlignment { start, center, end }
copied to clipboard
Intermediate Examples #
// Example 5
ContainedTabBarView(
tabs: [
Text('First'),
Text('Second'),
],
tabBarProperties: TabBarProperties(
width: 200,
height: 32,
background: Container(
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.all(Radius.circular(8.0)),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.4),
spreadRadius: 0.5,
blurRadius: 2,
offset: Offset(1, -1),
),
],
),
),
position: TabBarPosition.bottom,
alignment: TabBarAlignment.end,
indicatorColor: Colors.transparent,
labelColor: Colors.white,
unselectedLabelColor: Colors.grey[400],
),
views: [
Container(color: Colors.red),
Container(color: Colors.green),
],
)
copied to clipboard





Advanced #
Change tab from another Widget #
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().
// Example 7
class Example7 extends StatelessWidget {
@override
Widget build(BuildContext context) {
GlobalKey<ContainedTabBarViewState> _key = GlobalKey();
ContainedTabBarView containedTabBarView = ContainedTabBarView(
key: _key,
tabs: [
Text('First'),
Text('Second'),
],
views: [
Container(color: Colors.red),
Container(color: Colors.green),
],
);

return Scaffold(
appBar: AppBar(
title: Text('Example 7'),
),
body: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () => _key.currentState?.previous(),
child: Icon(Icons.arrow_back_ios),
),
Center(
child: Container(
padding: const EdgeInsets.all(8.0),
color: Colors.blue,
width: 200,
height: 300,
child: containedTabBarView,
),
),
ElevatedButton(
onPressed: () => _key.currentState?.next(),
child: Icon(Icons.arrow_forward_ios),
),
],
),
);
}
}
copied to clipboard
Advanced Examples #





Contributing #
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.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.