didvan-app/lib/views/home/main/widgets/podcast_item.dart

129 lines
5.1 KiB
Dart

import 'package:didvan/constants/app_icons.dart';
import 'package:didvan/models/home_page_content/content.dart';
import 'package:didvan/models/requests/studio.dart';
import 'package:didvan/models/studio_details_data.dart';
import 'package:didvan/services/media/media.dart';
import 'package:didvan/views/direct/widgets/audio_widget.dart';
import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart';
import 'package:didvan/views/widgets/didvan/card.dart';
import 'package:didvan/views/widgets/didvan/text.dart';
import 'package:didvan/views/widgets/skeleton_image.dart';
import 'package:flutter/material.dart';
import 'package:persian_number_utility/persian_number_utility.dart';
import 'package:provider/provider.dart';
class MainPagePodcastItem extends StatelessWidget {
final MainPageContentType content;
const MainPagePodcastItem({super.key, required this.content});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () async {
final state = context.read<StudioDetailsState>();
await state.getStudioDetails(
content.id,
args: const StudioRequestArgs(page: 0, type: 'podcast'),
);
MediaService.currentPodcast = state.studio;
MediaService.handleAudioPlayback(
audioSource: content.link,
id: content.id,
isNetworkAudio: true,
isVoiceMessage: false,
);
},
child: Stack(
children: [
const SizedBox(
height: 180,
width: double.infinity,
),
Positioned.fill(
child: Center(
child: DidvanCard(
child: Row(
children: [
SizedBox(
width: MediaQuery.of(context).size.width / 3,
),
SizedBox(
width: MediaQuery.of(context).size.width * 2 / 3 - 90,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width:
MediaQuery.of(context).size.width * 2 / 3 - 90,
child: AudioWidget(
id: content.id,
audioUrl: content.link,
audioMetaData: StudioDetailsData(
id: content.id,
duration: content.duration!,
title: content.title,
description: '',
image: content.image,
link: content.link,
iframe: null,
createdAt: '',
order: 1,
marked: content.marked,
comments: 0,
tags: [],
type: 'podcast',
),
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
DidvanText(
content.title,
style: Theme.of(context).textTheme.bodyLarge,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
Padding(
padding:
const EdgeInsets.symmetric(vertical: 4),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Icon(
DidvanIcons.calendar_day_light,
size: 16,
),
const SizedBox(width: 4),
DidvanText(
DateTime.parse(content.subtitles[0])
.toPersianDateStr(),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style:
Theme.of(context).textTheme.bodySmall,
),
],
),
)
],
),
],
),
),
],
),
),
),
),
SkeletonImage(
width: MediaQuery.of(context).size.width / 3,
height: 180,
imageUrl: content.image,
),
],
),
);
}
}