import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/app_colors.dart'; import '../../core/app_theme.dart'; import '../../widgets/service_package_card.dart'; class ServicePackageDetailPage extends ConsumerWidget { final String packageId; const ServicePackageDetailPage({super.key, required this.packageId}); @override Widget build(BuildContext context, WidgetRef ref) { final package = servicePackages.where((p) => p.id == packageId).firstOrNull; if (package == null) { return GradientScaffold( appBar: AppBar(title: const Text('服务包详情')), body: const Center(child: Text('未找到该服务包')), ); } return GradientScaffold( appBar: AppBar( title: Text(package.title, style: const TextStyle(fontSize: 19)), centerTitle: true, ), body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // 头部卡片 Container( width: double.infinity, margin: const EdgeInsets.fromLTRB(16, 16, 16, 0), padding: const EdgeInsets.all(20), decoration: BoxDecoration( gradient: LinearGradient( colors: [ package.headerColor, package.headerColor.withAlpha(180), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.circular(20), boxShadow: AppColors.cardShadow, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.symmetric( horizontal: 10, vertical: 4, ), decoration: BoxDecoration( color: Colors.white.withAlpha(40), borderRadius: BorderRadius.circular(6), ), child: const Text( 'VIP 产品权益', style: TextStyle( fontSize: 15, color: Colors.white, fontWeight: FontWeight.w600, ), ), ), const SizedBox(height: 12), Text( package.title, style: const TextStyle( fontSize: 25, fontWeight: FontWeight.w700, color: Colors.white, ), ), const SizedBox(height: 8), Text( package.subtitle, style: TextStyle( fontSize: 17, color: Colors.white.withAlpha(200), ), ), ], ), ), // 服务图标 Padding( padding: const EdgeInsets.all(20), child: Wrap( spacing: 16, runSpacing: 16, children: package.services .map( (s) => SizedBox( width: (MediaQuery.of(context).size.width - 72) / 4, child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( width: 48, height: 48, decoration: BoxDecoration( color: AppTheme.primaryLight, borderRadius: BorderRadius.circular(14), ), child: Icon( s.icon, size: 25, color: AppTheme.primary, ), ), const SizedBox(height: 6), Text( s.label, style: const TextStyle( fontSize: 15, color: AppTheme.textSub, ), textAlign: TextAlign.center, ), ], ), ), ) .toList(), ), ), // 适用人群 _Section( title: '适用人群', child: Text( package.targetAudience, style: const TextStyle( fontSize: 17, color: AppTheme.textSub, height: 1.6, ), ), ), // 详细说明 ...package.detailSections.map( (s) => _Section( title: s.title, child: Text( s.content, style: const TextStyle( fontSize: 17, color: AppTheme.textSub, height: 1.6, ), ), ), ), const SizedBox(height: 40), ], ), ), ); } } class _Section extends StatelessWidget { final String title; final Widget child; const _Section({required this.title, required this.child}); @override Widget build(BuildContext context) { return Container( width: double.infinity, margin: const EdgeInsets.fromLTRB(16, 16, 16, 0), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), border: Border.all(color: AppColors.border), boxShadow: AppColors.cardShadowLight, ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: const TextStyle( fontSize: 19, fontWeight: FontWeight.w600, color: AppTheme.text, ), ), const SizedBox(height: 10), child, ], ), ); } }