| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import 'package:flutter/material.dart';
- import '../../theme/app_colors.dart';
- /// 进度状态
- enum ProgressStatus { active, success, error }
- /// 应用进度条组件
- class AppProgress extends StatelessWidget {
- final double value; // 0.0 - 1.0
- final ProgressStatus status;
- final bool showLabel;
- final String? label;
- final double? height;
- const AppProgress({
- Key? key,
- required this.value,
- this.status = ProgressStatus.active,
- this.showLabel = true,
- this.label,
- this.height,
- }) : super(key: key);
- @override
- Widget build(BuildContext context) {
- final progressValue = value.clamp(0.0, 1.0);
- final percent = (progressValue * 100).toInt();
- final displayLabel = label ?? '$percent%';
- Color getColor() {
- switch (status) {
- case ProgressStatus.active:
- return AppColors.primary;
- case ProgressStatus.success:
- return AppColors.success;
- case ProgressStatus.error:
- return AppColors.error;
- }
- }
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisSize: MainAxisSize.min,
- children: [
- ClipRRect(
- borderRadius: BorderRadius.circular(4),
- child: LinearProgressIndicator(
- value: progressValue,
- backgroundColor: AppColors.borderLight,
- valueColor: AlwaysStoppedAnimation<Color>(getColor()),
- minHeight: height ?? 8,
- ),
- ),
- if (showLabel)
- Padding(
- padding: const EdgeInsets.only(top: 4),
- child: Text(
- displayLabel,
- style: TextStyle(fontSize: 12, color: AppColors.textSecondary),
- ),
- ),
- ],
- );
- }
- }
|