feat:增加底部标题栏
This commit is contained in:
@@ -20,3 +20,8 @@ final List<PageInfo> pages = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
final List<Widget> pageWidgets = pages.map((item) => item.page).toList();
|
final List<Widget> pageWidgets = pages.map((item) => item.page).toList();
|
||||||
|
|
||||||
|
final List<BottomNavigationBarItem> bottomNavItems =
|
||||||
|
pages.map((page) {
|
||||||
|
return BottomNavigationBarItem(icon: Icon(page.icon), label: page.title);
|
||||||
|
}).toList();
|
||||||
|
|||||||
22
lib/layout/nav_bar.dart
Normal file
22
lib/layout/nav_bar.dart
Normal file
@@ -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,
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,11 +1,14 @@
|
|||||||
import 'package:blog_app/apis/blog.dart';
|
import 'package:blog_app/apis/blog.dart';
|
||||||
import 'package:blog_app/layout/drawer.dart';
|
import 'package:blog_app/layout/drawer.dart';
|
||||||
import 'package:blog_app/layout/menu.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/models/blog.dart';
|
||||||
import 'package:blog_app/widget/search.dart';
|
import 'package:blog_app/widget/search.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class HomePage extends StatefulWidget {
|
class HomePage extends StatefulWidget {
|
||||||
|
const HomePage({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_HomePageState createState() => _HomePageState();
|
_HomePageState createState() => _HomePageState();
|
||||||
}
|
}
|
||||||
@@ -162,6 +165,20 @@ class _HomePageState extends State<HomePage> {
|
|||||||
return buildSearchResultList(context, _searchResults);
|
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) {
|
void onTapDrawerItem(int index) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_currentPageIndex = index;
|
_currentPageIndex = index;
|
||||||
@@ -220,6 +237,11 @@ class _HomePageState extends State<HomePage> {
|
|||||||
),
|
),
|
||||||
drawer: _buildDrawer(),
|
drawer: _buildDrawer(),
|
||||||
body: Padding(padding: EdgeInsets.all(10), child: _buildPageView()),
|
body: Padding(padding: EdgeInsets.all(10), child: _buildPageView()),
|
||||||
|
bottomNavigationBar: buildBottomNavigationBar(
|
||||||
|
context: context,
|
||||||
|
index: _currentPageIndex,
|
||||||
|
onTap: _onBottomNavTap,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -228,27 +228,18 @@ Widget buildBlogListItem(BuildContext context, Blog blog, int index) {
|
|||||||
padding: EdgeInsets.all(10),
|
padding: EdgeInsets.all(10),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
SizedBox(
|
Text(
|
||||||
width: 25,
|
'$index.',
|
||||||
child: Text(
|
style: TextStyle(
|
||||||
index.toString(),
|
fontWeight: FontWeight.w500
|
||||||
style: TextStyle(
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
color: colors.primary,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
SizedBox(width: 10),
|
||||||
// 发布时间
|
Text(
|
||||||
SizedBox(
|
formatDateString(blog.createTime),
|
||||||
width: 150,
|
style: TextStyle(fontSize: 14, color: Colors.grey.shade600),
|
||||||
child: Text(
|
|
||||||
blog.createTime,
|
|
||||||
style: TextStyle(fontSize: 14, color: Colors.grey.shade600),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
|
SizedBox(width: 10),
|
||||||
// 标题
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
blog.title,
|
blog.title,
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:blog_app/models/blog.dart';
|
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/blog.dart';
|
||||||
import 'package:blog_app/widget/common.dart';
|
import 'package:blog_app/widget/common.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|||||||
Reference in New Issue
Block a user