feat : Adding bottomNav

This commit is contained in:
Yaël Perret
2024-10-31 18:45:29 +01:00
parent e722368fa6
commit 48814a90aa
48 changed files with 198 additions and 58 deletions

View File

@@ -4,13 +4,15 @@ import 'package:bahla_front/ui/views/home/home_view.dart';
import 'package:bahla_front/ui/views/startup/startup_view.dart';
import 'package:stacked/stacked_annotations.dart';
import 'package:stacked_services/stacked_services.dart';
import 'package:bahla_front/ui/views/main/main_view.dart';
// @stacked-import
@StackedApp(
routes: [
MaterialRoute(page: HomeView),
MaterialRoute(page: StartupView),
// @stacked-route
MaterialRoute(page: MainView),
// @stacked-route
],
dependencies: [
LazySingleton(classType: BottomSheetService),

View File

@@ -6,20 +6,24 @@
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:bahla_front/ui/views/home/home_view.dart' as _i2;
import 'package:bahla_front/ui/views/main/main_view.dart' as _i4;
import 'package:bahla_front/ui/views/startup/startup_view.dart' as _i3;
import 'package:flutter/material.dart' as _i4;
import 'package:flutter/material.dart' as _i5;
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart' as _i1;
import 'package:stacked_services/stacked_services.dart' as _i5;
import 'package:stacked_services/stacked_services.dart' as _i6;
class Routes {
static const homeView = '/home-view';
static const startupView = '/startup-view';
static const mainView = '/main-view';
static const all = <String>{
homeView,
startupView,
mainView,
};
}
@@ -33,21 +37,31 @@ class StackedRouter extends _i1.RouterBase {
Routes.startupView,
page: _i3.StartupView,
),
_i1.RouteDef(
Routes.mainView,
page: _i4.MainView,
),
];
final _pagesMap = <Type, _i1.StackedRouteFactory>{
_i2.HomeView: (data) {
return _i4.MaterialPageRoute<dynamic>(
return _i5.MaterialPageRoute<dynamic>(
builder: (context) => const _i2.HomeView(),
settings: data,
);
},
_i3.StartupView: (data) {
return _i4.MaterialPageRoute<dynamic>(
return _i5.MaterialPageRoute<dynamic>(
builder: (context) => const _i3.StartupView(),
settings: data,
);
},
_i4.MainView: (data) {
return _i5.MaterialPageRoute<dynamic>(
builder: (context) => const _i4.MainView(),
settings: data,
);
},
};
@override
@@ -57,7 +71,7 @@ class StackedRouter extends _i1.RouterBase {
Map<Type, _i1.StackedRouteFactory> get pagesMap => _pagesMap;
}
extension NavigatorStateExtension on _i5.NavigationService {
extension NavigatorStateExtension on _i6.NavigationService {
Future<dynamic> navigateToHomeView([
int? routerId,
bool preventDuplicates = true,
@@ -65,7 +79,7 @@ extension NavigatorStateExtension on _i5.NavigationService {
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(Routes.homeView,
return navigateTo<dynamic>(Routes.mainView, // Replace home view to main view
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
@@ -86,6 +100,20 @@ extension NavigatorStateExtension on _i5.NavigationService {
transition: transition);
}
Future<dynamic> navigateToMainView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return navigateTo<dynamic>(Routes.mainView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithHomeView([
int? routerId,
bool preventDuplicates = true,
@@ -93,7 +121,7 @@ extension NavigatorStateExtension on _i5.NavigationService {
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(Routes.homeView,
return replaceWith<dynamic>(Routes.mainView, // Replace home view to main view
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
@@ -113,4 +141,18 @@ extension NavigatorStateExtension on _i5.NavigationService {
parameters: parameters,
transition: transition);
}
Future<dynamic> replaceWithMainView([
int? routerId,
bool preventDuplicates = true,
Map<String, String>? parameters,
Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)?
transition,
]) async {
return replaceWith<dynamic>(Routes.mainView,
id: routerId,
preventDuplicates: preventDuplicates,
parameters: parameters,
transition: transition);
}
}

View File

@@ -0,0 +1,66 @@
import 'package:bahla_front/ui/views/home/home_view.dart';
import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'main_viewmodel.dart';
class MainView extends StackedView<MainViewModel> {
const MainView({Key? key}) : super(key: key);
@override
Widget builder(
BuildContext context,
MainViewModel viewModel,
Widget? child,
) {
return Scaffold(
backgroundColor: Theme.of(context).colorScheme.background,
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
backgroundColor: Colors.grey[800],
currentIndex: viewModel.currentIndex,
onTap: viewModel.setIndex,
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.search),
label: 'Search',
),
BottomNavigationBarItem(
icon: Icon(Icons.add),
label: 'Add',
),
BottomNavigationBarItem(
icon: Icon(Icons.account_circle),
label: 'Profile',
),
],
),
body: getViewForIndex(viewModel.currentIndex),
);
}
Widget getViewForIndex(int index) {
switch (index) {
case 0:
return HomeView();
case 1:
return Container();
case 2:
return Container();
case 3:
return Container();
default:
return HomeView();
}
}
@override
MainViewModel viewModelBuilder(
BuildContext context,
) =>
MainViewModel();
}

View File

@@ -0,0 +1,3 @@
import 'package:stacked/stacked.dart';
class MainViewModel extends IndexTrackingViewModel {}