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

Merge branch '55-improve-navigation-management' into 'master'

Resolve "Improve navigation management"

Closes #55

See merge request !54
parents e83d272b 22367c66
No related branches found
No related tags found
1 merge request!54Resolve "Improve navigation management"
Pipeline #5005 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=1.0.44 app.versionName=1.0.45
app.versionCode=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:hydrated_bloc/hydrated_bloc.dart';
import 'package:random/config/menu.dart';
class BottomNavCubit extends HydratedCubit<int> { class BottomNavCubit extends HydratedCubit<int> {
BottomNavCubit() : super(0); BottomNavCubit() : super(0);
int pagesCount = 6;
void updateIndex(int index) { void updateIndex(int index) {
if (isIndexAllowed(index)) { if (isIndexAllowed(index)) {
emit(index); emit(index);
...@@ -14,7 +14,7 @@ class BottomNavCubit extends HydratedCubit<int> { ...@@ -14,7 +14,7 @@ class BottomNavCubit extends HydratedCubit<int> {
} }
bool isIndexAllowed(int index) { bool isIndexAllowed(int index) {
return (index >= 0) && (index < pagesCount); return (index >= 0) && (index < Menu.itemsCount);
} }
void goToHomePage() => emit(0); void goToHomePage() => emit(0);
......
...@@ -2,14 +2,8 @@ import 'package:flutter/material.dart'; ...@@ -2,14 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_swipe/flutter_swipe.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/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/app_bar.dart';
import 'package:random/ui/widgets/bottom_nav_bar.dart'; import 'package:random/ui/widgets/bottom_nav_bar.dart';
...@@ -23,23 +17,13 @@ class SkeletonScreen extends StatefulWidget { ...@@ -23,23 +17,13 @@ class SkeletonScreen extends StatefulWidget {
class _SkeletonScreenState extends State<SkeletonScreen> { class _SkeletonScreenState extends State<SkeletonScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
const List<Widget> pageNavigation = <Widget>[
DemoPage(),
ApiPage(),
CameraPage(),
GraphPage(),
GamePage(),
SettingsPage(),
AboutPage(),
];
return Scaffold( return Scaffold(
extendBodyBehindAppBar: false, extendBodyBehindAppBar: false,
appBar: StandardAppBar(), appBar: StandardAppBar(),
body: Swiper( body: Swiper(
itemCount: BlocProvider.of<BottomNavCubit>(context).pagesCount, itemCount: Menu.itemsCount,
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return pageNavigation.elementAt(index); return Menu.getPageWidget(index);
}, },
pagination: SwiperPagination( pagination: SwiperPagination(
builder: SwiperCustomPagination( builder: SwiperCustomPagination(
......
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_swipe/flutter_swipe.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'; import 'package:random/cubit/bottom_nav_cubit.dart';
class BottomNavBar extends StatelessWidget { class BottomNavBar extends StatelessWidget {
...@@ -41,36 +40,7 @@ class BottomNavBar extends StatelessWidget { ...@@ -41,36 +40,7 @@ class BottomNavBar extends StatelessWidget {
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
selectedItemColor: Theme.of(context).colorScheme.primary, selectedItemColor: Theme.of(context).colorScheme.primary,
unselectedItemColor: Theme.of(context).textTheme.bodySmall!.color, unselectedItemColor: Theme.of(context).textTheme.bodySmall!.color,
items: <BottomNavigationBarItem>[ items: Menu.getMenuItems(),
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'),
),
],
); );
}, },
), ),
......
...@@ -3,7 +3,7 @@ description: A random application, for testing purpose only. ...@@ -3,7 +3,7 @@ description: A random application, for testing purpose only.
publish_to: 'none' publish_to: 'none'
version: 1.0.44+45 version: 1.0.45+46
environment: environment:
sdk: '^3.0.0' sdk: '^3.0.0'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment