Files
MaliangAINovalWriter/AINoval/lib/screens/settings/widgets/processing_indicator.dart
2025-09-10 00:07:52 +08:00

113 lines
3.4 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
/// 处理状态指示器组件
class ProcessingIndicator extends StatelessWidget {
/// 进度值0.0-1.0
final double progress;
/// 取消操作回调
final VoidCallback? onCancel;
const ProcessingIndicator({
Key? key,
this.progress = 0.0,
this.onCancel,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final showProgress = progress > 0 && progress < 1.0;
return Container(
margin: const EdgeInsets.symmetric(vertical: 16),
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: theme.colorScheme.primaryContainer.withOpacity(0.2),
borderRadius: BorderRadius.circular(8),
border: Border.all(
color: theme.colorScheme.primary.withOpacity(0.3),
),
),
child: Column(
children: [
// 标题和进度指示
Row(
children: [
const SizedBox(
width: 24,
height: 24,
child: CircularProgressIndicator(
strokeWidth: 3,
),
),
const SizedBox(width: 16),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'正在优化提示词模板...',
style: TextStyle(
fontWeight: FontWeight.bold,
color: theme.colorScheme.primary,
),
),
const SizedBox(height: 4),
Text(
_getStatusMessage(progress),
style: TextStyle(
fontSize: 13,
color: theme.colorScheme.onSurfaceVariant,
),
),
],
),
),
if (onCancel != null)
TextButton.icon(
icon: const Icon(Icons.cancel, size: 16),
label: const Text('取消'),
onPressed: onCancel,
),
],
),
// 进度条
if (showProgress) ...[
const SizedBox(height: 16),
LinearProgressIndicator(
value: progress,
backgroundColor: theme.colorScheme.surfaceVariant,
valueColor: AlwaysStoppedAnimation<Color>(theme.colorScheme.primary),
),
const SizedBox(height: 8),
Text(
'${(progress * 100).toInt()}%',
style: TextStyle(
fontSize: 12,
color: theme.colorScheme.onSurfaceVariant,
),
textAlign: TextAlign.center,
),
],
],
),
);
}
/// 获取状态消息
String _getStatusMessage(double progress) {
if (progress < 0.1) {
return '正在分析提示词内容...';
} else if (progress < 0.4) {
return '生成优化建议中...';
} else if (progress < 0.7) {
return '应用语言模型增强中...';
} else if (progress < 0.9) {
return '润色和格式化内容...';
} else {
return '优化即将完成...';
}
}
}