Skip to content
Snippets Groups Projects
Commit 22367c66 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Improve navigation management

parent e83d272b
No related branches found
No related tags found
1 merge request!54Resolve "Improve navigation management"
Pipeline #4947 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=1.0.44
app.versionCode=45
app.versionName=1.0.45
app.versionCode=46
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:unicons/unicons.dart';
import 'package:random/ui/screens/about_page.dart';
import 'package:random/ui/screens/api_page.dart';
import 'package:random/ui/screens/camera_page.dart';
import 'package:random/ui/screens/demo_page.dart';
import 'package:random/ui/screens/game_page.dart';
import 'package:random/ui/screens/graph_page.dart';
import 'package:random/ui/screens/settings_page.dart';
class MenuItem {
final String code;
final Icon icon;
final Widget page;
const MenuItem({
required this.code,
required this.icon,
required this.page,
});
}
class Menu {
static List<MenuItem> items = [
MenuItem(
code: 'bottom_nav_sample',
icon: const Icon(UniconsLine.image),
page: DemoPage(),
),
MenuItem(
code: 'bottom_nav_api',
icon: const Icon(UniconsLine.globe),
page: ApiPage(),
),
MenuItem(
code: 'bottom_nav_camera',
icon: const Icon(UniconsLine.camera),
page: CameraPage(),
),
MenuItem(
code: 'bottom_nav_chart',
icon: const Icon(UniconsLine.pen),
page: GraphPage(),
),
MenuItem(
code: 'bottom_nav_game',
icon: const Icon(UniconsLine.star),
page: GamePage(),
),
MenuItem(
code: 'bottom_nav_settings',
icon: const Icon(UniconsLine.setting),
page: SettingsPage(),
),
MenuItem(
code: 'bottom_nav_about',
icon: const Icon(UniconsLine.info_circle),
page: AboutPage(),
),
];
static Widget getPageWidget(int pageIndex) {
return Menu.items.elementAt(pageIndex).page;
}
static List<BottomNavigationBarItem> getMenuItems() {
return Menu.items
.map((MenuItem item) => BottomNavigationBarItem(
icon: item.icon,
label: tr(item.code),
))
.toList();
}
static int itemsCount = Menu.items.length;
}
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:random/config/menu.dart';
class BottomNavCubit extends HydratedCubit<int> {
BottomNavCubit() : super(0);
int pagesCount = 6;
void updateIndex(int index) {
if (isIndexAllowed(index)) {
emit(index);
......@@ -14,7 +14,7 @@ class BottomNavCubit extends HydratedCubit<int> {
}
bool isIndexAllowed(int index) {
return (index >= 0) && (index < pagesCount);
return (index >= 0) && (index < Menu.itemsCount);
}
void goToHomePage() => emit(0);
......
......@@ -2,14 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_swipe/flutter_swipe.dart';
import 'package:random/config/menu.dart';
import 'package:random/cubit/bottom_nav_cubit.dart';
import 'package:random/ui/screens/about_page.dart';
import 'package:random/ui/screens/api_page.dart';
import 'package:random/ui/screens/camera_page.dart';
import 'package:random/ui/screens/demo_page.dart';
import 'package:random/ui/screens/game_page.dart';
import 'package:random/ui/screens/graph_page.dart';
import 'package:random/ui/screens/settings_page.dart';
import 'package:random/ui/widgets/app_bar.dart';
import 'package:random/ui/widgets/bottom_nav_bar.dart';
......@@ -23,23 +17,13 @@ class SkeletonScreen extends StatefulWidget {
class _SkeletonScreenState extends State<SkeletonScreen> {
@override
Widget build(BuildContext context) {
const List<Widget> pageNavigation = <Widget>[
DemoPage(),
ApiPage(),
CameraPage(),
GraphPage(),
GamePage(),
SettingsPage(),
AboutPage(),
];
return Scaffold(
extendBodyBehindAppBar: false,
appBar: StandardAppBar(),
body: Swiper(
itemCount: BlocProvider.of<BottomNavCubit>(context).pagesCount,
itemCount: Menu.itemsCount,
itemBuilder: (BuildContext context, int index) {
return pageNavigation.elementAt(index);
return Menu.getPageWidget(index);
},
pagination: SwiperPagination(
builder: SwiperCustomPagination(
......
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_swipe/flutter_swipe.dart';
import 'package:unicons/unicons.dart';
import 'package:random/config/menu.dart';
import 'package:random/cubit/bottom_nav_cubit.dart';
class BottomNavBar extends StatelessWidget {
......@@ -41,36 +40,7 @@ class BottomNavBar extends StatelessWidget {
backgroundColor: Colors.transparent,
selectedItemColor: Theme.of(context).colorScheme.primary,
unselectedItemColor: Theme.of(context).textTheme.bodySmall!.color,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: const Icon(UniconsLine.image),
label: tr('bottom_nav_sample'),
),
BottomNavigationBarItem(
icon: const Icon(UniconsLine.globe),
label: tr('bottom_nav_api'),
),
BottomNavigationBarItem(
icon: const Icon(UniconsLine.camera),
label: tr('bottom_nav_camera'),
),
BottomNavigationBarItem(
icon: const Icon(UniconsLine.pen),
label: tr('bottom_nav_chart'),
),
BottomNavigationBarItem(
icon: const Icon(UniconsLine.star),
label: tr('bottom_nav_game'),
),
BottomNavigationBarItem(
icon: const Icon(UniconsLine.setting),
label: tr('bottom_nav_settings'),
),
BottomNavigationBarItem(
icon: const Icon(UniconsLine.info_circle),
label: tr('bottom_nav_about'),
),
],
items: Menu.getMenuItems(),
);
},
),
......
......@@ -3,7 +3,7 @@ description: A random application, for testing purpose only.
publish_to: 'none'
version: 1.0.44+45
version: 1.0.45+46
environment:
sdk: '^3.0.0'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment