import 'dart:async'; import 'package:flutter/material.dart'; import 'package:mobdr/main.dart'; import 'package:mobdr/ui/account/tab_account.dart'; import 'package:mobdr/ui/home/tab_home.dart'; import 'package:mobdr/ui/mp4/tab_mp4.dart'; import 'package:mobdr/ui/sync/tab_sync.dart'; import 'package:mobdr/config/constant.dart'; import 'package:mobdr/events.dart'; class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State with SingleTickerProviderStateMixin { late PageController _pageController; late StreamSubscription subUrlEvent; int _currentIndex = 0; List _contentPages = []; @override void initState() { _contentPages = [ TabHomePage(), TabSyncPage(), TabMP4Page(), TabAccountPage(), ]; // set initial pages for navigation to home page _pageController = PageController(initialPage: 0); _pageController.addListener(_handleTabSelection); // Listen particular event subUrlEvent = eventBus.on().listen((e) { setState(() { _currentIndex = 2; _pageController.jumpToPage(_currentIndex); FocusScope.of(context).unfocus(); }); }); super.initState(); } void _handleTabSelection() { /* setState(() { }); */ } @override void dispose() { subUrlEvent.cancel(); _pageController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: PageView( controller: _pageController, physics: NeverScrollableScrollPhysics(), children: _contentPages.map((Widget content) { return content; }).toList(), ), bottomNavigationBar: BottomNavigationBar( type: BottomNavigationBarType.fixed, currentIndex: _currentIndex, onTap: (value) { _currentIndex = value; _pageController.jumpToPage(value); // this unfocus is to prevent show keyboard in the wishlist page when focus on search text field FocusScope.of(context).unfocus(); }, selectedFontSize: 8, unselectedFontSize: 8, iconSize: 28, selectedLabelStyle: TextStyle( color: _currentIndex == 1 ? ASSENT_COLOR : PRIMARY_COLOR, fontWeight: FontWeight.bold), unselectedLabelStyle: TextStyle(color: CHARCOAL, fontWeight: FontWeight.bold), selectedItemColor: _currentIndex == 1 ? ASSENT_COLOR : PRIMARY_COLOR, unselectedItemColor: CHARCOAL, items: [ BottomNavigationBarItem( label: 'Home', icon: Icon(Icons.home, color: _currentIndex == 0 ? PRIMARY_COLOR : CHARCOAL)), BottomNavigationBarItem( label: 'Synchro', icon: Icon(Icons.sync, color: _currentIndex == 1 ? ASSENT_COLOR : CHARCOAL)), BottomNavigationBarItem( label: 'MP4', icon: Icon(Icons.web, color: _currentIndex == 2 ? PRIMARY_COLOR : CHARCOAL)), BottomNavigationBarItem( label: 'Account', icon: Icon(Icons.person_outline, color: _currentIndex == 3 ? PRIMARY_COLOR : CHARCOAL)), ], ), ); } }