import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/navigation_provider.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 Scaffold( appBar: AppBar(title: const Text('服务包详情')), body: const Center(child: Text('未找到该服务包')), ); } return Scaffold( backgroundColor: AppTheme.bg, appBar: AppBar( title: Text(package.title, style: const TextStyle(fontSize: 16)), 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), ), 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: 12, color: Colors.white, fontWeight: FontWeight.w600)), ), const SizedBox(height: 12), Text(package.title, style: const TextStyle(fontSize: 22, fontWeight: FontWeight.w700, color: Colors.white)), const SizedBox(height: 8), Text(package.subtitle, style: TextStyle(fontSize: 14, 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: 22, color: AppTheme.primary), ), const SizedBox(height: 6), Text(s.label, style: const TextStyle(fontSize: 12, color: AppTheme.textSub), textAlign: TextAlign.center), ], ), )).toList(), ), ), // 适用人群 _Section(title: '适用人群', child: Text(package.targetAudience, style: const TextStyle(fontSize: 14, color: AppTheme.textSub, height: 1.6))), // 详细说明 ...package.detailSections.map((s) => _Section(title: s.title, child: Text(s.content, style: const TextStyle(fontSize: 14, 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), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(title, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: AppTheme.text)), const SizedBox(height: 10), child, ], ), ); } }