mirror of
https://github.com/JideGuru/FlutterTravel.git
synced 2025-08-06 15:21:15 +08:00
73 lines
1.9 KiB
Dart
73 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_travel_concept/screens/home.dart';
|
|
import 'package:flutter_travel_concept/widgets/icon_badge.dart';
|
|
|
|
class MainScreen extends StatefulWidget {
|
|
@override
|
|
_MainScreenState createState() => _MainScreenState();
|
|
}
|
|
|
|
class _MainScreenState extends State<MainScreen> {
|
|
PageController _pageController;
|
|
int _page = 0;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: PageView(
|
|
physics: NeverScrollableScrollPhysics(),
|
|
controller: _pageController,
|
|
onPageChanged: onPageChanged,
|
|
children: List.generate(4, (index) => Home()),
|
|
),
|
|
bottomNavigationBar: BottomAppBar(
|
|
child: Row(
|
|
mainAxisSize: MainAxisSize.max,
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: <Widget>[
|
|
SizedBox(width: 7.0),
|
|
barIcon(icon: Icons.home, page: 0),
|
|
barIcon(icon: Icons.favorite, page: 1),
|
|
barIcon(icon: Icons.mode_comment, page: 2, badge: true),
|
|
barIcon(icon: Icons.person, page: 3),
|
|
SizedBox(width: 7.0),
|
|
],
|
|
),
|
|
color: Theme.of(context).primaryColor,
|
|
),
|
|
);
|
|
}
|
|
|
|
void navigationTapped(int page) {
|
|
_pageController.jumpToPage(page);
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_pageController = PageController();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
super.dispose();
|
|
_pageController.dispose();
|
|
}
|
|
|
|
void onPageChanged(int page) {
|
|
setState(() {
|
|
this._page = page;
|
|
});
|
|
}
|
|
|
|
Widget barIcon(
|
|
{IconData icon = Icons.home, int page = 0, bool badge = false}) {
|
|
return IconButton(
|
|
icon: badge ? IconBadge(icon: icon, size: 24.0) : Icon(icon, size: 24.0),
|
|
color:
|
|
_page == page ? Theme.of(context).accentColor : Colors.blueGrey[300],
|
|
onPressed: () => _pageController.jumpToPage(page),
|
|
);
|
|
}
|
|
}
|