// Copyright 2024 The Flutter team. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import '../../../domain/models/destination/destination.dart'; import '../../../utils/image_error_listener.dart'; import '../../core/ui/tag_chip.dart'; class ResultCard extends StatelessWidget { const ResultCard({super.key, required this.destination, required this.onTap}); final Destination destination; final GestureTapCallback onTap; @override Widget build(BuildContext context) { return ClipRRect( borderRadius: BorderRadius.circular(10.0), child: Stack( fit: StackFit.expand, children: [ CachedNetworkImage( imageUrl: destination.imageUrl, fit: BoxFit.fitHeight, errorWidget: (context, url, error) => const Icon(Icons.error), errorListener: imageErrorListener, ), Positioned( bottom: 12.0, left: 12.0, right: 12.0, child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(destination.name.toUpperCase(), style: _cardTitleStyle), const SizedBox(height: 6), Wrap( spacing: 4.0, runSpacing: 4.0, direction: Axis.horizontal, children: destination.tags .map((e) => TagChip(tag: e)) .toList(), ), ], ), ), // Handle taps Positioned.fill( child: Material( color: Colors.transparent, child: InkWell(onTap: onTap), ), ), ], ), ); } } final _cardTitleStyle = GoogleFonts.rubik( textStyle: const TextStyle( fontWeight: FontWeight.w800, fontSize: 15.0, color: Colors.white, letterSpacing: 1, shadows: [ // Helps to read the text a bit better Shadow(blurRadius: 3.0, color: Colors.black), ], ), );