index_page.dart 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_google_map/pages/tabs/business_page.dart';
  3. import 'package:flutter_google_map/pages/tabs/home_page.dart';
  4. import 'package:flutter_google_map/pages/tabs/mine_page.dart';
  5. import 'package:flutter_google_map/pages/tabs/taxi_page.dart';
  6. class IndexPage extends StatefulWidget {
  7. int pageIndex;
  8. IndexPage({super.key, this.pageIndex = 0});
  9. @override
  10. State<IndexPage> createState() => _IndexPageState();
  11. }
  12. class _IndexPageState extends State<IndexPage> {
  13. final List<BottomNavigationBarItem> bottomTabs = const [
  14. BottomNavigationBarItem(icon: Icon(Icons.home), label: '出行'),
  15. BottomNavigationBarItem(icon: Icon(Icons.business), label: '周边惠'),
  16. BottomNavigationBarItem(icon: Icon(Icons.school), label: '打车'),
  17. BottomNavigationBarItem(icon: Icon(Icons.school), label: '我的'),
  18. ];
  19. final List<Widget> pages = const [
  20. HomePage(),
  21. BusinessPage(),
  22. TaxiPage(),
  23. MinePage(),
  24. ];
  25. int currentIndex = 0;
  26. Size get size => MediaQuery.of(context).size;
  27. final pageController = PageController();
  28. @override
  29. Widget build(BuildContext context) {
  30. return Scaffold(
  31. appBar: AppBar(
  32. title: const Text('Maps Sample App'),
  33. backgroundColor: Colors.green[700],
  34. ),
  35. bottomNavigationBar: BottomNavigationBar(
  36. items: bottomTabs,
  37. currentIndex: currentIndex,
  38. type: BottomNavigationBarType.fixed,
  39. onTap: (index) {
  40. setState(() {
  41. currentIndex = index;
  42. pageController.jumpToPage(index);
  43. });
  44. },
  45. ),
  46. drawer: Drawer(
  47. child: ListView(
  48. padding: EdgeInsets.zero,
  49. children: <Widget>[
  50. const DrawerHeader(
  51. decoration: BoxDecoration(
  52. color: Colors.green,
  53. ),
  54. child: Text('Drawer Header'),
  55. ),
  56. ListTile(
  57. title: const Text('Item 1'),
  58. onTap: () {
  59. Navigator.pop(context);
  60. },
  61. ),
  62. ListTile(
  63. title: const Text('Item 2'),
  64. onTap: () {
  65. Navigator.pop(context);
  66. },
  67. ),
  68. ],
  69. ),
  70. ),
  71. body: _getPageBody(context),
  72. );
  73. }
  74. bool get wantKeepAlive => true;
  75. Widget _getPageBody(BuildContext context) {
  76. return PageView(
  77. controller: pageController,
  78. physics: const NeverScrollableScrollPhysics(),
  79. onPageChanged: (index) {
  80. setState(() {
  81. currentIndex = index;
  82. });
  83. },
  84. children: pages,
  85. );
  86. }
  87. }