import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:qr_flutter/qr_flutter.dart'; import '../../providers/user_providers.dart'; class ReceiveSharesPage extends ConsumerWidget { const ReceiveSharesPage({super.key}); static const Color _orange = Color(0xFFFF6B00); static const Color _green = Color(0xFF10B981); static const Color _darkText = Color(0xFF1F2937); static const Color _grayText = Color(0xFF6B7280); static const Color _bgGray = Color(0xFFF3F4F6); @override Widget build(BuildContext context, WidgetRef ref) { final user = ref.watch(userNotifierProvider); final phone = user.phone ?? ''; final nickname = user.nickname ?? user.realName ?? '股行用户'; return Scaffold( backgroundColor: _bgGray, appBar: AppBar( backgroundColor: Colors.white, elevation: 0, leading: IconButton( icon: const Icon(Icons.arrow_back, color: _darkText), onPressed: () => context.pop(), ), title: const Text( '接收积分值', style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: _darkText, ), ), centerTitle: true, ), body: SingleChildScrollView( child: Column( children: [ const SizedBox(height: 32), // 二维码卡片 _buildQrCodeCard(context, phone, nickname), const SizedBox(height: 24), // 手机号显示 _buildPhoneCard(context, phone), const SizedBox(height: 24), // 使用说明 _buildInstructions(), ], ), ), ); } Widget _buildQrCodeCard(BuildContext context, String phone, String nickname) { return Container( margin: const EdgeInsets.symmetric(horizontal: 32), padding: const EdgeInsets.all(24), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(20), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.05), blurRadius: 20, offset: const Offset(0, 4), ), ], ), child: Column( children: [ // 顶部渐变条 Container( height: 4, margin: const EdgeInsets.only(bottom: 20), decoration: BoxDecoration( gradient: const LinearGradient( colors: [Color(0xFFFF6B00), Color(0xFFFDBA74)], ), borderRadius: BorderRadius.circular(2), ), ), // 用户信息 Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: 48, height: 48, decoration: BoxDecoration( shape: BoxShape.circle, gradient: LinearGradient( colors: [_orange.withOpacity(0.8), _orange], begin: Alignment.topLeft, end: Alignment.bottomRight, ), ), child: Center( child: Text( nickname.isNotEmpty ? nickname[0].toUpperCase() : 'U', style: const TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: Colors.white, ), ), ), ), const SizedBox(width: 12), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( nickname, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: _darkText, ), ), const SizedBox(height: 2), const Text( '扫码向我转账', style: TextStyle( fontSize: 12, color: _grayText, ), ), ], ), ], ), const SizedBox(height: 24), // 二维码 Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), border: Border.all( color: _orange.withOpacity(0.2), width: 2, ), ), child: QrImageView( data: 'durian://transfer/?phone=$phone', version: QrVersions.auto, size: 200, backgroundColor: Colors.white, eyeStyle: const QrEyeStyle( eyeShape: QrEyeShape.square, color: _darkText, ), dataModuleStyle: const QrDataModuleStyle( dataModuleShape: QrDataModuleShape.square, color: _darkText, ), embeddedImage: null, embeddedImageStyle: null, ), ), const SizedBox(height: 16), // 提示文字 const Text( '让对方扫描二维码向您转账', style: TextStyle( fontSize: 14, color: _grayText, ), ), ], ), ); } Widget _buildPhoneCard(BuildContext context, String phone) { return Container( margin: const EdgeInsets.symmetric(horizontal: 32), padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), ), child: Column( children: [ const Text( '或告诉对方您的账号', style: TextStyle( fontSize: 14, color: _grayText, ), ), const SizedBox(height: 12), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( phone, style: const TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: _darkText, letterSpacing: 2, ), ), const SizedBox(width: 12), IconButton( onPressed: () { Clipboard.setData(ClipboardData(text: phone)); ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('手机号已复制'), backgroundColor: _green, duration: Duration(seconds: 1), ), ); }, icon: Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: _orange.withOpacity(0.1), borderRadius: BorderRadius.circular(8), ), child: const Icon( Icons.copy, color: _orange, size: 20, ), ), ), ], ), ], ), ); } Widget _buildInstructions() { return Container( margin: const EdgeInsets.symmetric(horizontal: 32), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: _orange.withOpacity(0.05), borderRadius: BorderRadius.circular(12), ), child: const Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Icon(Icons.info_outline, size: 16, color: _orange), SizedBox(width: 8), Text( '使用说明', style: TextStyle( fontSize: 14, fontWeight: FontWeight.bold, color: _orange, ), ), ], ), SizedBox(height: 8), Text( '1. 让对方使用股行APP扫描二维码\n2. 或者将您的手机号告诉对方\n3. 对方可以通过手机号向您转账', style: TextStyle( fontSize: 12, color: _grayText, height: 1.5, ), ), ], ), ); } }