didvan-app/lib/pages/home/news/widgets/news_item.dart

78 lines
2.4 KiB
Dart

import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/news_overview.dart';
import 'package:didvan/pages/home/news/news_state.dart';
import 'package:didvan/routes/routes.dart';
import 'package:didvan/widgets/didvan/card.dart';
import 'package:didvan/widgets/didvan/divider.dart';
import 'package:didvan/widgets/didvan/icon_button.dart';
import 'package:didvan/widgets/didvan/text.dart';
import 'package:didvan/widgets/skeletun_image.dart';
import 'package:flutter/material.dart';
import 'package:persian_number_utility/persian_number_utility.dart';
import 'package:provider/provider.dart';
class NewsItem extends StatelessWidget {
final NewsOverview news;
const NewsItem({Key? key, required this.news}) : super(key: key);
@override
Widget build(BuildContext context) {
final state = context.read<NewsState>();
return DidvanCard(
onTap: () => Navigator.of(context).pushNamed(
Routes.radarDetails,
arguments: {
'state': state,
'id': news.id,
},
),
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: [
DidvanText(
'${news.reference} | ${DateTime.parse(news.createdAt).toPersianDateStr()}',
style: Theme.of(context).textTheme.overline,
),
DidvanIconButton(
icon: news.marked
? DidvanIcons.bookmark_solid
: DidvanIcons.bookmark_regular,
gestureSize: 32,
onPressed: () => state.markNews(news.id),
),
],
),
],
),
);
}
}