mobdr/lib/ui/home.dart

177 lines
4.8 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/tab_synchro.dart';
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/events.dart';
import 'package:mobdr/service/plausible.dart';
import 'package:mobdr/service/logger_util.dart';
import 'package:mobdr/cubit/language/app_localizations.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage>
with SingleTickerProviderStateMixin {
late PageController _pageController;
late StreamSubscription subUrlEvent;
late StreamSubscription subSynchronizationEvent;
bool _isSyncing = false;
int _currentIndex = 0;
List<Widget> _contentPages = [];
@override
void initState() {
_contentPages = <Widget>[
TabHomePage(navigateToTab: navigateToTab),
SynchronizationPage(),
TabMP4Page(),
TabAccountPage(),
];
// set initial pages for navigation to home page
_pageController = PageController(initialPage: 0);
_pageController.addListener(_handleTabSelection);
// Listen Url event
subUrlEvent = eventBus.on<UrlEvent>().listen((e) {
setState(() {
_currentIndex = 2;
_pageController.jumpToPage(_currentIndex);
FocusScope.of(context).unfocus();
});
});
// Listen Synchronization Event
subSynchronizationEvent = eventBus.on<SynchronizationEvent>().listen((e) {
_isSyncing = e.isRunning;
});
// check if plausible is up and running
doAsyncPlausibleCheck().then((_) {
PlausibleUtil.addEventAsync(name: 'pageview', page: 'tab_home');
});
super.initState();
}
Future<void> doAsyncPlausibleCheck() async {
await PlausibleUtil.checkPlausibleUp();
}
void _handleTabSelection() {
/*
setState(() {
});
*/
}
void navigateToTab(int tabIndex) {
setState(() {
_currentIndex = tabIndex;
_pageController.jumpToPage(tabIndex);
FocusScope.of(context).unfocus();
});
}
@override
void dispose() {
subUrlEvent.cancel();
subSynchronizationEvent.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) {
if (!_isSyncing) {
setState(() {
_currentIndex = value;
_pageController.jumpToPage(value);
FocusScope.of(context).unfocus();
});
// analytics
_trackPageView(value);
}
},
selectedFontSize: 8,
unselectedFontSize: 8,
iconSize: 28,
selectedItemColor:
Colors.blue, // Couleur de l'icône de l'onglet sélectionné
unselectedItemColor:
CHARCOAL, // Couleur de l'icône des onglets non sélectionnés
selectedLabelStyle: TextStyle(
color: Colors.blue, // Couleur du texte de l'onglet sélectionné
fontWeight: FontWeight.bold,
),
unselectedLabelStyle: TextStyle(
color: CHARCOAL, // Couleur du texte des onglets non sélectionnés
fontWeight: FontWeight.bold,
),
items: [
BottomNavigationBarItem(
label: 'Home',
icon: Icon(Icons.home),
),
BottomNavigationBarItem(
label: 'Synchro',
icon: Icon(Icons.sync),
),
BottomNavigationBarItem(
label: 'MP4',
icon: Icon(Icons.web),
),
BottomNavigationBarItem(
label: AppLocalizations.of(context)!.translate('i18n_menu_account'),
icon: Icon(Icons.person_outline),
),
],
),
);
}
void _trackPageView(int index) {
String page = '';
switch (index) {
case 0:
page = 'tab_home';
break;
case 1:
page = 'tab_synchro';
break;
case 2:
page = 'tab_mp4';
break;
case 3:
page = 'tab_account';
break;
}
LoggerUtil.dblog('LOG', 'MOBDR', 'Page : ${page}', 0);
PlausibleUtil.addEventAsync(name: 'pageview', page: page);
}
}