CKT String|Colors

This commit is contained in:
Carlos Correia
2026-07-15 19:13:15 +01:00
parent 3214a07779
commit a8af2c6845
35 changed files with 1390 additions and 688 deletions

View File

@@ -1,10 +1,12 @@
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import '../widgets/app_gradients.dart';
import '../colors/app_gradients.dart';
import '../strings/credits_strings.dart';
import '../widgets/entrance.dart';
const Color _pink = Color(0xFFFF55A7);
const Color _teal = Color(0xFF2F9E94);
const Color _pink = AppColors.pink;
const Color _teal = AppColors.teal;
class _CreditPerson {
const _CreditPerson(this.name, this.role, {this.logoPath});
@@ -25,21 +27,27 @@ class _CreditSection {
}
const List<_CreditSection> _kCreditSections = [
_CreditSection('Criadora original', [
_CreditPerson('Francisca Salgado Ferreira Pacheco Silva', 'Criadora original'),
_CreditSection(CreditsStrings.originalCreatorSection, [
_CreditPerson(
'Francisca Salgado Ferreira Pacheco Silva',
CreditsStrings.originalCreatorRole,
),
]),
_CreditSection('Desenvolvimento informático', [
_CreditPerson('Carlos Correia', 'Desenvolvedor'),
_CreditPerson('Fábio Ceia', 'Desenvolvedor'),
_CreditPerson('Ruben Grandra', 'Desenvolvedor'),
_CreditPerson('Dinis Maria', 'Desenvolvedor'),
_CreditSection(CreditsStrings.developmentSection, [
_CreditPerson('Carlos Correia', CreditsStrings.developerRole),
_CreditPerson('Fábio Ceia', CreditsStrings.developerRole),
_CreditPerson('Ruben Grandra', CreditsStrings.developerRole),
_CreditPerson('Dinis Maria', CreditsStrings.developerRole),
]),
_CreditSection('Orientadores', [
_CreditPerson('Augusta Pureza Alves Silveira', 'Orientador(a)'),
_CreditPerson('Cristina Lopes Cardoso Silva', 'Orientador(a)'),
_CreditPerson('João Carlos Rodrigues L. Miranda', 'Orientador(a)'),
_CreditSection(CreditsStrings.advisorsSection, [
_CreditPerson('Augusta Pureza Alves Silveira', CreditsStrings.advisorRole),
_CreditPerson('Cristina Lopes Cardoso Silva', CreditsStrings.advisorRole),
_CreditPerson(
'João Carlos Rodrigues L. Miranda',
CreditsStrings.advisorRole,
),
]),
_CreditSection('Instituição colaboradora', [
_CreditSection(CreditsStrings.institutionSection, [
_CreditPerson('Universidade Fernando Pessoa', ''),
_CreditPerson(
'Escola Profissional de Vila do Conde',
@@ -66,14 +74,14 @@ class CreditsScreen extends StatelessWidget {
elevation: 0,
scrolledUnderElevation: 0,
title: const Text(
'Criadores e Colaboradores',
CreditsStrings.pageTitle,
style: TextStyle(fontWeight: FontWeight.w900),
),
),
),
),
body: Container(
color: const Color(0xFFFAFAF7),
color: AppColors.background,
child: SafeArea(
child: SingleChildScrollView(
padding: const EdgeInsets.fromLTRB(20, 24, 20, 24),
@@ -97,7 +105,7 @@ class CreditsScreen extends StatelessWidget {
),
const SizedBox(height: 16),
const Text(
'Quem fez a Check-Teeth Kids',
CreditsStrings.header,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20,

View File

@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import '../widgets/app_gradients.dart';
import '../colors/app_gradients.dart';
import '../strings/curiosidade_strings.dart';
import '../widgets/entrance.dart';
import '../widgets/liquid_waves_background.dart';
import '../widgets/tap_bounce.dart';
@@ -22,7 +24,7 @@ class CuriosidadeScreen extends StatelessWidget {
elevation: 0,
scrolledUnderElevation: 0,
title: const Text(
'Curiosidades',
CuriosidadeStrings.pageTitle,
style: TextStyle(fontWeight: FontWeight.w900),
),
),
@@ -31,7 +33,7 @@ class CuriosidadeScreen extends StatelessWidget {
body: Stack(
clipBehavior: Clip.none,
children: [
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
Positioned.fill(child: Container(color: AppColors.background)),
const LiquidWavesBackground(),
SafeArea(
child: Align(
@@ -45,9 +47,8 @@ class CuriosidadeScreen extends StatelessWidget {
child: TapBounce(
scale: 0.97,
child: _CuriosityTopicTile(
title: 'Tema X',
description:
'Aprenda dicas rápidas e simples para cuidar dos dentes no dia a dia.',
title: CuriosidadeStrings.topicXTitle,
description: CuriosidadeStrings.topicXDescription,
),
),
),
@@ -57,8 +58,8 @@ class CuriosidadeScreen extends StatelessWidget {
child: const TapBounce(
scale: 0.97,
child: _CuriosityTopicTile(
title: 'Tema Y',
description: 'Conteúdo em breve.',
title: CuriosidadeStrings.topicYTitle,
description: CuriosidadeStrings.contentComingSoon,
),
),
),
@@ -68,8 +69,8 @@ class CuriosidadeScreen extends StatelessWidget {
child: const TapBounce(
scale: 0.97,
child: _CuriosityTopicTile(
title: 'Tema Z',
description: 'Conteúdo em breve.',
title: CuriosidadeStrings.topicZTitle,
description: CuriosidadeStrings.contentComingSoon,
),
),
),
@@ -79,8 +80,8 @@ class CuriosidadeScreen extends StatelessWidget {
child: const TapBounce(
scale: 0.97,
child: _CuriosityTopicTile(
title: 'Tema U',
description: 'Conteúdo em breve.',
title: CuriosidadeStrings.topicUTitle,
description: CuriosidadeStrings.contentComingSoon,
),
),
),
@@ -114,7 +115,7 @@ class _CuriosityTopicTile extends StatelessWidget {
showModalBottomSheet<void>(
context: context,
showDragHandle: true,
backgroundColor: const Color(0xFFFFE6F1),
backgroundColor: AppColors.pinkBackground,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(24)),
),
@@ -132,7 +133,7 @@ class _CuriosityTopicTile extends StatelessWidget {
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w900,
color: Color(0xFFFF55A7),
color: AppColors.pink,
),
),
const SizedBox(height: 10),
@@ -174,7 +175,7 @@ class _CuriosityTopicTile extends StatelessWidget {
),
),
onPressed: () => Navigator.of(ctx).pop(),
child: const Text('Fechar'),
child: const Text(CuriosidadeStrings.close),
),
),
),
@@ -195,12 +196,12 @@ class _CuriosityTopicTile extends StatelessWidget {
width: 36,
height: 36,
decoration: BoxDecoration(
color: const Color(0xFFFF55A7).withValues(alpha: 0.12),
color: AppColors.pink.withValues(alpha: 0.12),
borderRadius: BorderRadius.circular(12),
),
child: const Icon(
Icons.lightbulb_rounded,
color: Color(0xFFFF55A7),
color: AppColors.pink,
),
),
const SizedBox(width: 12),
@@ -209,7 +210,7 @@ class _CuriosityTopicTile extends StatelessWidget {
title,
style: const TextStyle(
fontWeight: FontWeight.w900,
color: Color(0xFF2F9E94),
color: AppColors.teal,
),
),
),

View File

@@ -1,6 +1,8 @@
import 'dart:async';
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import '../strings/splash_strings.dart';
class HelloSplashScreen extends StatefulWidget {
const HelloSplashScreen({super.key, required this.onFinished, this.duration = const Duration(seconds: 5)});
@@ -76,7 +78,7 @@ class _HelloSplashScreenState extends State<HelloSplashScreen> with TickerProvid
child: Container(
width: size.width,
height: size.height,
color: const Color(0xFFFAFAF7),
color: AppColors.background,
child: SafeArea(
child: Center(
child: Column(
@@ -85,12 +87,12 @@ class _HelloSplashScreenState extends State<HelloSplashScreen> with TickerProvid
ScaleTransition(
scale: _pop,
child: const Text(
'Olá',
SplashStrings.greeting,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 64,
fontWeight: FontWeight.w900,
color: Color(0xFFFF9AD0),
color: AppColors.pinkLight,
height: 1.0,
),
),

View File

@@ -1,9 +1,11 @@
import 'dart:async';
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import '../main.dart' show supabase;
import '../privacy_gate_prefs.dart';
import '../strings/privacy_strings.dart';
import '../terms_gate_prefs.dart';
import '../widgets/entrance.dart';
import '../widgets/liquid_waves_background.dart';
@@ -87,7 +89,7 @@ class _PrivacyGateScreenState extends State<PrivacyGateScreen> {
body: Stack(
clipBehavior: Clip.none,
children: [
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
Positioned.fill(child: Container(color: AppColors.background)),
const LiquidWavesBackground(),
SafeArea(
child: Column(
@@ -129,7 +131,7 @@ class _PrivacyGateScreenState extends State<PrivacyGateScreen> {
child: TextButton(
onPressed: _declining ? null : _acceptAll,
child: const Text(
'Aceitar tudo',
PrivacyStrings.acceptAll,
style: TextStyle(
fontWeight: FontWeight.w800,
fontSize: 15,
@@ -250,8 +252,8 @@ class _PrivacyConsentRow extends StatelessWidget {
children: [
TextSpan(
text: item.required
? '(Obrigatório) '
: '(Opcional) ',
? PrivacyStrings.requiredPrefix
: PrivacyStrings.optionalPrefix,
style: TextStyle(
fontWeight: FontWeight.w900,
color: item.required
@@ -302,7 +304,7 @@ class _AdvanceButton extends StatelessWidget {
),
),
onPressed: enabled ? onPressed : null,
child: const Text('Avançar'),
child: const Text(PrivacyStrings.advance),
),
),
);

View File

@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import '../main.dart' show supabase;
import '../strings/settings_strings.dart';
import '../widgets/app_dialogs.dart';
import '../widgets/entrance.dart';
import '../widgets/pill_snackbar.dart';
@@ -8,8 +10,8 @@ import '../widgets/tap_bounce.dart';
import 'credits_screen.dart';
import 'terms_screen.dart';
const Color _teal = Color(0xFF2F9E94);
const Color _accentPink = Color(0xFFFF55A7);
const Color _teal = AppColors.teal;
const Color _accentPink = AppColors.pink;
/// Conteúdo da aba de Configurações, para ser embutido na bottom navigation
/// do LoggedHomeScreen (sem Scaffold/AppBar próprios).
@@ -32,13 +34,9 @@ class _SettingsBodyState extends State<SettingsBody> {
Future<void> _confirmDeleteAccountData() async {
final confirmed = await showConfirmDialog(
context,
title: 'Apagar dados da conta',
message:
'Isto remove permanentemente a sua conta, perfil, crianças '
'registadas e fotos — incluindo o login, permitindo criar uma '
'nova conta com o mesmo e-mail depois. Esta ação não pode ser '
'desfeita. Pretende continuar?',
confirmLabel: 'Apagar',
title: SettingsStrings.deleteAccountData,
message: SettingsStrings.deleteAccountMessage,
confirmLabel: SettingsStrings.delete,
confirmColor: _accentPink,
);
@@ -56,7 +54,8 @@ class _SettingsBodyState extends State<SettingsBody> {
final errorMessage = (data is Map) ? data['error']?.toString() : null;
if (response.status != 200 || errorMessage != null) {
throw StateError(
errorMessage ?? 'Erro ao apagar conta (status ${response.status})',
errorMessage ??
SettingsStrings.errorDeletingAccount(response.status),
);
}
@@ -64,7 +63,7 @@ class _SettingsBodyState extends State<SettingsBody> {
if (!mounted) return;
Navigator.of(context).popUntil((route) => route.isFirst);
} catch (e) {
if (mounted) showPillSnackBar(context, 'Erro ao apagar: $e');
if (mounted) showPillSnackBar(context, SettingsStrings.errorDeleting(e));
} finally {
if (mounted) setState(() => _deletingAccount = false);
}
@@ -83,18 +82,18 @@ class _SettingsBodyState extends State<SettingsBody> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_SectionLabel('Conta'),
_SectionLabel(SettingsStrings.account),
_SettingsCard(
children: [
_InfoTile(
icon: Icons.person_outline_rounded,
title: name.isEmpty ? 'Sem nome' : name,
title: name.isEmpty ? SettingsStrings.noName : name,
subtitle: email,
),
const Divider(height: 1),
_ActionTile(
icon: Icons.logout_rounded,
title: 'Sair',
title: SettingsStrings.signOut,
onTap: _signOut,
),
],
@@ -108,12 +107,12 @@ class _SettingsBodyState extends State<SettingsBody> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_SectionLabel('Sobre'),
_SectionLabel(SettingsStrings.about),
_SettingsCard(
children: [
_ActionTile(
icon: Icons.description_outlined,
title: 'Termos de Serviço',
title: SettingsStrings.termsOfService,
onTap: () => Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (_) => const TermsScreen(),
@@ -123,7 +122,7 @@ class _SettingsBodyState extends State<SettingsBody> {
const Divider(height: 1),
_ActionTile(
icon: Icons.diversity_3_outlined,
title: 'Criadores e colaboradores',
title: SettingsStrings.creatorsAndContributors,
onTap: () => Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (_) => const CreditsScreen(),
@@ -133,7 +132,7 @@ class _SettingsBodyState extends State<SettingsBody> {
const Divider(height: 1),
const _InfoTile(
icon: Icons.info_outline_rounded,
title: 'Versão do app',
title: SettingsStrings.appVersion,
subtitle: '1.0.0',
),
],
@@ -147,12 +146,12 @@ class _SettingsBodyState extends State<SettingsBody> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_SectionLabel('Zona de risco'),
_SectionLabel(SettingsStrings.dangerZone),
_SettingsCard(
children: [
_ActionTile(
icon: Icons.delete_forever_rounded,
title: 'Apagar dados da conta',
title: SettingsStrings.deleteAccountData,
titleColor: _accentPink,
loading: _deletingAccount,
onTap: _deletingAccount ? null : _confirmDeleteAccountData,

View File

@@ -1,8 +1,10 @@
import 'dart:async';
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import '../main.dart' show supabase;
import '../strings/terms_strings.dart';
import '../terms_gate_prefs.dart';
import '../widgets/entrance.dart';
import '../widgets/liquid_waves_background.dart';
@@ -62,7 +64,7 @@ class _TermsGateScreenState extends State<TermsGateScreen> {
body: Stack(
clipBehavior: Clip.none,
children: [
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
Positioned.fill(child: Container(color: AppColors.background)),
const LiquidWavesBackground(),
SafeArea(
child: Column(
@@ -173,7 +175,7 @@ class _AcceptCheckboxRow extends StatelessWidget {
),
const SizedBox(width: 10),
const Text(
'Aceitar tudo',
TermsStrings.acceptAll,
style: TextStyle(
fontWeight: FontWeight.w800,
fontSize: 15,
@@ -212,7 +214,7 @@ class _AdvanceButton extends StatelessWidget {
),
),
onPressed: enabled ? onPressed : null,
child: const Text('Avançar'),
child: const Text(TermsStrings.advance),
),
),
);

View File

@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import '../widgets/app_gradients.dart';
import '../colors/app_gradients.dart';
import '../strings/terms_strings.dart';
import '../widgets/terms_content.dart';
class TermsScreen extends StatelessWidget {
@@ -20,14 +22,14 @@ class TermsScreen extends StatelessWidget {
elevation: 0,
scrolledUnderElevation: 0,
title: const Text(
'Termos de Serviço',
TermsStrings.pageTitle,
style: TextStyle(fontWeight: FontWeight.w900),
),
),
),
),
body: Container(
color: const Color(0xFFFAFAF7),
color: AppColors.background,
child: SafeArea(
child: SingleChildScrollView(
padding: const EdgeInsets.fromLTRB(20, 24, 20, 24),

View File

@@ -1,12 +1,14 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import '../colors/app_colors.dart';
import 'package:flutter/services.dart';
import 'package:video_player/video_player.dart';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
import '../watched_videos_prefs.dart';
import '../widgets/app_gradients.dart';
import '../colors/app_gradients.dart';
import '../strings/video_strings.dart';
import '../widgets/entrance.dart';
import '../widgets/liquid_waves_background.dart';
import '../widgets/pill_snackbar.dart';
@@ -36,83 +38,80 @@ class VideoData {
final List<VideoData> videoList = [
VideoData(
id: 1,
title: 'Episódio 1',
description: 'Qual a Influência do nariz entupido na má oclusão',
title: VideoStrings.episodeTitle(1),
description: VideoStrings.episodeDescriptions[0],
youtubeId: 'PJ58CZv4ECw',
),
VideoData(
id: 2,
title: 'Episódio 2',
description: 'Qual a Influência das alergias sazionais na má oclusão',
title: VideoStrings.episodeTitle(2),
description: VideoStrings.episodeDescriptions[1],
youtubeId: 'y4_kWmZtAtg',
),
VideoData(
id: 3,
title: 'Episódio 3',
description: 'Qual a Influência das Otites frequentes na má oclusão',
title: VideoStrings.episodeTitle(3),
description: VideoStrings.episodeDescriptions[2],
youtubeId: 'nD75Y5PuKTo',
),
VideoData(
id: 4,
title: 'Episódio 4',
description: 'Qual a Influência das Amigdalites recorrentes na má oclusão',
title: VideoStrings.episodeTitle(4),
description: VideoStrings.episodeDescriptions[3],
youtubeId: 'yvFllWYeuLw',
),
VideoData(
id: 5,
title: 'Episódio 5',
description:
'Qual a Influência das Bronquiolites recorrentes na má oclusão',
title: VideoStrings.episodeTitle(5),
description: VideoStrings.episodeDescriptions[4],
youtubeId: 'DnhUa-T8_Ps',
),
VideoData(
id: 6,
title: 'Episódio 6',
description: 'Qual a Influência dos problemas respitatórios na má oclusão',
title: VideoStrings.episodeTitle(6),
description: VideoStrings.episodeDescriptions[5],
youtubeId: 'zKt_iwkrjvo',
),
VideoData(
id: 7,
title: 'Episódio 7',
description:
'Qual a Influência das interrupções respiratórias na má oclusão',
title: VideoStrings.episodeTitle(7),
description: VideoStrings.episodeDescriptions[6],
youtubeId: 'NpmQ2brap5A',
),
VideoData(
id: 8,
title: 'Episódio 8',
description: 'Qual a Influência do ressonar na má oclusão',
title: VideoStrings.episodeTitle(8),
description: VideoStrings.episodeDescriptions[7],
youtubeId: 'Wj3KYw9pBi0',
),
VideoData(
id: 9,
title: 'Episódio 9',
description:
'Qual a Influência de acordar com saliva seca na boca ou na almofada na saúde oral',
title: VideoStrings.episodeTitle(9),
description: VideoStrings.episodeDescriptions[8],
youtubeId: 'bOm9t61cT_U',
),
VideoData(
id: 10,
title: 'Episódio 10',
description: 'Qual a Influência da respiração oral na má oclusão',
title: VideoStrings.episodeTitle(10),
description: VideoStrings.episodeDescriptions[9],
youtubeId: 'fAitMizbcms',
),
VideoData(
id: 11,
title: 'Episódio 11',
description: 'Qual a influência do uso exagerado da chupeta na má oclusão',
title: VideoStrings.episodeTitle(11),
description: VideoStrings.episodeDescriptions[10],
youtubeId: '6sYoBUjks_I',
),
VideoData(
id: 12,
title: 'Episódio 12',
description: 'Qual a influência do uso exagerado da chupeta na má oclusão',
title: VideoStrings.episodeTitle(12),
description: VideoStrings.episodeDescriptions[11],
youtubeId: 'eznKrErQbHo',
),
VideoData(
id: 13,
title: 'Episódio 13',
description: 'Qual a influência do hábito de chuchar o dedo na má oclusão',
title: VideoStrings.episodeTitle(13),
description: VideoStrings.episodeDescriptions[12],
youtubeId: 'VO9CNqHRdeM',
),
];
@@ -176,7 +175,7 @@ Future<void> showVideoPlayerDialog(
}) {
if (video.youtubeId != null) {
if (video.youtubeId!.isEmpty) {
showPillSnackBar(context, 'Vídeo ainda não disponível');
showPillSnackBar(context, VideoStrings.videoNotAvailable);
return Future.value();
}
return Navigator.of(context).push<void>(
@@ -199,8 +198,8 @@ class VideoScreen extends StatefulWidget {
/// guardar localmente quais episódios ela já assistiu até ao fim.
final String? scopeId;
static const Color _teal = Color(0xFF2F9E94);
static const Color _accentPink = Color(0xFFFF55A7);
static const Color _teal = AppColors.teal;
static const Color _accentPink = AppColors.pink;
@override
State<VideoScreen> createState() => _VideoScreenState();
@@ -253,7 +252,7 @@ class _VideoScreenState extends State<VideoScreen> {
elevation: 0,
scrolledUnderElevation: 0,
title: const Text(
'Vídeos Educativos',
VideoStrings.pageTitle,
style: TextStyle(fontWeight: FontWeight.w900),
),
),
@@ -262,7 +261,7 @@ class _VideoScreenState extends State<VideoScreen> {
body: Stack(
clipBehavior: Clip.none,
children: [
Positioned.fill(child: Container(color: const Color(0xFFFAFAF7))),
Positioned.fill(child: Container(color: AppColors.background)),
const LiquidWavesBackground(),
SafeArea(
child: Padding(
@@ -285,7 +284,7 @@ class _VideoScreenState extends State<VideoScreen> {
child: TextField(
controller: _searchController,
decoration: InputDecoration(
hintText: 'Pesquisar vídeos...',
hintText: VideoStrings.searchHint,
prefixIcon: const Icon(
Icons.search,
color: VideoScreen._teal,
@@ -307,7 +306,7 @@ class _VideoScreenState extends State<VideoScreen> {
child: _filteredVideos.isEmpty
? Center(
child: Text(
'Nenhum vídeo encontrado',
VideoStrings.noVideosFound,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
@@ -546,7 +545,7 @@ class _VideoButton extends StatelessWidget {
fit: StackFit.expand,
children: [
ColoredBox(
color: const Color(0xFFFFE6F1),
color: AppColors.pinkBackground,
child: VideoThumbnail(
video: video,
borderRadius: 0,
@@ -593,7 +592,7 @@ class _VideoButton extends StatelessWidget {
borderRadius: BorderRadius.circular(999),
),
child: Text(
'EP. ${video.id}',
VideoStrings.episodeBadge(video.id),
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.w800,
@@ -731,7 +730,7 @@ class _YoutubePlayerPageState extends State<_YoutubePlayerPage>
child: Scaffold(
backgroundColor: value.isFullScreen
? Colors.black
: const Color(0xFFFAFAF7),
: AppColors.background,
appBar: value.isFullScreen
? null
: PreferredSize(
@@ -808,7 +807,7 @@ class _YoutubePlayerPageState extends State<_YoutubePlayerPage>
MainAxisAlignment.spaceBetween,
children: [
const Text(
'Próximos',
VideoStrings.nextVideos,
style: TextStyle(
fontWeight: FontWeight.w900,
fontSize: 15,
@@ -835,7 +834,7 @@ class _YoutubePlayerPageState extends State<_YoutubePlayerPage>
vertical: 2,
),
child: Text(
'Ver mais',
VideoStrings.seeMore,
style: TextStyle(
fontWeight: FontWeight.w800,
fontSize: 13,
@@ -1033,7 +1032,7 @@ class _VideoPlayerDialogState extends State<_VideoPlayerDialog> {
setState(() {
_isInitialized = false;
});
showPillSnackBar(context, 'Erro ao carregar vídeo: $e');
showPillSnackBar(context, VideoStrings.errorLoadingVideo(e));
}
}
}
@@ -1188,7 +1187,7 @@ class _VideoControlsState extends State<_VideoControls> {
Icons.replay_10_rounded,
color: Colors.white,
),
tooltip: 'Retroceder 10s',
tooltip: VideoStrings.rewind10s,
onPressed: () => _seekBy(const Duration(seconds: -10)),
),
IconButton(
@@ -1211,7 +1210,7 @@ class _VideoControlsState extends State<_VideoControls> {
Icons.forward_10_rounded,
color: Colors.white,
),
tooltip: 'Avançar 10s',
tooltip: VideoStrings.forward10s,
onPressed: () => _seekBy(const Duration(seconds: 10)),
),
IconButton(
@@ -1294,7 +1293,7 @@ class _FullscreenVideoPlayerState extends State<_FullscreenVideoPlayer> {
setState(() {
_isInitialized = false;
});
showPillSnackBar(context, 'Erro ao carregar vídeo: $e');
showPillSnackBar(context, VideoStrings.errorLoadingVideo(e));
}
}
}