diff --git a/android/gradle.properties b/android/gradle.properties index e7bbd478806d6d3d5c8d27157b30df069180a8b6..84e1e4153b337375b48ca3b51c39d9d8cbca5ba9 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ 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 diff --git a/lib/config/menu.dart b/lib/config/menu.dart new file mode 100644 index 0000000000000000000000000000000000000000..45c069261a3b14933f421d2d14a486fcc0a0c904 --- /dev/null +++ b/lib/config/menu.dart @@ -0,0 +1,78 @@ +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; +} diff --git a/lib/cubit/bottom_nav_cubit.dart b/lib/cubit/bottom_nav_cubit.dart index a02cc94d81d823edb09522d02406763341dc12f2..76d5c375c47ca2e1967313ab10078dedbcdaabdc 100644 --- a/lib/cubit/bottom_nav_cubit.dart +++ b/lib/cubit/bottom_nav_cubit.dart @@ -1,10 +1,10 @@ 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); diff --git a/lib/ui/skeleton.dart b/lib/ui/skeleton.dart index 044b573f6823cfb4bb0f8adb1edc342349a4c134..e8636195bb2a0a1caf3c6e098aad264f0fe3f1e6 100644 --- a/lib/ui/skeleton.dart +++ b/lib/ui/skeleton.dart @@ -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( diff --git a/lib/ui/widgets/bottom_nav_bar.dart b/lib/ui/widgets/bottom_nav_bar.dart index 2013e651e39935e8c9b6c3197eb18773d1d3d6f1..f5b356e88c0d350dc1c7b1612d79b76e99148a4a 100644 --- a/lib/ui/widgets/bottom_nav_bar.dart +++ b/lib/ui/widgets/bottom_nav_bar.dart @@ -1,9 +1,8 @@ -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(), ); }, ), diff --git a/pubspec.yaml b/pubspec.yaml index 2e0ad1ddb9fb0b379c371fd73328014ec8aad36b..96d198266d95be0ff478378d74ae4326b349f4a3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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'