mirror of https://github.com/flutter/samples.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.3 KiB
77 lines
2.3 KiB
// 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),
|
|
],
|
|
),
|
|
);
|