how do I created a bottom navigation bar fixed for all screens throughout the app and add a player on top of it fixed too. The desired goal is
Asked
Active
Viewed 662 times
0

Digamber negi
- 407
- 1
- 7
- 20
1 Answers
0
You can just register a widget i.e. TabsScreen
once and use it everywhere on your screens. I also fixed the player on the top of the BottomNavigationBar
so whether you're in your HomeScreen()
, SearchScreen()
, LibraryScreen()
or ProfileScreen()
doesn't matter, it will always remain there.
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Music App',
theme: ThemeData(
primarySwatch: Colors.brown,
),
initialRoute: '/',
routes: {
'/': (context) => const TabsScreen(),
HomeScreen.routeName: (context) => const HomeScreen(),
SearchScreen.routeName: (context) => const SearchScreen(),
LibraryScreen.routeName: (context) => const LibraryScreen(),
ProfileScreen.routeName: (context) => const ProfileScreen(),
},
);
}
}
class HomeScreen extends StatelessWidget {
static const routeName = '/home';
const HomeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Scaffold();
}
}
class SearchScreen extends StatelessWidget {
static const routeName = '/search';
const SearchScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Scaffold();
}
}
class LibraryScreen extends StatelessWidget {
static const routeName = '/library';
const LibraryScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Scaffold();
}
}
class ProfileScreen extends StatelessWidget {
static const routeName = '/profile';
const ProfileScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Scaffold();
}
}
class TabsScreen extends StatefulWidget {
const TabsScreen({Key? key}) : super(key: key);
@override
State<TabsScreen> createState() => _TabsScreenState();
}
class _TabsScreenState extends State<TabsScreen> {
final List<Map<String, dynamic>> _pages = [
{
'page': const HomeScreen(),
'title': 'Home',
},
{
'page': const SearchScreen(),
'title': 'Search',
},
{
'page': const LibraryScreen(),
'title': 'Library',
},
{
'page': const ProfileScreen(),
'title': 'Profile',
},
];
int _selectedPageIndex = 0;
void _selectPage(int index) {
setState(() {
_selectedPageIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(_pages[_selectedPageIndex]['title']),
elevation: 0,
),
body: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
height: 90,
width: double.infinity,
color: Colors.brown,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
Text(
'Title',
style: TextStyle(
color: Colors.white,
fontSize: 22,
),
),
Text(
'Artist',
style: TextStyle(
color: Colors.white,
fontSize: 22,
),
),
],
),
const Icon(
Icons.pause,
color: Colors.white,
size: 60,
),
],
),
),
),
],
),
bottomNavigationBar: ClipRRect(
borderRadius: BorderRadius.circular(30),
child: BottomNavigationBar(
onTap: _selectPage,
type: BottomNavigationBarType.fixed,
selectedItemColor: Theme.of(context).primaryColor,
unselectedItemColor: Colors.grey,
showUnselectedLabels: true,
currentIndex: _selectedPageIndex,
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home, size: 40),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.search, size: 40),
label: 'Search',
),
BottomNavigationBarItem(
icon: Icon(Icons.my_library_books_sharp, size: 40),
label: 'Library',
),
BottomNavigationBarItem(
icon: Icon(Icons.person, size: 40),
label: 'Profile',
),
],
),
),
);
}
}

Asad Sheikh
- 61
- 1
- 8
-
How to remove it from main player screen to cover entire screen?? – Digamber negi Aug 07 '22 at 09:04