import 'package:flutter/material.dart'; import 'app_colors.dart'; /// ThemeUtils - テーマカラーへの安全なアクセスを提供するユーティリティ /// /// 使用例: /// ```dart /// // Extension経由(推奨): /// Text('テキスト', style: TextStyle(color: context.colors.textPrimary)); /// Icon(icon, color: context.colors.brandPrimary); /// /// // 短縮形: /// color: context.brandPrimary /// color: context.textSecondary /// ``` extension ThemeContextExtensions on BuildContext { /// AppColorsへの安全なアクセス AppColors get colors => Theme.of(this).extension()!; // ===== 便利なショートカット ===== // テキストカラー Color get textPrimary => colors.textPrimary; Color get textSecondary => colors.textSecondary; Color get textTertiary => colors.textTertiary; // ブランドカラー Color get brandPrimary => colors.brandPrimary; Color get brandAccent => colors.brandAccent; Color get brandSurface => colors.brandSurface; // アイコンカラー Color get iconDefault => colors.iconDefault; Color get iconSubtle => colors.iconSubtle; Color get iconAccent => colors.iconAccent; // サーフェイスカラー Color get surfaceElevated => colors.surfaceElevated; Color get surfaceSubtle => colors.surfaceSubtle; Color get dividerColor => colors.divider; // セマンティックカラー Color get successColor => colors.success; Color get warningColor => colors.warning; Color get errorColor => colors.error; Color get infoColor => colors.info; // ===== ダークモードチェック(既存コードとの互換性用) ===== /// ダークモードかどうかを判定 /// 注意: 新規コードでは使用しないでください。代わりにAppColorsのセマンティックカラーを使用してください。 @Deprecated('Use context.colors.brandPrimary instead of checking isDark manually') bool get isDark => Theme.of(this).brightness == Brightness.dark; } /// グローバルヘルパー関数(既存コードとの互換性用) /// /// 注意: 新規コードでは使用しないでください。 /// 代わりに `context.colors.brandPrimary` などのExtensionを使用してください。 @Deprecated('Use context.colors instead') AppColors appColors(BuildContext context) { return Theme.of(context).extension()!; }