Skip to content

Commit 6a18eba

Browse files
committed
feat: bottom navigation bar
1 parent 444c27a commit 6a18eba

File tree

15 files changed

+339
-66
lines changed

15 files changed

+339
-66
lines changed

android/app/.cxx/Debug/6s61131q/arm64-v8a/configure_fingerprint.bin

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@ C/C++ Structured Loga
22
_
33
]/Users/quantum/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txtC
44
A
5-
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ����2� �����2g
5+
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ����2� �����2g
66
e
7-
c/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/additional_project_files.txt  ����2  ����2d
7+
c/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/additional_project_files.txt  ����2  ����2d
88
b
9-
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/android_gradle_build.json  ����2� �����2i
9+
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/android_gradle_build.json  ����2� �����2i
1010
g
11-
e/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/android_gradle_build_mini.json  ����2� �����2V
11+
e/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/android_gradle_build_mini.json  ����2� �����2V
1212
T
13-
R/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/build.ninja  ����2�� ՛���2Z
13+
R/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/build.ninja  ����2�� ՛���2Z
1414
X
15-
V/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/build.ninja.txt  ����2_
15+
V/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/build.ninja.txt  ����2_
1616
]
17-
[/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/build_file_index.txt  ����2] �����2`
17+
[/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/build_file_index.txt  ����2] �����2`
1818
^
19-
\/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/compile_commands.json  ����2 d
19+
\/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/compile_commands.json  ����2 d
2020
b
21-
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/compile_commands.json.bin  ����2
21+
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/compile_commands.json.bin  ����2
2222
j
2323
h
24-
f/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/metadata_generation_command.txt  ����2 � �����2]
24+
f/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/metadata_generation_command.txt  ����2 � �����2]
2525
[
26-
Y/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/prefab_config.json  ����2 ( �����2b
26+
Y/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/prefab_config.json  ����2 ( �����2b
2727
`
28-
^/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/symbol_folder_index.txt  ����2U �����2
28+
^/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/arm64-v8a/symbol_folder_index.txt  ����2U �����2

android/app/.cxx/Debug/6s61131q/armeabi-v7a/configure_fingerprint.bin

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@ C/C++ Structured Loga
22
_
33
]/Users/quantum/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txtC
44
A
5-
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  �����2� �����2i
5+
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  �����2� �����2i
66
g
7-
e/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/additional_project_files.txt  �����2  �����2f
7+
e/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/additional_project_files.txt  �����2  �����2f
88
d
9-
b/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/android_gradle_build.json  �����2� �����2k
9+
b/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/android_gradle_build.json  �����2� �����2k
1010
i
11-
g/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/android_gradle_build_mini.json  �����2� �����2X
11+
g/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/android_gradle_build_mini.json  �����2� �����2X
1212
V
13-
T/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/build.ninja  �����2�� �����2\
13+
T/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/build.ninja  �����2�� �����2\
1414
Z
15-
X/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/build.ninja.txt  �����2a
15+
X/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/build.ninja.txt  �����2a
1616
_
17-
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/build_file_index.txt  �����2] �����2b
17+
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/build_file_index.txt  �����2] �����2b
1818
`
19-
^/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/compile_commands.json  �����2 f
19+
^/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/compile_commands.json  �����2 f
2020
d
21-
b/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/compile_commands.json.bin  �����2
21+
b/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/compile_commands.json.bin  �����2
2222
l
2323
j
24-
h/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/metadata_generation_command.txt  �����2 � �����2_
24+
h/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/metadata_generation_command.txt  �����2 � �����2_
2525
]
26-
[/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/prefab_config.json  �����2 ( �����2d
26+
[/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/prefab_config.json  �����2 ( �����2d
2727
b
28-
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/symbol_folder_index.txt  �����2W �����2
28+
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/armeabi-v7a/symbol_folder_index.txt  �����2W �����2

android/app/.cxx/Debug/6s61131q/x86/configure_fingerprint.bin

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@ C/C++ Structured Loga
22
_
33
]/Users/quantum/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txtC
44
A
5-
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  �����2� �����2a
5+
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  �����2� �����2a
66
_
7-
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/additional_project_files.txt  �����2  �����2^
7+
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/additional_project_files.txt  �����2  �����2^
88
\
9-
Z/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/android_gradle_build.json  �����2� �����2c
9+
Z/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/android_gradle_build.json  �����2� �����2c
1010
a
11-
_/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/android_gradle_build_mini.json  �����2� �����2P
11+
_/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/android_gradle_build_mini.json  �����2� �����2P
1212
N
13-
L/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/build.ninja  �����2�� �����2T
13+
L/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/build.ninja  �����2�� �����2T
1414
R
15-
P/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/build.ninja.txt  �����2Y
15+
P/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/build.ninja.txt  �����2Y
1616
W
17-
U/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/build_file_index.txt  �����2] �����2Z
17+
U/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/build_file_index.txt  �����2] �����2Z
1818
X
19-
V/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/compile_commands.json  �����2 ^
19+
V/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/compile_commands.json  �����2 ^
2020
\
21-
Z/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/compile_commands.json.bin  �����2
21+
Z/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/compile_commands.json.bin  �����2
2222
d
2323
b
24-
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/metadata_generation_command.txt  �����2 � �����2W
24+
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/metadata_generation_command.txt  �����2 � �����2W
2525
U
26-
S/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/prefab_config.json  �����2 ( �����2\
26+
S/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/prefab_config.json  �����2 ( �����2\
2727
Z
28-
X/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/symbol_folder_index.txt  �����2O �����2
28+
X/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86/symbol_folder_index.txt  �����2O �����2

android/app/.cxx/Debug/6s61131q/x86_64/configure_fingerprint.bin

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@ C/C++ Structured Loga
22
_
33
]/Users/quantum/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txtC
44
A
5-
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  �����2� �����2d
5+
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  �����2� �����2d
66
b
7-
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/additional_project_files.txt  �����2  �����2a
7+
`/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/additional_project_files.txt  �����2  �����2a
88
_
9-
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/android_gradle_build.json  �����2� �����2f
9+
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/android_gradle_build.json  �����2� �����2f
1010
d
11-
b/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/android_gradle_build_mini.json  �����2� �����2S
11+
b/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/android_gradle_build_mini.json  �����2� �����2S
1212
Q
13-
O/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/build.ninja  �����2�� �����2W
13+
O/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/build.ninja  �����2�� �����2W
1414
U
15-
S/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/build.ninja.txt  �����2\
15+
S/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/build.ninja.txt  �����2\
1616
Z
17-
X/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/build_file_index.txt  �����2] �����2]
17+
X/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/build_file_index.txt  �����2] �����2]
1818
[
19-
Y/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/compile_commands.json  �����2 a
19+
Y/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/compile_commands.json  �����2 a
2020
_
21-
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/compile_commands.json.bin  �����2
21+
]/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/compile_commands.json.bin  �����2
2222
g
2323
e
24-
c/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/metadata_generation_command.txt  �����2 � �����2Z
24+
c/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/metadata_generation_command.txt  �����2 � �����2Z
2525
X
26-
V/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/prefab_config.json  �����2 ( �����2_
26+
V/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/prefab_config.json  �����2 ( �����2_
2727
]
28-
[/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/symbol_folder_index.txt  �����2R �����2
28+
[/Users/quantum/Projects/qack/android/app/.cxx/Debug/6s61131q/x86_64/symbol_folder_index.txt  �����2R �����2

lib/app/view/app.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import 'package:qack/gen/fonts.gen.dart';
55
import 'package:qack/l10n/l10n.dart';
66
import 'package:qack/layout/device_info_setter.dart';
77
import 'package:qack/presentation/home/view/home_page.dart';
8+
import 'package:qack/presentation/landing/components/cubit/bottom_navigation_bar_cubit.dart';
9+
import 'package:qack/presentation/landing/view/landing_page.dart';
810
import 'package:qack/presentation/settings/bloc/settings_bloc.dart';
911
import 'package:qack/presentation/settings/respository/settings_repository.dart';
1012

@@ -29,6 +31,7 @@ class App extends StatelessWidget {
2931
settingsRepository: context.read<SettingsRepository>(),
3032
),
3133
),
34+
BlocProvider(create: (context) => BottomNavigationBarCubit()),
3235
],
3336
child: const AppView(),
3437
),
@@ -73,7 +76,7 @@ class _AppViewState extends State<AppView> {
7376
),
7477
localizationsDelegates: AppLocalizations.localizationsDelegates,
7578
supportedLocales: AppLocalizations.supportedLocales,
76-
home: const HomePage(),
79+
home: const LandingPage(),
7780
builder: (context, Widget? child) => DeviceInfoSetter(child: child!),
7881
),
7982
);
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
import 'package:bottom_bar/bottom_bar.dart';
2+
import 'package:qack/layout/layout_handler.dart';
3+
import 'package:qack/presentation/landing/components/components.dart';
4+
import 'package:qack/theme/theme.dart';
5+
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
6+
import 'package:flutter/material.dart';
7+
import 'package:flutter_bloc/flutter_bloc.dart';
8+
9+
class BottomNavBar extends StatelessWidget {
10+
const BottomNavBar({
11+
super.key,
12+
});
13+
14+
@override
15+
Widget build(BuildContext context) {
16+
return LayoutHandler(
17+
mobile: _BottomNavBar(
18+
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
19+
height: 56,
20+
itemPadding: const EdgeInsets.only(
21+
left: 14,
22+
right: 12,
23+
top: 6,
24+
bottom: 6,
25+
),
26+
textStyle: AppTextStyle.textMD.medium,
27+
iconSize: 24,
28+
),
29+
tablet: _BottomNavBar(
30+
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
31+
height: 72,
32+
itemPadding: const EdgeInsets.only(
33+
left: 18,
34+
right: 15.5,
35+
top: 8,
36+
bottom: 8,
37+
),
38+
textStyle: AppTextStyle.textLG.semiBold.copyWith(letterSpacing: 0.1),
39+
iconSize: 26,
40+
),
41+
);
42+
}
43+
}
44+
45+
class _BottomNavBar extends StatelessWidget {
46+
const _BottomNavBar({
47+
required this.mainAxisAlignment,
48+
required this.height,
49+
required this.itemPadding,
50+
required this.textStyle,
51+
required this.iconSize,
52+
});
53+
54+
final MainAxisAlignment mainAxisAlignment;
55+
56+
/// {@template bottom_nav_bar_height}
57+
/// The height of the bottom navigation bar.
58+
/// {@endtemplate}
59+
final double height;
60+
61+
/// {@template bottom_nav_bar_item_padding}
62+
/// The padding of the [BottomBarItem].
63+
/// {@endtemplate}
64+
final EdgeInsets itemPadding;
65+
66+
/// {@template bottom_nav_bar_item_text_style}
67+
/// The text style of each [BottomBarItem].
68+
/// {@endtemplate}
69+
final TextStyle textStyle;
70+
71+
/// {@template bottom_nav_bar_item_icon_size}
72+
/// The size of all the [BottomBarItem] icons except for the home icon.
73+
/// {@endtemplate}
74+
final double iconSize;
75+
76+
@override
77+
Widget build(BuildContext context) {
78+
const theme = LightTheme();
79+
final navigationThemeData = theme.navigationThemeData;
80+
81+
return Column(
82+
mainAxisSize: MainAxisSize.min,
83+
children: [
84+
BlocBuilder<BottomNavigationBarCubit, BottomNavigationBarState>(
85+
builder: (context, state) {
86+
return BottomBar(
87+
onTap: (index) {
88+
final selectedPage = SelectedPage.values.elementAt(index);
89+
context
90+
.read<BottomNavigationBarCubit>()
91+
.changePage(selectedPage);
92+
},
93+
selectedIndex: state.selectedPage.index,
94+
backgroundColor: theme.cardColor,
95+
mainAxisAlignment: mainAxisAlignment,
96+
height: height,
97+
border: RoundedRectangleBorder(
98+
borderRadius: BorderRadius.circular(4),
99+
),
100+
itemPadding: itemPadding,
101+
textStyle: textStyle,
102+
items: [
103+
BottomBarItem(
104+
icon: Icon(
105+
Icons.home_outlined,
106+
size: iconSize,
107+
),
108+
title: const Text(
109+
'Home',
110+
),
111+
activeColor: navigationThemeData.activeHomeColor,
112+
activeTitleColor: navigationThemeData.activeHomeTitleColor,
113+
inactiveColor:
114+
navigationThemeData.inactiveNavigationTitleColor,
115+
),
116+
BottomBarItem(
117+
icon: Icon(
118+
EvaIcons.settings2Outline,
119+
size: iconSize,
120+
),
121+
title: const Text(
122+
'Settings',
123+
),
124+
activeColor: navigationThemeData.activeSettingsColor,
125+
activeTitleColor:
126+
navigationThemeData.activeSettingsTitleColor,
127+
inactiveColor:
128+
navigationThemeData.inactiveNavigationTitleColor,
129+
),
130+
],
131+
);
132+
},
133+
),
134+
const SafeArea(
135+
top: false,
136+
child: SizedBox(),
137+
),
138+
],
139+
);
140+
}
141+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export 'bottom_navigation_bar.dart';
2+
export 'cubit/bottom_navigation_bar_cubit.dart';
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'package:bloc/bloc.dart';
2+
import 'package:equatable/equatable.dart';
3+
import 'package:flutter/material.dart';
4+
5+
part 'bottom_navigation_bar_state.dart';
6+
7+
class BottomNavigationBarCubit extends Cubit<BottomNavigationBarState> {
8+
BottomNavigationBarCubit()
9+
: super(const BottomNavigationBarState(SelectedPage.home));
10+
11+
void changePage(SelectedPage selectedPage) {
12+
emit(state.copyWith(selectedPage: selectedPage));
13+
}
14+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
part of 'bottom_navigation_bar_cubit.dart';
2+
3+
enum SelectedPage {
4+
home,
5+
settings,
6+
}
7+
8+
final class BottomNavigationBarState extends Equatable {
9+
const BottomNavigationBarState(
10+
this.selectedPage,
11+
);
12+
final SelectedPage selectedPage;
13+
14+
@override
15+
List<Object> get props => [selectedPage];
16+
17+
BottomNavigationBarState copyWith({
18+
SelectedPage? selectedPage,
19+
}) {
20+
return BottomNavigationBarState(
21+
selectedPage ?? this.selectedPage,
22+
);
23+
}
24+
}

0 commit comments

Comments
 (0)