fix: remove Pro-only placeholder in consumer APK, fix A-1/A-3 visibility

- sake_detail_screen: hide SakeMbtiStampSection when isProVersion=false
  (consumer APK no longer shows Pro版限定 placeholder at card bottom)
- sake_grid_item / sake_list_item: apply Pressable to actual tap targets
  (grid/list cards now animate on press instead of non-interactive LevelTitleCard)
- soul_screen / sommelier_screen: ambient glow alpha 0.07→0.12 for visibility

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Ponshu Developer 2026-04-05 14:33:40 +09:00
parent 17e8d52a67
commit 4758aa5c9c
5 changed files with 23 additions and 15 deletions

View File

@ -105,7 +105,7 @@ class _SommelierScreenState extends ConsumerState<SommelierScreen> {
shape: BoxShape.circle, shape: BoxShape.circle,
gradient: RadialGradient( gradient: RadialGradient(
colors: [ colors: [
Theme.of(context).extension<AppColors>()!.brandAccent.withValues(alpha: 0.07), Theme.of(context).extension<AppColors>()!.brandAccent.withValues(alpha: 0.12),
Colors.transparent, Colors.transparent,
], ],
), ),

View File

@ -18,6 +18,7 @@ import '../widgets/sake_detail/sake_detail_memo.dart';
import '../widgets/sake_detail/sake_detail_specs.dart'; import '../widgets/sake_detail/sake_detail_specs.dart';
import 'sake_detail/widgets/sake_photo_edit_modal.dart'; import 'sake_detail/widgets/sake_photo_edit_modal.dart';
import 'sake_detail/sections/sake_mbti_stamp_section.dart'; import 'sake_detail/sections/sake_mbti_stamp_section.dart';
import '../main.dart' show isProVersion;
import 'sake_detail/sections/sake_basic_info_section.dart'; import 'sake_detail/sections/sake_basic_info_section.dart';
import 'sake_detail/widgets/sake_detail_sliver_app_bar.dart'; import 'sake_detail/widgets/sake_detail_sliver_app_bar.dart';
import '../services/mbti_compatibility_service.dart'; import '../services/mbti_compatibility_service.dart';
@ -265,9 +266,11 @@ class _SakeDetailScreenState extends ConsumerState<SakeDetailScreen> {
const SizedBox(height: 48), const SizedBox(height: 48),
], ],
// MBTI Diagnostic Stamp Section (Phase C3) // MBTI Diagnostic Stamp Section (Pro only)
SakeMbtiStampSection(sake: _sake), if (isProVersion) ...[
const SizedBox(height: 24), SakeMbtiStampSection(sake: _sake),
const SizedBox(height: 24),
],
], ],
), ),
), ),

View File

@ -48,7 +48,7 @@ class _SoulScreenState extends ConsumerState<SoulScreen> {
shape: BoxShape.circle, shape: BoxShape.circle,
gradient: RadialGradient( gradient: RadialGradient(
colors: [ colors: [
appColors.brandPrimary.withValues(alpha: 0.07), appColors.brandPrimary.withValues(alpha: 0.12),
Colors.transparent, Colors.transparent,
], ],
), ),

View File

@ -8,6 +8,7 @@ import '../../theme/app_theme.dart';
import '../../theme/app_colors.dart'; import '../../theme/app_colors.dart';
import '../../providers/ui_experiment_provider.dart'; import '../../providers/ui_experiment_provider.dart';
import 'package:lucide_icons/lucide_icons.dart'; import 'package:lucide_icons/lucide_icons.dart';
import '../common/pressable.dart';
class SakeGridItem extends ConsumerWidget { class SakeGridItem extends ConsumerWidget {
final SakeItem sake; final SakeItem sake;
@ -24,7 +25,8 @@ class SakeGridItem extends ConsumerWidget {
final isSelected = ref.watch(selectedMenuSakeIdsProvider).contains(sake.id); final isSelected = ref.watch(selectedMenuSakeIdsProvider).contains(sake.id);
final appColors = Theme.of(context).extension<AppColors>()!; final appColors = Theme.of(context).extension<AppColors>()!;
return Card( return Pressable(
child: Card(
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
// Highlight selected // Highlight selected
shape: isMenuMode && isSelected shape: isMenuMode && isSelected
@ -198,8 +200,9 @@ class SakeGridItem extends ConsumerWidget {
), ),
), ),
], ],
), ), // Stack
), ), // InkWell
); ), // Card
); // Pressable
} }
} }

View File

@ -7,7 +7,7 @@ import '../../screens/sake_detail_screen.dart';
import '../../theme/app_theme.dart'; import '../../theme/app_theme.dart';
import '../../theme/app_colors.dart'; import '../../theme/app_colors.dart';
import 'package:lucide_icons/lucide_icons.dart'; import 'package:lucide_icons/lucide_icons.dart';
// Haptic via InkWell? No, explicit HapticFeedback used generally. import '../common/pressable.dart';
class SakeListItem extends ConsumerWidget { class SakeListItem extends ConsumerWidget {
final SakeItem sake; final SakeItem sake;
@ -29,9 +29,10 @@ class SakeListItem extends ConsumerWidget {
// Adaptive selection color // Adaptive selection color
final selectedColor = appColors.brandAccent.withValues(alpha: 0.15); final selectedColor = appColors.brandAccent.withValues(alpha: 0.15);
return Card( return Pressable(
child: Card(
clipBehavior: Clip.antiAlias, clipBehavior: Clip.antiAlias,
elevation: 1, // Slight elevation elevation: 1,
color: isMenuMode && isSelected ? selectedColor : null, color: isMenuMode && isSelected ? selectedColor : null,
shape: isMenuMode && isSelected shape: isMenuMode && isSelected
? RoundedRectangleBorder(side: BorderSide(color: appColors.brandAccent, width: 2), borderRadius: BorderRadius.circular(6)) ? RoundedRectangleBorder(side: BorderSide(color: appColors.brandAccent, width: 2), borderRadius: BorderRadius.circular(6))
@ -208,8 +209,9 @@ class SakeListItem extends ConsumerWidget {
), ),
), ),
], ],
), ), // Row
), ), // InkWell
); ), // Card
); // Pressable
} }
} }