feat(flutter): 应用浅色暖橙视觉主题

This commit is contained in:
Zhou Weidong committed 2026-10-20 10:15:03 +08:00
1 parent 0d2367431d
commit 634b63e16c
56 files changed
+941 -409

No files matched your search

+8 -4
View File
@@ -6,18 +6,22 @@ import 'package:fruitshorts/core/theme/app_dimens.dart';
void main() {
test('should_expose_the_k20_spacing_and_type_scale', () {
expect(AppDimens.pageHorizontal, 16);
expect(AppDimens.cardRadius, 12);
expect(AppDimens.innerRadius, 10);
expect(AppDimens.cardRadius, 16);
expect(AppDimens.coverRadius, 16);
expect(AppDimens.authCardRadius, 20);
expect(AppDimens.pillRadius, 999);
expect(AppDimens.buttonRadius, 999);
expect(AppDimens.caption, 12);
expect(AppDimens.body, 14);
expect(AppDimens.listTitle, 15);
expect(AppDimens.sectionTitle, 16);
expect(AppDimens.pageTitle, 20);
expect(AppDimens.navLabel, 9);
expect(AppDimens.navLabel, 10);
expect(AppDimens.buttonHeight, 48);
expect(AppDimens.primaryButtonHeight, 52);
expect(AppDimens.tapTarget, 44);
expect(AppDimens.navHeight, 54);
expect(AppDimens.navHeight, 64);
expect(AppDimens.navCenter, 56);
expect(AppDimens.progressHeight, 3);
});
}
+35 -60
View File
@@ -2,7 +2,7 @@
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fruitshorts/core/theme/app_colors.dart';
import 'package:fruitshorts/core/theme/app_theme.dart';
@@ -14,71 +14,46 @@ double _contrast(Color foreground, Color background) {
}
void main() {
test('should_expose_obsidian_flare_brand_tokens', () {
expect(AppColors.blue, const Color(0xFFFF5B3D));
expect(AppColors.bluePressed, const Color(0xFFFF4321));
expect(AppColors.blueSoft, const Color(0xFF9278EA));
expect(AppColors.secondary, const Color(0xFF9278EA));
expect(AppColors.gold, const Color(0xFFFBBF24));
expect(AppColors.ink, const Color(0xFF0B0C10));
expect(AppColors.card, const Color(0xFF1B1C21));
expect(AppColors.cardAlt, const Color(0xFF1C1D21));
expect(AppColors.raised, const Color(0xFF1C1D21));
expect(AppColors.bar, const Color(0xFF0D0D11));
expect(AppColors.success, const Color(0xFF34D399));
expect(AppColors.onPrimary, const Color(0xFFFFFFFF));
test('should_expose_light_warm_orange_tokens', () {
expect(AppColors.blue, const Color(0xFFFF7A1A));
expect(AppColors.bluePressed, const Color(0xFFFF6A00));
expect(AppColors.secondary, const Color(0xFFFF6A8A));
expect(AppColors.ink, const Color(0xFFFFF8F0));
expect(AppColors.surfaceTop, const Color(0xFFFFE9D6));
expect(AppColors.card, const Color(0xFFFFFFFF));
expect(AppColors.onSurface, const Color(0xFF1F1B16));
expect(AppColors.muted, const Color(0xFF8C837B));
expect(AppColors.subtle, const Color(0xFFB3AAA1));
expect(AppColors.border, const Color(0xFFF0E4D6));
expect(AppColors.badgePink, const Color(0xFFFFE3EC));
expect(AppColors.badgePinkText, const Color(0xFFFF6A8A));
});
test('should_keep_primary_text_readable_on_warm_background', () {
expect(
_contrast(AppColors.onGold, AppColors.gold),
_contrast(AppColors.onSurface, AppColors.ink),
greaterThanOrEqualTo(4.5),
);
expect(_contrast(AppColors.muted, AppColors.card), greaterThanOrEqualTo(3));
});
test('should_meet_text_and_icon_contrast_when_using_theme_tokens', () {
expect(
_contrast(AppColors.onPrimary, AppColors.blue),
greaterThanOrEqualTo(3),
);
expect(_contrast(AppColors.blue, Colors.white), greaterThanOrEqualTo(3));
expect(
_contrast(AppColors.blueSoft, AppColors.ink),
greaterThanOrEqualTo(3),
);
test('should_use_light_color_scheme_and_dark_system_icons', () {
final theme = AppTheme.light();
expect(theme.brightness, Brightness.light);
expect(theme.colorScheme.primary, AppColors.blue);
expect(theme.colorScheme.onPrimary, AppColors.onPrimary);
expect(theme.colorScheme.surface, AppColors.ink);
expect(theme.colorScheme.onSurface, AppColors.onSurface);
expect(theme.colorScheme.outline, AppColors.border);
expect(theme.scaffoldBackgroundColor, AppColors.ink);
expect(theme.appBarTheme.systemOverlayStyle, SystemUiOverlayStyle.dark);
});
test('should_use_flare_brand_in_light_and_dark_color_schemes', () {
for (final theme in [AppTheme.light(), AppTheme.dark()]) {
expect(theme.colorScheme.primary, AppColors.blue);
expect(theme.colorScheme.onPrimary, AppColors.onPrimary);
}
});
test('should_define_non_white_outline_tokens_in_both_themes', () {
final light = AppTheme.light().colorScheme;
final dark = AppTheme.dark().colorScheme;
expect(light.outline, AppColors.outlineLight);
expect(light.outlineVariant, AppColors.outlineVariantLight);
expect(dark.outline, AppColors.outlineDark);
expect(dark.outlineVariant, AppColors.outlineVariantDark);
expect(dark.outlineVariant.computeLuminance(), lessThan(0.2));
expect(light.outlineVariant.computeLuminance(), lessThan(0.92));
});
testWidgets('should_expose_chili_brand_through_widget_theme', (tester) async {
late ThemeData applied;
await tester.pumpWidget(
MaterialApp(
theme: AppTheme.dark(),
home: Builder(
builder: (context) {
applied = Theme.of(context);
return const SizedBox.shrink();
},
),
),
);
expect(applied.colorScheme.primary, AppColors.blue);
expect(applied.colorScheme.onPrimary, AppColors.onPrimary);
test('should_expose_page_gradient_and_soft_card_shadow', () {
expect(AppTheme.pageGradient.colors, [AppColors.surfaceTop, AppColors.ink]);
expect(AppTheme.cardShadow.color, AppColors.cardShadow);
expect(AppTheme.cardShadow.blurRadius, 18);
expect(AppTheme.cardShadow.offset, const Offset(0, 6));
});
}