premium_benefit_list_view.dart 3.76 KB
import 'package:doublefeel_flutter/r.dart';
import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
import 'package:flutter/material.dart';

class PremiumBenefitListItem {
  const PremiumBenefitListItem({required this.title, required this.iconAsset});

  final String title;
  final String iconAsset;
}

class PremiumBenefitListView extends StatelessWidget {
  const PremiumBenefitListView({super.key, this.benefits});

  final List<PremiumBenefitListItem>? benefits;

  @override
  Widget build(BuildContext context) {
    final benefitItems = benefits ?? _defaultBenefits(context);

    return Container(
      margin: const EdgeInsets.symmetric(horizontal: 16),
      padding: const EdgeInsets.symmetric(vertical: 8),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(16),
      ),
      child: Column(
        children: [
          for (final benefit in benefitItems)
            _PremiumBenefitItemView(benefit: benefit),
        ],
      ),
    );
  }

  List<PremiumBenefitListItem> _defaultBenefits(BuildContext context) => [
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitRealtimeStress,
          iconAsset: R.assetsImagesPremiumBenefitRealtimeStress,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitStressTrends,
          iconAsset: R.assetsImagesPremiumBenefitStressTrends,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitActivityTrends,
          iconAsset: R.assetsImagesPremiumBenefitActivityTrends,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitSleepReports,
          iconAsset: R.assetsImagesPremiumBenefitSleepReports,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitHealthSync,
          iconAsset: R.assetsImagesPremiumBenefitHealthSync,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitContactNotifications,
          iconAsset: R.assetsImagesPremiumBenefitContactNotifications,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitCustomWatchFace,
          iconAsset: R.assetsImagesPremiumBenefitCustomWatchFace,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitSleepAnalysis,
          iconAsset: R.assetsImagesPremiumBenefitSleepAnalysis,
        ),
        PremiumBenefitListItem(
          title: context.l10n.purchaseBenefitFutureFeatures,
          iconAsset: R.assetsImagesPremiumBenefitFutureFeatures,
        ),
      ];
}

class _PremiumBenefitItemView extends StatelessWidget {
  const _PremiumBenefitItemView({required this.benefit});

  static const _titleColor = Color(0xFF0F0F11);

  final PremiumBenefitListItem benefit;

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: 34,
      child: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 16),
        child: Row(
          children: [
            Image.asset(
              benefit.iconAsset,
              width: 16,
              height: 16,
              fit: BoxFit.contain,
            ),
            const SizedBox(width: 8),
            Expanded(
              child: Text(
                benefit.title,
                maxLines: 1,
                overflow: TextOverflow.ellipsis,
                style: const TextStyle(
                  color: _titleColor,
                  fontSize: 13,
                  height: 1.2,
                ),
              ),
            ),
            const SizedBox(width: 8),
            Image.asset(
              R.assetsImagesPremiumBenefitCheck,
              width: 20,
              height: 20,
              fit: BoxFit.contain,
            ),
          ],
        ),
      ),
    );
  }
}