didvan-app/lib/pages/home/widgets/news_overview.dart

88 lines
2.6 KiB
Dart

import 'package:didvan/models/news_overview.dart';
import 'package:didvan/models/requests/news.dart';
import 'package:didvan/routes/routes.dart';
import 'package:didvan/utils/date_time.dart';
import 'package:didvan/widgets/bookmark_button.dart';
import 'package:didvan/widgets/didvan/card.dart';
import 'package:didvan/widgets/didvan/divider.dart';
import 'package:didvan/widgets/didvan/text.dart';
import 'package:didvan/widgets/skeleton_image.dart';
import 'package:flutter/material.dart';
class NewsOverview extends StatelessWidget {
final NewsOverviewData news;
final NewsRequestArgs? newsRequestArgs;
final void Function(int id, bool value) onMarkChanged;
const NewsOverview({
Key? key,
required this.news,
required this.onMarkChanged,
this.newsRequestArgs,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return DidvanCard(
onTap: () => Navigator.of(context).pushNamed(
Routes.newsDetails,
arguments: {
'onMarkChanged': onMarkChanged,
'id': news.id,
'args': newsRequestArgs,
},
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
SkeletonImage(
imageUrl: news.image,
width: 64,
height: 64,
),
const SizedBox(width: 8),
Expanded(
child: SizedBox(
height: 64,
child: DidvanText(
news.title,
style: Theme.of(context).textTheme.bodyText1,
),
),
),
],
),
const SizedBox(height: 8),
DidvanText(
news.description,
maxLines: 3,
),
const DidvanDivider(verticalPadding: 8),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
DidvanText(
news.reference,
style: Theme.of(context).textTheme.caption,
),
DidvanText(
' - ' + DateTimeUtils.momentGenerator(news.createdAt),
style: Theme.of(context).textTheme.caption,
),
],
),
BookmarkButton(
value: news.marked,
onMarkChanged: (value) => onMarkChanged(news.id, value),
),
],
),
],
),
);
}
}