import 'package:flutter/material.dart'; import '../core/theme/app_theme.dart'; class PageScaffold extends StatefulWidget { final String title; final List tabs; final List tabViews; final int initialTab; final ValueChanged? onTabChanged; const PageScaffold({ super.key, required this.title, required this.tabs, required this.tabViews, this.initialTab = 0, this.onTabChanged, }); @override State createState() => _PageScaffoldState(); } class _PageScaffoldState extends State with SingleTickerProviderStateMixin { late TabController _controller; @override void initState() { super.initState(); _controller = TabController( length: widget.tabs.length, initialIndex: widget.initialTab.clamp(0, widget.tabs.length - 1), vsync: this, ); if (widget.onTabChanged != null) { _controller.addListener(() { if (!_controller.indexIsChanging) { widget.onTabChanged!(_controller.index); } }); } } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( color: AppTheme.surface, child: TabBar( controller: _controller, isScrollable: true, tabAlignment: TabAlignment.start, labelColor: AppTheme.primary, unselectedLabelColor: AppTheme.textSecondary, indicatorColor: AppTheme.primary, indicatorWeight: 2, labelStyle: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500), tabs: widget.tabs, ), ), const Divider(height: 1), Expanded( child: TabBarView( controller: _controller, children: widget.tabViews, ), ), ], ); } }