feat:增加加载中显示

This commit is contained in:
2025-11-16 00:09:39 +08:00
parent d512a77f5f
commit 47b6fb9937
15 changed files with 697 additions and 541 deletions

View File

@@ -267,6 +267,56 @@ Widget buildBlogListItem(BuildContext context, Blog blog, int index) {
);
}
Widget buildStatsCard({
required BuildContext context,
required String title,
required int count,
required String unit,
}) {
return buildCard(
context: context,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
fontSize: 16,
color: Colors.grey.shade600,
fontWeight: FontWeight.w500,
),
),
const SizedBox(height: 12),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(
count.toString(),
style: const TextStyle(
fontSize: 28,
fontWeight: FontWeight.bold,
color: Colors.black87,
height: 1.0,
),
),
const SizedBox(width: 4),
Text(
unit,
style: TextStyle(
fontSize: 14,
color: Colors.grey.shade600,
fontWeight: FontWeight.w500,
),
),
],
),
],
),
);
}
void navigatorToBlogDetail(BuildContext context, int blogId) {
Navigator.push(
context,

View File

@@ -33,4 +33,23 @@ Widget circleIconButton({
),
child: Icon(icon, color: Colors.white),
);
}
}
Widget buildErrorInfo({
required String errorInfo,
required VoidCallback onPressed,
}) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('加载失败: $errorInfo'),
ElevatedButton(onPressed: onPressed, child: Text('重试')),
],
),
);
}
Widget buildLoadingIndicator() {
return Center(child: CircularProgressIndicator());
}

63
lib/widget/markdown.dart Normal file
View File

@@ -0,0 +1,63 @@
import 'package:flutter/material.dart';
import 'package:markdown_widget/config/toc.dart';
import 'package:markdown_widget/widget/markdown.dart';
Widget buildMarkdown({
required TocController tocController,
required String data,
}) => MarkdownWidget(data: data, tocController: tocController);
Widget buildTocPanel({
required TocController tocController,
required bool showToc,
}) => Visibility(
visible: showToc,
child: Align(
alignment: Alignment.bottomRight,
child: Container(
width: 250,
height: 400,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.black.withAlpha(50),
blurRadius: 8,
offset: const Offset(0, 4),
),
],
border: Border.all(color: Colors.grey[300]!),
),
child: Column(
children: [
Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.grey[100],
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(12),
topRight: Radius.circular(12),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'目录',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
),
],
),
),
Expanded(
child: TocWidget(
controller: tocController,
tocTextStyle: TextStyle(fontSize: 14),
),
),
],
),
),
),
);