relatica/lib/controls/app_bottom_nav_bar.dart

127 wiersze
3.1 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import '../routes.dart';
enum NavBarButtons {
timelines,
notifications,
messages,
contacts,
profile,
}
class AppBottomNavBar extends StatelessWidget {
final NavBarButtons currentButton;
const AppBottomNavBar({super.key, required this.currentButton});
@override
Widget build(BuildContext context) {
return BottomNavigationBar(
onTap: (index) {
final newButton = _indexToButton(index);
if (newButton == currentButton) {
print('same button do nothing');
return;
}
switch (newButton) {
case NavBarButtons.timelines:
Navigator.of(context).popUntil((route) {
return route.settings.name == ScreenPaths.timelines;
});
break;
case NavBarButtons.notifications:
context.pushNamed(ScreenPaths.notifications);
break;
case NavBarButtons.messages:
// TODO: Handle this case.
break;
case NavBarButtons.contacts:
// TODO: Handle this case.
break;
case NavBarButtons.profile:
context.pushNamed(ScreenPaths.profile);
break;
}
},
type: BottomNavigationBarType.fixed,
selectedItemColor: Colors.black,
unselectedItemColor: Colors.black54,
currentIndex: _buttonToIndex(currentButton),
items: _menuItems,
);
}
int _buttonToIndex(NavBarButtons button) {
switch (button) {
case NavBarButtons.timelines:
return 0;
case NavBarButtons.notifications:
return 1;
case NavBarButtons.messages:
return 2;
case NavBarButtons.contacts:
return 3;
case NavBarButtons.profile:
return 4;
}
}
NavBarButtons _indexToButton(int index) {
if (index == 0) {
return NavBarButtons.timelines;
}
if (index == 1) {
return NavBarButtons.notifications;
}
if (index == 2) {
return NavBarButtons.messages;
}
if (index == 3) {
return NavBarButtons.contacts;
}
if (index == 4) {
return NavBarButtons.profile;
}
throw ArgumentError('$index has no button type');
}
List<BottomNavigationBarItem> get _menuItems {
return const [
BottomNavigationBarItem(
label: 'Timelines',
icon: Icon(Icons.home_outlined),
activeIcon: Icon(Icons.home_filled),
),
BottomNavigationBarItem(
label: 'Notifications',
icon: Icon(Icons.notifications_none_outlined),
activeIcon: Icon(Icons.notifications),
),
BottomNavigationBarItem(
label: 'Messages',
icon: Icon(Icons.messenger_outline),
activeIcon: Icon(Icons.messenger),
),
BottomNavigationBarItem(
label: 'Contacts',
icon: Icon(Icons.people_outline),
activeIcon: Icon(Icons.people_sharp),
),
BottomNavigationBarItem(
label: 'Profile',
icon: Icon(Icons.person_outline),
activeIcon: Icon(Icons.person),
),
];
}
}