2024-12-19 08:53:16 +04:00

110 lines
3.1 KiB
Dart

part of 'home_page.dart';
typedef OnKnowCallBack = void Function(String? id, String title, bool isKnow)?;
// Класс карточки
class _Card extends StatelessWidget {
final String word;
final String translation;
final String image;
final int mark;
final OnKnowCallBack onKnow;
final VoidCallback? onTap;
final String? id;
final isKnown;
const _Card({
required this.word,
required this.translation,
required this.image,
this.mark = 0,
this.onKnow,
this.onTap,
this.id,
this.isKnown = false,
});
factory _Card.fromData(
CardData data, {
OnKnowCallBack? onKnow,
VoidCallback? onTap,
bool isKnown = false,
}) =>
_Card(
word: data.word,
translation: data.translation,
image: data.image ?? "",
mark: data.mark,
onKnow: onKnow,
onTap: onTap,
id: data.id,
isKnown: isKnown,
);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onTap,
child: Container(
constraints: const BoxConstraints(minHeight: 140, maxWidth: 240),
padding: const EdgeInsets.all(20),
margin: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.black12,
borderRadius: BorderRadius.circular(10),
),
child: LayoutBuilder(builder: (context, constraints) {
double imageWidth = constraints.maxWidth;
{
return Stack(
children: [
Column(
children: [
Column(
children: [
Image.network(image, width: 300),
Text(
word,
style: Theme.of(context).textTheme.headlineLarge,
),
Text(
translation,
style: Theme.of(context).textTheme.bodyMedium,
),
],
),
Align(
alignment: Alignment.bottomRight,
child: Padding(
padding: const EdgeInsets.only(left: 8.0),
child: GestureDetector(
onTap: () => onKnow?.call(id, word, isKnown),
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 200),
child: isKnown
? const Icon(Icons.check_circle,
color: Colors.green, key: ValueKey(0))
: const Icon(Icons.check_circle_outline, key: ValueKey(1)),
),
),
),
),
],
),
Align(
alignment: Alignment.center,
)
],
);
}
})),
);
}
}