Surface/lib/widgets/feed/feed_reader.dart

68 lines
2.2 KiB
Dart

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:styled_widget/styled_widget.dart';
import 'package:surface/types/news.dart';
import 'package:surface/types/post.dart';
import 'package:surface/widgets/universal_image.dart';
class NewsFeedEntry extends StatelessWidget {
final SnFeedEntry data;
const NewsFeedEntry({super.key, required this.data});
@override
Widget build(BuildContext context) {
final ele = SnSubscriptionItem.fromJson(data.data);
return InkWell(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (ele.thumbnail.isNotEmpty && ele.thumbnail.startsWith('http'))
ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(8)),
child: AspectRatio(
aspectRatio: 16 / 9,
child: Container(
color: Theme.of(context).colorScheme.surfaceContainer,
child: AutoResizeUniversalImage(ele.thumbnail),
),
),
).padding(horizontal: 16, bottom: 8, top: 4),
Row(
children: [
const Icon(Symbols.globe),
const Gap(8),
Expanded(
child: Text(
ele.title,
style: Theme.of(context).textTheme.titleLarge,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
)
],
).padding(horizontal: 18, vertical: 4),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(ele.description),
Text(DateFormat().format(ele.createdAt.toLocal()))
.tr()
.fontSize(13)
.opacity(0.8),
],
).padding(horizontal: 16, vertical: 4),
],
),
onTap: () {
GoRouter.of(context).pushNamed('readerFeedDetail', pathParameters: {
'id': ele.id.toString(),
});
},
);
}
}