mobdr/lib/ui/home.dart

117 lines
3.4 KiB
Dart

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/synchronization.dart';
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/events.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage>
with SingleTickerProviderStateMixin {
late PageController _pageController;
late StreamSubscription subUrlEvent;
int _currentIndex = 0;
List<Widget> _contentPages = [];
@override
void initState() {
_contentPages = <Widget>[
TabHomePage(),
SynchronizationPage(),
TabMP4Page(),
TabAccountPage(),
];
// set initial pages for navigation to home page
_pageController = PageController(initialPage: 0);
_pageController.addListener(_handleTabSelection);
// Listen particular event
subUrlEvent = eventBus.on<UrlEvent>().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)),
],
),
);
}
}