Flutter: TabBar ve TabBarView Kullanımı
personAhmet Balaman
calendar_today
FlutterTabBarTabsNavigationWidgetUI
TabBar ve TabBarView kullanarak aynı ekranda birden fazla sayfa gösterebiliriz. Tablara tıklayarak veya parmak hareketi ile sağa-sola kaydırarak sayfalar arasında geçiş yapabiliriz.
Canlı Demo
Aşağıdaki interaktif örnekte bu widget'ı deneyebilirsiniz:
💡 Eğer yukarıdaki örnek açılmazsa, DartPad linkine tıklayarak yeni sekmede çalıştırabilirsiniz.
Temel Kullanım
TabBar kullanmak için TabController gereklidir:
class MyPage extends StatefulWidget {
@override
State<MyPage> createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> with SingleTickerProviderStateMixin {
late TabController _tabController;
@override
void initState() {
super.initState();
_tabController = TabController(length: 3, vsync: this);
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Tabs'),
bottom: TabBar(
controller: _tabController,
tabs: [
Tab(text: 'Tab 1'),
Tab(text: 'Tab 2'),
Tab(text: 'Tab 3'),
],
),
),
body: TabBarView(
controller: _tabController,
children: [
Center(child: Text('Sayfa 1')),
Center(child: Text('Sayfa 2')),
Center(child: Text('Sayfa 3')),
],
),
);
}
}DefaultTabController ile Basit Kullanım
DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
Tab(icon: Icon(Icons.home)),
Tab(icon: Icon(Icons.search)),
Tab(icon: Icon(Icons.person)),
],
),
),
body: TabBarView(
children: [
HomeTab(),
SearchTab(),
ProfileTab(),
],
),
),
)TabBar Özellikleri
| Özellik | Açıklama |
|---|---|
tabs |
Tab widget listesi |
controller |
TabController |
indicatorColor |
Alt çizgi rengi |
indicatorWeight |
Alt çizgi kalınlığı |
labelColor |
Seçili tab rengi |
unselectedLabelColor |
Seçili olmayan tab rengi |
isScrollable |
Kaydırılabilir tabs |
İkonlu ve Yazılı Tab
Tab(
icon: Icon(Icons.home),
text: 'Ana Sayfa',
)
// Sadece ikon
Tab(icon: Icon(Icons.search))
// Sadece yazı
Tab(text: 'Profil')Programatik Tab Değiştirme
// Belirli bir tab'a git
_tabController.animateTo(2);
// Mevcut index'i al
int currentIndex = _tabController.index;
// Tab değişikliğini dinle
_tabController.addListener(() {
print('Aktif tab: ${_tabController.index}');
});Kaydırılabilir Tabs
Çok sayıda tab olduğunda:
TabBar(
isScrollable: true, // Yatay kaydırma aktif
tabs: [
Tab(text: 'Tab 1'),
Tab(text: 'Tab 2'),
Tab(text: 'Tab 3'),
Tab(text: 'Tab 4'),
Tab(text: 'Tab 5'),
],
)Özet
- TabBar: Tab butonlarını gösterir
- TabBarView: Tab içeriklerini gösterir
- TabController: Tab durumunu yönetir
- SingleTickerProviderStateMixin: Animasyon için gerekli
- DefaultTabController: Basit kullanım için wrapper
Tabs, aynı ekranda birden fazla içerik göstermek için idealdir.