Files
blog_app/lib/pages/category_page.dart
2025-11-21 14:11:35 +08:00

72 lines
1.8 KiB
Dart

import 'package:blog_app/widget/common.dart';
import 'package:provider/provider.dart';
import 'package:blog_app/provider/blog.dart';
import 'package:blog_app/widget/blog.dart';
import 'package:flutter/material.dart';
class CategoryPage extends StatefulWidget {
const CategoryPage({super.key});
@override
State<CategoryPage> createState() => _CategoryPageState();
}
class _CategoryPageState extends State<CategoryPage> {
@override
void initState() {
super.initState();
// 初始化加载数据
WidgetsBinding.instance.addPostFrameCallback((_) {
context.read<BlogProvider>().refreshBlogCategory();
});
}
Widget _buildContent(BlogProvider provider) {
if (provider.error != null) {
return buildErrorInfo(
errorInfo: provider.error!,
onPressed: () => provider.refreshBlogByYear(),
);
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildCategoryTitle(context, provider.categoryList.length),
SizedBox(height: 10),
// 分类列表
Expanded(
child: ListView.separated(
itemCount: provider.categoryList.length,
separatorBuilder: (context, index) => SizedBox(height: 8),
itemBuilder: (context, index) {
final category = provider.categoryList[index];
return buildCategoryCard(context, category);
},
),
),
],
);
}
@override
Widget build(BuildContext context) {
final blogProvider = context.watch<BlogProvider>();
return Column(
children: [
Expanded(
child: Stack(
children: [
if (blogProvider.isLoading)
buildLoadingIndicator()
else
_buildContent(blogProvider),
],
),
),
],
);
}
}