Move skills system documentation from bottom to top of CLAUDE.md for better organization. Refactor Flutter asset page by extracting UI components into separate files and updating import structure for improved modularity.
65 lines
1.9 KiB
Dart
65 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:google_fonts/google_fonts.dart';
|
||
import '../../../../core/theme/app_color_scheme.dart';
|
||
import '../../../../core/theme/app_spacing.dart';
|
||
|
||
/// 交易按钮组件
|
||
///
|
||
/// CTA 买入/卖出按钮。profit-green底 / sell-red底,圆角lg,高48,白字16px bold。
|
||
class TradeButton extends StatelessWidget {
|
||
final bool isBuy;
|
||
final String? coinCode;
|
||
final bool enabled;
|
||
final bool isLoading;
|
||
final VoidCallback onPressed;
|
||
|
||
const TradeButton({
|
||
super.key,
|
||
required this.isBuy,
|
||
required this.coinCode,
|
||
required this.enabled,
|
||
required this.isLoading,
|
||
required this.onPressed,
|
||
});
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
final colorScheme = Theme.of(context).colorScheme;
|
||
final fillColor =
|
||
isBuy ? AppColorScheme.buyButtonFill : AppColorScheme.sellButtonFill;
|
||
|
||
return GestureDetector(
|
||
onTap: enabled ? onPressed : null,
|
||
child: AnimatedContainer(
|
||
duration: const Duration(milliseconds: 200),
|
||
height: 48,
|
||
decoration: BoxDecoration(
|
||
color: enabled ? fillColor : colorScheme.onSurface.withOpacity(0.08),
|
||
borderRadius: BorderRadius.circular(AppRadius.lg),
|
||
),
|
||
child: Center(
|
||
child: isLoading
|
||
? const SizedBox(
|
||
width: 20,
|
||
height: 20,
|
||
child: CircularProgressIndicator(
|
||
strokeWidth: 2,
|
||
color: Colors.white,
|
||
),
|
||
)
|
||
: Text(
|
||
'${isBuy ? '买入' : '卖出'} ${coinCode ?? ""}',
|
||
style: GoogleFonts.inter(
|
||
fontSize: 16,
|
||
fontWeight: FontWeight.w700,
|
||
color: enabled
|
||
? Colors.white
|
||
: colorScheme.onSurface.withOpacity(0.3),
|
||
),
|
||
),
|
||
),
|
||
),
|
||
);
|
||
}
|
||
}
|