diff --git a/lib/guess/guess_page.dart b/lib/guess/guess_page.dart index 7323add..ac10319 100644 --- a/lib/guess/guess_page.dart +++ b/lib/guess/guess_page.dart @@ -6,9 +6,7 @@ import 'guess_app_bar.dart'; import 'result_notice.dart'; class GuessPage extends StatefulWidget { - const GuessPage({super.key, required this.title}); - - final String title; + const GuessPage({super.key}); @override State createState() => _GuessPageState(); diff --git a/lib/main.dart b/lib/main.dart index de1ede4..c58c6db 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'counter/counter_page.dart'; import 'guess/guess_page.dart'; import 'muyu/muyu_page.dart'; +import 'navigation/app_navigation.dart'; import 'paper/paper.dart'; void main() { @@ -20,7 +21,7 @@ class MyApp extends StatelessWidget { theme: ThemeData( primarySwatch: Colors.blue, ), - home: const Paper(), + home: const AppNavigation(), ); } } diff --git a/lib/muyu/muyu_app_bar.dart b/lib/muyu/muyu_app_bar.dart index 8440351..3787d7e 100644 --- a/lib/muyu/muyu_app_bar.dart +++ b/lib/muyu/muyu_app_bar.dart @@ -13,6 +13,7 @@ class MuyuAppBar extends StatelessWidget implements PreferredSizeWidget { Widget build(BuildContext context) { return AppBar( elevation: 0, + centerTitle: true, systemOverlayStyle: const SystemUiOverlayStyle( statusBarIconBrightness: Brightness.dark, statusBarColor: Colors.transparent), diff --git a/lib/navigation/app_bottom_bar.dart b/lib/navigation/app_bottom_bar.dart new file mode 100644 index 0000000..0ec8b85 --- /dev/null +++ b/lib/navigation/app_bottom_bar.dart @@ -0,0 +1,52 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class MenuData { + // 标签 + final String label; + + // 图标数据 + final IconData icon; + + const MenuData({ + required this.label, + required this.icon, + }); +} + +class AppBottomBar extends StatelessWidget { + final int currentIndex; + final List menus; + final ValueChanged? onItemTap; + + const AppBottomBar({ + Key? key, + this.onItemTap, + this.currentIndex = 0, + required this.menus, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return BottomNavigationBar( + backgroundColor: Colors.white, + onTap: onItemTap, + currentIndex: currentIndex, + elevation: 3, + type: BottomNavigationBarType.fixed, + iconSize: 22, + selectedItemColor: Theme.of(context).primaryColor, + selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold), + showUnselectedLabels: true, + showSelectedLabels: true, + items: menus.map(_buildItemByMenuMeta).toList(), + ); + } + + BottomNavigationBarItem _buildItemByMenuMeta(MenuData menu) { + return BottomNavigationBarItem( + label: menu.label, + icon: Icon(menu.icon), + ); + } +} diff --git a/lib/navigation/app_navigation.dart b/lib/navigation/app_navigation.dart new file mode 100644 index 0000000..4923ffc --- /dev/null +++ b/lib/navigation/app_navigation.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_first_station/guess/guess_page.dart'; +import 'package:flutter_first_station/muyu/muyu_page.dart'; +import 'package:flutter_first_station/paper/paper.dart'; + +import 'app_bottom_bar.dart'; + +class AppNavigation extends StatefulWidget { + const AppNavigation({Key? key}) : super(key: key); + + @override + State createState() => _AppNavigationState(); +} + +class _AppNavigationState extends State { + int _index = 0; + + final List menus = const [ + MenuData(label: '猜数字', icon: Icons.question_mark), + MenuData(label: '电子木鱼', icon: Icons.my_library_music_outlined), + MenuData(label: '白板绘制', icon: Icons.palette_outlined), + ]; + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Expanded( + child: _buildContent(_index), + ), + AppBottomBar( + currentIndex: _index, + onItemTap: _onChangePage, + menus: menus, + ) + ], + ); + } + + void _onChangePage(int index) { + setState(() { + _index = index; + }); + } + + Widget _buildContent(int index) { + switch(index){ + case 0: + return const GuessPage(); + case 1: + return const MuyuPage(); + case 2: + return const Paper(); + default: + return const SizedBox.shrink(); + } + } +} + diff --git a/lib/paper/paper.dart b/lib/paper/paper.dart index 96f6f8f..0e8138e 100644 --- a/lib/paper/paper.dart +++ b/lib/paper/paper.dart @@ -181,7 +181,7 @@ class PaperPainter extends CustomPainter { void drawLine(Canvas canvas, Line line) { _paint.color = line.color; _paint.strokeWidth = line.strokeWidth; - canvas.drawPoints(PointMode.points, line.points, _paint); + canvas.drawPoints(PointMode.polygon, line.points, _paint); } @override