import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; /// 构建旅游内容卡片 Widget buildTravelContent( BuildContext context, List> travellist) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '以下是一些推荐搜索结果:', style: TextStyle( color: isDarkMode ? Colors.white.withValues(alpha: 0.9) : Colors.black87, fontSize: 14.sp, height: 1.4, fontWeight: FontWeight.w400, ), ), SizedBox(height: 12.h), Container( padding: EdgeInsets.all(12.w), decoration: BoxDecoration( color: isDarkMode ? const Color(0xFF1E1E1E) : Colors.white, borderRadius: BorderRadius.circular(12.r), boxShadow: [ BoxShadow( color: Colors.black.withValues(alpha: isDarkMode ? 0.2 : 0.03), blurRadius: 3, spreadRadius: 1, offset: const Offset(0, 1), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Row( // children: [ // Icon( // Icons.place, // size: 16, // color: Color(0xFFE11D48), // ), // const SizedBox(width: 6), // Text( // '热门景点 · 东京', // style: TextStyle( // fontSize: 13, // fontWeight: FontWeight.w600, // color: Colors.grey[700], // ), // ), // ], // ), // const SizedBox(height: 10), // 动态生成旅游景点条目 ...travellist.asMap().entries.map((entry) { final index = entry.key; final item = entry.value; final name = item["name"] ?? "未知景点"; //名字 final addr = item["addr"] ?? ""; //地址 // final tag = item["tag"] ?? "未知标签"; //标签 // final rating = item["rating"] ?? ""; //评分 // final distance = item["distance"] ?? ""; //距离 // final images = item["images"] ?? []; // 图片列表 return Column( children: [ buildLocationItem( context, name, addr, ), if (index != travellist.length - 1) Divider( height: 1.h, thickness: 1, color: isDarkMode ? Colors.grey[700] : Colors.grey[100] ), ], ); }).toList(), // // 景点列表 // _buildLocationItem('东京塔', '标志性建筑,可俯瞰东京全景', context), // Divider(height: 1, thickness: 1, color: Colors.grey[100]), // _buildLocationItem('涩谷十字路口', '世界上最繁忙的十字路口之一', context), // Divider(height: 1, thickness: 1, color: Colors.grey[100]), // _buildLocationItem('浅草寺', '东京最古老的寺庙', context), SizedBox(height: 8.h), Center( child: TextButton( onPressed: () {}, style: TextButton.styleFrom( minimumSize: Size.zero, padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 8.h), tapTargetSize: MaterialTapTargetSize.shrinkWrap, ), child: Text( '查看更多景点', style: TextStyle( fontSize: 12.sp, color: Theme.of(context).primaryColor, fontWeight: FontWeight.w500, ), ), ), ), ], ), ), SizedBox(height: 10.h), Row( mainAxisSize: MainAxisSize.min, children: [ Expanded( child: OutlinedButton.icon( onPressed: () {}, icon: Icon(Icons.map, size: 16.sp), label: const Text('查看地图'), style: OutlinedButton.styleFrom( foregroundColor: Theme.of(context).primaryColor, side: BorderSide( color: Theme.of(context).primaryColor.withValues(alpha: 0.5)), padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 4.h), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16.r), ), textStyle: TextStyle(fontSize: 12.sp), ), ), ), SizedBox(width: 8.w), Expanded( child: OutlinedButton.icon( onPressed: () {}, icon: Icon(Icons.bookmark_border, size: 16.sp), label: const Text('保存到收藏'), style: OutlinedButton.styleFrom( foregroundColor: isDarkMode ? Colors.grey[400] : Colors.grey[700], side: BorderSide(color: isDarkMode ? Colors.grey[600]! : Colors.grey[400]!), padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 4.h), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16.r), ), textStyle: TextStyle(fontSize: 12.sp), ), ), ), ], ), ], ); } /// 构建地点项目 Widget buildLocationItem( BuildContext context, String name, String description) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; return Padding( padding: EdgeInsets.symmetric(vertical: 8.h), child: Row( children: [ Container( width: 38.w, height: 38.h, decoration: BoxDecoration( color: isDarkMode ? const Color(0xFF2A2A2A) : Theme.of(context).primaryColor.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(8.r), ), child: Icon( Icons.place, size: 18.sp, color: Theme.of(context).primaryColor, ), ), SizedBox(width: 12.w), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( name, style: TextStyle( fontSize: 13.sp, fontWeight: FontWeight.w500, color: isDarkMode ? Colors.white.withValues(alpha: 0.9) : Colors.grey[800], ), overflow: TextOverflow.ellipsis, ), SizedBox(height: 2.h), Text( description, style: TextStyle( fontSize: 12.sp, color: isDarkMode ? Colors.grey[400] : Colors.grey[600], ), overflow: TextOverflow.ellipsis, ), ], ), ), IconButton( onPressed: () {}, icon: Icon( Icons.arrow_forward, color: isDarkMode ? Colors.grey[500] : Colors.grey[400] ), padding: EdgeInsets.zero, constraints: const BoxConstraints(), iconSize: 20.sp, ), ], ), ); }