ponshu-room-lite/lib/widgets/pro_locked_screen.dart

153 lines
5.2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:lucide_icons/lucide_icons.dart';
import '../providers/theme_provider.dart';
/// Pro版限定機能のロック画面
///
/// Lite版で使用制限されている機能を表示する際に使用。
/// 和モダンなデザインで、王冠アイコンと共に「Pro版限定」であることを伝える。
class ProLockedScreen extends ConsumerWidget {
final String featureName;
final IconData featureIcon;
final String? description;
const ProLockedScreen({
super.key,
required this.featureName,
required this.featureIcon,
this.description,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
final userProfile = ref.watch(userProfileProvider);
final appColors = Theme.of(context).colorScheme;
// デフォルトの説明文を生成
final String displayDescription = description ?? _getDefaultDescription(featureName, userProfile.locale);
return Scaffold(
appBar: AppBar(
title: Text(featureName),
backgroundColor: Colors.transparent,
elevation: 0,
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(32.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 機能アイコン(グレーアウト)
Icon(
featureIcon,
size: 64,
color: appColors.onSurface.withValues(alpha: 0.3),
),
const SizedBox(height: 24),
// 王冠アイコン(和モダンな細いライン)
Icon(
LucideIcons.crown,
size: 48,
color: appColors.primary.withValues(alpha: 0.7),
),
const SizedBox(height: 16),
// Pro版限定メッセージ
Text(
userProfile.locale == 'ja'
? 'Pro版限定機能'
: 'Pro Version Only',
style: TextStyle(
fontSize: 24,
fontWeight: FontWeight.w600,
color: appColors.onSurface,
),
),
const SizedBox(height: 8),
// 機能名
Text(
featureName,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: appColors.primary,
),
textAlign: TextAlign.center,
),
const SizedBox(height: 24),
// 説明文
Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
color: appColors.primary.withValues(alpha: 0.05),
borderRadius: BorderRadius.circular(16),
border: Border.all(
color: appColors.primary.withValues(alpha: 0.2),
width: 1,
),
),
child: Text(
displayDescription,
style: TextStyle(
fontSize: 14,
height: 1.6,
color: appColors.onSurface.withValues(alpha: 0.8),
),
textAlign: TextAlign.center,
),
),
const SizedBox(height: 32),
// Pro版へのアップグレード案内将来実装用
TextButton.icon(
onPressed: () {
// TODO: Pro版購入画面への遷移Phase 2で実装
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
userProfile.locale == 'ja'
? 'Pro版は近日公開予定です'
: 'Pro version coming soon',
),
duration: const Duration(seconds: 2),
),
);
},
icon: const Icon(LucideIcons.sparkles, size: 18),
label: Text(
userProfile.locale == 'ja'
? 'Pro版について'
: 'About Pro Version',
style: const TextStyle(fontSize: 16),
),
style: TextButton.styleFrom(
foregroundColor: appColors.primary,
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
),
),
],
),
),
),
);
}
/// 機能名に応じたデフォルト説明文を生成
String _getDefaultDescription(String featureName, String locale) {
if (locale == 'ja') {
return 'この機能はPonshu Room Pro版でご利用いただけます。\n'
'Pro版では、より充実した酒ライフをサポートする\n'
'多彩な機能をお楽しみいただけます。';
} else {
return 'This feature is available in Ponshu Room Pro.\n'
'Enjoy enhanced sake experience with\n'
'a wide range of premium features.';
}
}
}