MVP I
This commit is contained in:
@@ -38,79 +38,79 @@ final List<VideoData> videoList = [
|
||||
VideoData(
|
||||
id: 1,
|
||||
title: 'Episódio 1',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência do nariz entupido na má oclusão',
|
||||
youtubeId: 'PJ58CZv4ECw',
|
||||
),
|
||||
VideoData(
|
||||
id: 2,
|
||||
title: 'Episódio 2',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência das alergias sazionais na má oclusão',
|
||||
youtubeId: 'y4_kWmZtAtg',
|
||||
),
|
||||
VideoData(
|
||||
id: 3,
|
||||
title: 'Episódio 3',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência das Otites frequentes na má oclusão',
|
||||
youtubeId: 'nD75Y5PuKTo',
|
||||
),
|
||||
VideoData(
|
||||
id: 4,
|
||||
title: 'Episódio 4',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência das Amigdalites recorrentes na má oclusão',
|
||||
youtubeId: 'yvFllWYeuLw',
|
||||
),
|
||||
VideoData(
|
||||
id: 5,
|
||||
title: 'Episódio 5',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência das Bronquiolites recorrentes na má oclusão',
|
||||
youtubeId: 'DnhUa-T8_Ps',
|
||||
),
|
||||
VideoData(
|
||||
id: 6,
|
||||
title: 'Episódio 6',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência dos problemas respitatórios na má oclusão',
|
||||
youtubeId: 'zKt_iwkrjvo',
|
||||
),
|
||||
VideoData(
|
||||
id: 7,
|
||||
title: 'Episódio 7',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência das interrupções respiratórias na má oclusão',
|
||||
youtubeId: 'NpmQ2brap5A',
|
||||
),
|
||||
VideoData(
|
||||
id: 8,
|
||||
title: 'Episódio 8',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência do ressonar na má oclusão',
|
||||
youtubeId: 'Wj3KYw9pBi0',
|
||||
),
|
||||
VideoData(
|
||||
id: 9,
|
||||
title: 'Episódio 9',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência de acordar com saliva seca na boca ou na almofada na saúde oral',
|
||||
youtubeId: 'bOm9t61cT_U',
|
||||
),
|
||||
VideoData(
|
||||
id: 10,
|
||||
title: 'Episódio 10',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a Influência da respiração oral na má oclusão',
|
||||
youtubeId: 'fAitMizbcms',
|
||||
),
|
||||
VideoData(
|
||||
id: 11,
|
||||
title: 'Episódio 11',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a influência do uso exagerado da chupeta na má oclusão',
|
||||
youtubeId: '6sYoBUjks_I',
|
||||
),
|
||||
VideoData(
|
||||
id: 12,
|
||||
title: 'Episódio 12',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a influência do uso exagerado da chupeta na má oclusão',
|
||||
youtubeId: 'eznKrErQbHo',
|
||||
),
|
||||
VideoData(
|
||||
id: 13,
|
||||
title: 'Episódio 13',
|
||||
description: 'Aprenda sobre saúde bucal neste episódio',
|
||||
description: 'Qual a influência do hábito de chuchar o dedo na má oclusão',
|
||||
youtubeId: 'VO9CNqHRdeM',
|
||||
),
|
||||
];
|
||||
@@ -236,32 +236,32 @@ class _VideoScreenState extends State<VideoScreen> {
|
||||
Widget build(BuildContext context) {
|
||||
final size = MediaQuery.sizeOf(context);
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: VideoScreen._teal,
|
||||
foregroundColor: Colors.white,
|
||||
surfaceTintColor: VideoScreen._teal,
|
||||
elevation: 0,
|
||||
flexibleSpace: Container(
|
||||
appBar: PreferredSize(
|
||||
preferredSize: const Size.fromHeight(kToolbarHeight),
|
||||
// O gradiente é pintado por este Container de tamanho fixo, em vez
|
||||
// de confiar no `flexibleSpace` do AppBar — em alguns aparelhos o
|
||||
// `flexibleSpace` de um AppBar comum não recebia o tamanho esperado
|
||||
// e a gradiente aparecia como cor sólida.
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(gradient: kAppBarGradient),
|
||||
),
|
||||
title: const Text(
|
||||
'Videos Educativos',
|
||||
style: TextStyle(fontWeight: FontWeight.w900),
|
||||
child: AppBar(
|
||||
backgroundColor: Colors.transparent,
|
||||
foregroundColor: Colors.white,
|
||||
surfaceTintColor: Colors.transparent,
|
||||
elevation: 0,
|
||||
scrolledUnderElevation: 0,
|
||||
title: const Text(
|
||||
'Videos Educativos',
|
||||
style: TextStyle(fontWeight: FontWeight.w900),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Stack(
|
||||
clipBehavior: Clip.none,
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [Color(0xFFFFE6F1), Color(0xFFFFC9DF)],
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Container(color: const Color(0xFFFAFAF7)),
|
||||
),
|
||||
Positioned(
|
||||
left: -size.width * 0.40,
|
||||
@@ -548,27 +548,84 @@ class _VideoButton extends StatelessWidget {
|
||||
return TapBounce(
|
||||
scale: 0.95,
|
||||
child: Material(
|
||||
elevation: 8,
|
||||
shadowColor: Colors.black.withValues(alpha: 0.12),
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
elevation: 10,
|
||||
shadowColor: Colors.black.withValues(alpha: 0.18),
|
||||
borderRadius: BorderRadius.circular(18),
|
||||
color: Colors.white,
|
||||
child: InkWell(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
borderRadius: BorderRadius.circular(18),
|
||||
onTap: () => _showVideoPlayer(context, video),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(12),
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
height: 80,
|
||||
decoration: BoxDecoration(
|
||||
color: const Color(0xFFFFE6F1),
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
AspectRatio(
|
||||
aspectRatio: 16 / 9,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
children: [
|
||||
ColoredBox(
|
||||
color: const Color(0xFFFFE6F1),
|
||||
child: VideoThumbnail(video: video, borderRadius: 0),
|
||||
),
|
||||
DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [
|
||||
Colors.transparent,
|
||||
Colors.black.withValues(alpha: 0.32),
|
||||
],
|
||||
stops: const [0.55, 1.0],
|
||||
),
|
||||
),
|
||||
),
|
||||
Center(
|
||||
child: Container(
|
||||
width: 34,
|
||||
height: 34,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white.withValues(alpha: 0.92),
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.play_arrow_rounded,
|
||||
color: VideoScreen._accentPink,
|
||||
size: 20,
|
||||
),
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
left: 6,
|
||||
bottom: 6,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 6,
|
||||
vertical: 2,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withValues(alpha: 0.5),
|
||||
borderRadius: BorderRadius.circular(999),
|
||||
),
|
||||
child: Text(
|
||||
'EP. ${video.id}',
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontSize: 9.5,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
child: VideoThumbnail(video: video),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
video.title,
|
||||
style: const TextStyle(
|
||||
|
||||
Reference in New Issue
Block a user