diff --git a/lib/layout/menu.dart b/lib/layout/menu.dart index e89b548..8f8aed6 100644 --- a/lib/layout/menu.dart +++ b/lib/layout/menu.dart @@ -20,3 +20,8 @@ final List pages = [ ]; final List pageWidgets = pages.map((item) => item.page).toList(); + +final List bottomNavItems = + pages.map((page) { + return BottomNavigationBarItem(icon: Icon(page.icon), label: page.title); + }).toList(); diff --git a/lib/layout/nav_bar.dart b/lib/layout/nav_bar.dart new file mode 100644 index 0000000..08584cc --- /dev/null +++ b/lib/layout/nav_bar.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; + +import 'menu.dart'; + +Widget buildBottomNavigationBar({ + required BuildContext context, + required int index, + required Function(int) onTap, +}) { + return BottomNavigationBar( + currentIndex: index, + onTap: onTap, + items: bottomNavItems, + type: BottomNavigationBarType.fixed, + selectedItemColor: Theme.of(context).colorScheme.primary, + unselectedItemColor: Colors.grey, + showSelectedLabels: true, + showUnselectedLabels: true, + backgroundColor: Colors.white, + elevation: 8, + ); +} diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index d1a68eb..49f4b34 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -1,11 +1,14 @@ import 'package:blog_app/apis/blog.dart'; import 'package:blog_app/layout/drawer.dart'; import 'package:blog_app/layout/menu.dart'; +import 'package:blog_app/layout/nav_bar.dart'; import 'package:blog_app/models/blog.dart'; import 'package:blog_app/widget/search.dart'; import 'package:flutter/material.dart'; class HomePage extends StatefulWidget { + const HomePage({super.key}); + @override _HomePageState createState() => _HomePageState(); } @@ -162,6 +165,20 @@ class _HomePageState extends State { return buildSearchResultList(context, _searchResults); } + void _onBottomNavTap(int index) { + setState(() { + _currentPageIndex = index; + if (_isSearching) { + _exitSearch(); + } + }); + _pageController.animateToPage( + index, + duration: Duration(milliseconds: 300), + curve: Curves.easeInOut, + ); + } + void onTapDrawerItem(int index) { setState(() { _currentPageIndex = index; @@ -220,6 +237,11 @@ class _HomePageState extends State { ), drawer: _buildDrawer(), body: Padding(padding: EdgeInsets.all(10), child: _buildPageView()), + bottomNavigationBar: buildBottomNavigationBar( + context: context, + index: _currentPageIndex, + onTap: _onBottomNavTap, + ), ); } } diff --git a/lib/widget/blog.dart b/lib/widget/blog.dart index 8286d33..ac8218c 100644 --- a/lib/widget/blog.dart +++ b/lib/widget/blog.dart @@ -228,27 +228,18 @@ Widget buildBlogListItem(BuildContext context, Blog blog, int index) { padding: EdgeInsets.all(10), child: Row( children: [ - SizedBox( - width: 25, - child: Text( - index.toString(), - style: TextStyle( - fontWeight: FontWeight.w500, - color: colors.primary, - ), + Text( + '$index.', + style: TextStyle( + fontWeight: FontWeight.w500 ), ), - - // 发布时间 - SizedBox( - width: 150, - child: Text( - blog.createTime, - style: TextStyle(fontSize: 14, color: Colors.grey.shade600), - ), + SizedBox(width: 10), + Text( + formatDateString(blog.createTime), + style: TextStyle(fontSize: 14, color: Colors.grey.shade600), ), - - // 标题 + SizedBox(width: 10), Expanded( child: Text( blog.title, diff --git a/lib/widget/search.dart b/lib/widget/search.dart index 7a2a642..3138159 100644 --- a/lib/widget/search.dart +++ b/lib/widget/search.dart @@ -1,5 +1,4 @@ import 'package:blog_app/models/blog.dart'; -import 'package:blog_app/pages/blog_detail_page.dart'; import 'package:blog_app/widget/blog.dart'; import 'package:blog_app/widget/common.dart'; import 'package:flutter/material.dart';