ponshu-room-lite/lib/theme/theme_utils.dart

64 lines
2.3 KiB
Dart
Raw Normal View History

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<AppColors>()!;
// ===== 便利なショートカット =====
// テキストカラー
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<AppColors>()!;
}