import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; import '../../../config/app_config.dart'; import '../../../constants/app_constants.dart'; import '../../../services/get/theme_controller.dart'; /// 时间: 2026-03-26 /// 功能: 了解我们页面 /// 介绍: 展示开发者信息、团队信息、官网和备案号 /// 最新变化: 新建页面 class LearnUsPage extends StatelessWidget { const LearnUsPage({super.key}); @override Widget build(BuildContext context) { final themeController = Get.find(); return Obx(() { final isDark = themeController.isDarkMode; final primaryColor = themeController.currentThemeColor; return Scaffold( backgroundColor: isDark ? const Color(0xFF1A1A1A) : const Color(0xFFF5F5F5), appBar: AppBar( title: Text( '了解我们', style: TextStyle(color: primaryColor, fontWeight: FontWeight.bold), ), backgroundColor: isDark ? const Color(0xFF2A2A2A) : Colors.white, elevation: 0, centerTitle: true, leading: IconButton( icon: Icon(Icons.arrow_back, color: primaryColor), onPressed: () => Navigator.of(context).pop(), ), ), body: ListView( padding: const EdgeInsets.all(16), children: [ _buildHeaderCard(), const SizedBox(height: 16), _buildOfficialSiteCard(isDark), const SizedBox(height: 16), _buildQQGroupCard(context, isDark), const SizedBox(height: 16), _buildDeveloperCard(context, isDark), const SizedBox(height: 16), _buildTeamCard(isDark), const SizedBox(height: 16), _buildIcpCard(context, isDark), const SizedBox(height: 24), _buildBottomIndicator(isDark), ], ), ); }); } Widget _buildHeaderCard() { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; return Container( padding: const EdgeInsets.all(24), decoration: BoxDecoration( gradient: LinearGradient( colors: [ primaryColor.withAlpha(200), primaryColor, primaryColor.withAlpha(150), ], begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: primaryColor.withAlpha(30), blurRadius: 12, offset: const Offset(0, 4), ), ], ), child: Row( children: [ Container( width: 70, height: 70, decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.2), borderRadius: BorderRadius.circular(18), ), child: const Center( child: Text('📖', style: TextStyle(fontSize: 36)), ), ), const SizedBox(width: 20), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( '情景诗词', style: TextStyle( fontSize: 26, fontWeight: FontWeight.bold, color: Colors.white, ), ), const SizedBox(height: 6), Text( '在诗词里旅行,在文化中生长', style: TextStyle( fontSize: 13, color: Colors.white.withValues(alpha: 0.85), ), ), const SizedBox(height: 12), Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 6, ), decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.2), borderRadius: BorderRadius.circular(16), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( Icons.code, size: 14, color: Colors.white.withValues(alpha: 0.9), ), const SizedBox(width: 6), Text( '版本 ${AppConfig.appVersion}', style: const TextStyle( fontSize: 12, color: Colors.white, ), ), ], ), ), ], ), ), ], ), ); } Widget _buildOfficialSiteCard(bool isDark) { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; return Container( decoration: BoxDecoration( color: isDark ? const Color(0xFF2A2A2A) : Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: isDark ? Colors.black.withAlpha(30) : Colors.black.withAlpha(5), blurRadius: 10, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: primaryColor.withAlpha(10), borderRadius: BorderRadius.circular(8), ), child: Icon(Icons.language, color: primaryColor, size: 20), ), const SizedBox(width: 12), Text( '官方网站', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isDark ? Colors.white : Colors.black, ), ), ], ), ), Divider(height: 1, color: isDark ? Colors.grey[800] : null), Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '访问我们的官方网站了解更多信息', style: TextStyle( fontSize: 13, color: isDark ? Colors.grey[400] : Colors.grey, ), ), const SizedBox(height: 12), _buildWebsiteItem( 'https://poe.vogov.cn/app.html', '官方APP页', isDark, primaryColor, ), const SizedBox(height: 12), _buildWebsiteItem( 'https://poe.vogov.cn/', '情景诗词在线版', isDark, primaryColor, ), ], ), ), ], ), ); } Widget _buildWebsiteItem( String url, String label, bool isDark, Color primaryColor, ) { return Container( width: double.infinity, padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: isDark ? const Color(0xFF3A3A3A) : Colors.grey[50], borderRadius: BorderRadius.circular(8), border: Border.all( color: isDark ? Colors.grey[700]!.withAlpha(20) : Colors.grey.withAlpha(20), ), ), child: Row( children: [ Icon(Icons.link, size: 16, color: primaryColor), const SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( label, style: TextStyle( fontSize: 12, color: isDark ? Colors.grey[400] : Colors.grey, ), ), Text(url, style: TextStyle(fontSize: 14, color: primaryColor)), ], ), ), const SizedBox(width: 8), GestureDetector( onTap: () { Clipboard.setData(ClipboardData(text: url)); Get.snackbar( '复制成功', '链接已复制到剪贴板', duration: const Duration(seconds: 2), colorText: primaryColor, snackPosition: SnackPosition.BOTTOM, borderRadius: 8, margin: const EdgeInsets.all(16), ); }, child: Container( padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: primaryColor.withAlpha(10), borderRadius: BorderRadius.circular(4), ), child: Icon(Icons.content_copy, size: 16, color: primaryColor), ), ), ], ), ); } Widget _buildQQGroupCard(BuildContext context, bool isDark) { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; return Container( decoration: BoxDecoration( color: isDark ? const Color(0xFF2A2A2A) : Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: isDark ? Colors.black.withAlpha(30) : Colors.black.withAlpha(5), blurRadius: 10, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: primaryColor.withAlpha(10), borderRadius: BorderRadius.circular(8), ), child: Icon(Icons.group, color: primaryColor, size: 20), ), const SizedBox(width: 12), Text( 'QQ交流群', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isDark ? Colors.white : Colors.black, ), ), ], ), ), Divider(height: 1, color: isDark ? Colors.grey[800] : null), Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '加入我们的QQ交流群,与其他诗词爱好者一起交流', style: TextStyle( fontSize: 13, color: isDark ? Colors.grey[400] : Colors.grey, ), ), const SizedBox(height: 12), InkWell( onTap: () => _copyQQGroupNumber(context), borderRadius: BorderRadius.circular(8), child: Container( width: double.infinity, padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: isDark ? const Color(0xFF3A3A3A) : Colors.grey[50], borderRadius: BorderRadius.circular(8), border: Border.all(color: primaryColor.withAlpha(30)), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.content_copy, size: 16, color: primaryColor), const SizedBox(width: 8), Text( '271129018', style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: primaryColor, ), ), ], ), ), ), const SizedBox(height: 8), Text( '💡 点击群号可复制', style: TextStyle( fontSize: 12, color: isDark ? Colors.grey[500] : Colors.grey[500], ), ), ], ), ), ], ), ); } void _copyQQGroupNumber(BuildContext context) { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; Clipboard.setData(const ClipboardData(text: '271129018')); Get.snackbar( '复制成功', 'QQ群号已复制到剪贴板', duration: const Duration(seconds: 2), colorText: primaryColor, snackPosition: SnackPosition.BOTTOM, borderRadius: 8, margin: const EdgeInsets.all(16), icon: Icon(Icons.check_circle, color: primaryColor, size: 20), ); } Widget _buildDeveloperCard(BuildContext context, bool isDark) { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; return Container( decoration: BoxDecoration( color: isDark ? const Color(0xFF2A2A2A) : Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: isDark ? Colors.black.withAlpha(30) : Colors.black.withAlpha(5), blurRadius: 10, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: primaryColor.withAlpha(10), borderRadius: BorderRadius.circular(8), ), child: Icon(Icons.business, color: primaryColor, size: 20), ), const SizedBox(width: 12), Text( '开发者', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isDark ? Colors.white : Colors.black, ), ), ], ), ), Divider(height: 1, color: isDark ? Colors.grey[800] : null), Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Container( width: 50, height: 50, decoration: BoxDecoration( gradient: LinearGradient( colors: [ primaryColor.withAlpha(10), primaryColor.withAlpha(5), ], ), borderRadius: BorderRadius.circular(12), ), child: const Center( child: Text('🏢', style: TextStyle(fontSize: 24)), ), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '微风暴工作室', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isDark ? Colors.white : Colors.black, ), ), const SizedBox(height: 4), Text( '专注文字文化领域', style: TextStyle( fontSize: 13, color: isDark ? Colors.grey[400] : Colors.grey[600], ), ), ], ), ), ], ), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: Row( children: [ Container( width: 40, height: 40, decoration: BoxDecoration( gradient: LinearGradient( colors: [ Colors.blue.withValues(alpha: 0.1), Colors.blue.withValues(alpha: 0.05), ], ), borderRadius: BorderRadius.circular(8), ), child: const Center( child: Icon(Icons.email, color: Colors.blue, size: 20), ), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '商务合作&侵权申诉&联系我们', style: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: isDark ? Colors.white : Colors.black, ), ), const SizedBox(height: 2), const Text( '2821981550@qq.com', style: TextStyle( fontSize: 15, color: Colors.blue, decoration: TextDecoration.underline, ), ), ], ), ), ], ), ), Padding( padding: const EdgeInsets.fromLTRB(16, 8, 16, 16), child: Row( children: [ Container( width: 50, height: 50, decoration: BoxDecoration( gradient: LinearGradient( colors: [ const Color(0xFF07C160).withValues(alpha: 0.1), const Color(0xFF07C160).withValues(alpha: 0.05), ], ), borderRadius: BorderRadius.circular(12), ), child: const Center( child: Text('💬', style: TextStyle(fontSize: 24)), ), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '微信公众号', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isDark ? Colors.white : Colors.black, ), ), const SizedBox(height: 4), Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 6, ), decoration: BoxDecoration( color: const Color(0xFF07C160).withValues(alpha: 0.1), borderRadius: BorderRadius.circular(8), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ const Icon( Icons.search, size: 16, color: Color(0xFF07C160), ), const SizedBox(width: 6), const Text( '微风暴', style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: Color(0xFF07C160), ), ), const SizedBox(width: 8), GestureDetector( onTap: () { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; Clipboard.setData( const ClipboardData(text: '微风暴'), ); Get.snackbar( '复制成功', '已复制到剪贴板', duration: const Duration(seconds: 2), colorText: primaryColor, snackPosition: SnackPosition.BOTTOM, borderRadius: 8, margin: const EdgeInsets.all(16), ); }, child: Icon( Icons.content_copy, size: 16, color: const Color( 0xFF07C160, ).withValues(alpha: 0.8), ), ), ], ), ), ], ), ), ], ), ), ], ), ); } Widget _buildTeamCard(bool isDark) { return Container( decoration: BoxDecoration( color: isDark ? const Color(0xFF2A2A2A) : Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: isDark ? Colors.black.withValues(alpha: 0.3) : Colors.black.withValues(alpha: 0.05), blurRadius: 10, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.purple.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(8), ), child: Icon(Icons.group, color: Colors.purple[700], size: 20), ), const SizedBox(width: 12), Text( '团队信息(Team)', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isDark ? Colors.white : Colors.black, ), ), ], ), ), _buildTeamMember( '💻', '程序设计', '无书的书🤡', '尽毕生所学,取天下之诗集,只为逗她一笑', isDark, ), _buildTeamMember('🎨', 'UI/UX/Testing', 'Ayk', '姥头乐也疯狂', isDark), _buildTeamMember('⚙️', '后端', '伯乐不相马', '真的吗,还是做不到吗?', isDark), _buildTeamMember('🔧', '技术支持', '闲言app', '闲言app原班人马打造', isDark), ], ), ); } Widget _buildTeamMember( String emoji, String role, String name, String signature, bool isDark, ) { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; return Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), child: Row( children: [ Container( width: 44, height: 44, decoration: BoxDecoration( color: isDark ? const Color(0xFF3A3A3A) : Colors.grey[100], borderRadius: BorderRadius.circular(10), ), child: Center( child: Text(emoji, style: const TextStyle(fontSize: 20)), ), ), const SizedBox(width: 12), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Text( role, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: isDark ? Colors.white : Colors.black, ), ), const SizedBox(width: 8), Container( padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 2, ), decoration: BoxDecoration( color: primaryColor.withAlpha(10), borderRadius: BorderRadius.circular(10), ), child: Text( name, style: TextStyle(fontSize: 11, color: primaryColor), ), ), ], ), const SizedBox(height: 4), Text( signature, style: TextStyle( fontSize: 12, color: isDark ? Colors.grey[400] : Colors.grey[600], ), ), ], ), ), ], ), ); } Widget _buildIcpCard(BuildContext context, bool isDark) { final themeController = Get.find(); final primaryColor = themeController.currentThemeColor; return Container( decoration: BoxDecoration( color: isDark ? const Color(0xFF2A2A2A) : Colors.white, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: isDark ? Colors.black.withValues(alpha: 0.3) : Colors.black.withValues(alpha: 0.05), blurRadius: 10, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.all(16), child: Row( children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.orange.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(8), ), child: Icon( Icons.verified, color: Colors.orange[700], size: 20, ), ), const SizedBox(width: 12), Text( 'ICP备案信息', style: TextStyle( fontSize: 16, fontWeight: FontWeight.bold, color: isDark ? Colors.white : Colors.black, ), ), ], ), ), Divider(height: 1, color: isDark ? Colors.grey[800] : null), Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( onTap: () { Clipboard.setData( const ClipboardData(text: '滇ICP备2022000863号-13'), ); Get.snackbar( '复制成功', '备案号已复制到剪贴板', duration: const Duration(seconds: 1), colorText: primaryColor, ); }, child: Row( children: [ Expanded( child: Text( '滇ICP备2022000863号-15A', style: TextStyle( fontSize: 14, color: isDark ? Colors.grey[300] : Colors.grey[700], decoration: TextDecoration.underline, decorationColor: isDark ? Colors.grey[400] : Colors.grey[600], ), ), ), Icon( Icons.copy, size: 16, color: isDark ? Colors.grey[400] : Colors.grey[600], ), ], ), ), const SizedBox(height: 4), Text( 'APP核准备案号', style: TextStyle( fontSize: 13, color: isDark ? Colors.grey[400] : Colors.grey[600], ), ), ], ), ), ], ), ); } Widget _buildBottomIndicator(bool isDark) { return Container( padding: const EdgeInsets.symmetric(vertical: 24), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: 40, height: 1, color: isDark ? Colors.grey[700] : Colors.grey[300], ), Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Text( '到底了', style: TextStyle( fontSize: 12, color: isDark ? Colors.grey[500] : Colors.grey[400], ), ), ), Container( width: 40, height: 1, color: isDark ? Colors.grey[700] : Colors.grey[300], ), ], ), ); } }