177 lines
4.8 KiB
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);
|
|
}
|
|
}
|