feat: add build log file

This commit is contained in:
Michael committed 2025-12-18 00:06:00 +01:00
1 parent 55acbbc135
commit 4e00cc7dc7
13 files changed
+1066 -39

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
// Conditional export
export 'ui_web_fake.dart' if (dart.library.html) 'ui_web_real.dart';
+10
View File
@@ -0,0 +1,10 @@
// Fake implementation for non-web platforms
class PlatformViewRegistry {
/// Dummy implementation of registerViewFactory
void registerViewFactory(String viewId, dynamic cb) {
// No-op on non-web platforms
}
}
/// Global instance to match dart:ui_web API
final platformViewRegistry = PlatformViewRegistry();
+2
View File
@@ -0,0 +1,2 @@
// Real implementation for web platforms
export 'dart:ui_web';
+2 -2
View File
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'dart:html' as html;
import 'dart:ui_web' as ui_web;
import 'package:universal_html/html.dart' as html;
import '../../../core/shims/ui_web.dart' as ui_web;
import 'dart:convert';
import 'dart:async';
import 'package:http/http.dart' as http;
+1 -1
View File
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'dart:html' as html; // For reloading
import 'package:universal_html/html.dart' as html; // For reloading
import '../../auth/providers/auth_provider.dart';
import '../providers/settings_provider.dart';
import 'streaming_settings_tab.dart';
@@ -187,7 +187,7 @@ class _MobileSeriesDetailScreenState
const SizedBox(width: 16),
],
Text(
'${_seriesInfo!.episodes.keys.length} Seasons',
'${_seriesInfo!.episodes.keys.length} Saisons',
style: const TextStyle(
color: AppColors.textSecondary, fontSize: 13),
),
@@ -233,7 +233,7 @@ class _MobileSeriesDetailScreenState
_seriesInfo!.episodes.keys.elementAt(index);
final isSelected = seasonNum == _selectedSeason;
return ChoiceChip(
label: Text('Season $seasonNum'),
label: Text('Saison $seasonNum'),
selected: isSelected,
onSelected: (selected) {
if (selected)
@@ -567,7 +567,7 @@ class _MobileChannelCardState extends ConsumerState<_MobileChannelCard> {
Text(
_epgTitle!,
style: const TextStyle(
color: AppColors.textSecondary,
color: Colors.yellow,
fontSize: 9,
),
textAlign: TextAlign.center,
@@ -3,7 +3,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:path_provider/path_provider.dart';
import 'package:dio_cache_interceptor_hive_store/dio_cache_interceptor_hive_store.dart';
// import 'package:dio_cache_interceptor_hive_store/dio_cache_interceptor_hive_store.dart';
import '../../../providers/mobile_settings_providers.dart';
import '../../../widgets/tv_focusable.dart';
@@ -75,15 +75,17 @@ class _MobileSettingsTabState extends ConsumerState<MobileSettingsTab> {
padding: const EdgeInsets.only(bottom: 16),
child: Row(
children: [
Container(
width: 48,
height: 48,
decoration: BoxDecoration(
color: AppColors.primary.withOpacity(0.2),
borderRadius: BorderRadius.circular(12),
ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Image.asset(
'assets/images/logo_xtremflow.png',
fit: BoxFit.cover,
errorBuilder: (_, __, ___) => const Icon(
Icons.play_circle_filled,
color: AppColors.primary,
size: 28,
),
),
child: const Icon(Icons.play_circle_filled,
color: AppColors.primary, size: 28),
),
const SizedBox(width: 16),
Column(
@@ -98,7 +100,7 @@ class _MobileSettingsTabState extends ConsumerState<MobileSettingsTab> {
),
),
Text(
'Version 1.3.3',
'Version 1.3.4',
style: GoogleFonts.inter(
fontSize: 13,
color: AppColors.textSecondary,
@@ -273,9 +275,10 @@ class _MobileSettingsTabState extends ConsumerState<MobileSettingsTab> {
setState(() => _isRefreshingCache = true);
try {
final dir = await getApplicationDocumentsDirectory();
final cacheStore = HiveCacheStore(dir.path);
await cacheStore.clean();
// final dir = await getApplicationDocumentsDirectory();
// final cacheStore = HiveCacheStore(dir.path);
// await cacheStore.clean();
await Future.delayed(const Duration(seconds: 1));
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
+47 -20
View File
@@ -37,25 +37,47 @@ class MobileScaffold extends ConsumerWidget {
child: SafeArea(
bottom: false,
child: Container(
height: 50,
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.15),
borderRadius: BorderRadius.circular(30),
border: Border.all(color: Colors.white.withOpacity(0.15)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_buildNavItem(0, 'Live TV', Icons.tv),
_buildNavItem(1, 'Films', Icons.movie),
_buildNavItem(2, 'Séries', Icons.video_library),
_buildNavItem(3, 'Paramètres', Icons.settings),
// LOGO (Left side)
Padding(
padding: const EdgeInsets.only(right: 16),
child: Image.asset(
'assets/images/logo_xtremflow.png',
height: 40,
width: 40,
errorBuilder: (context, error, stackTrace) =>
const SizedBox(width: 40), // Fallback if missing
),
),
// NAVIGATION PILL (Expanded)
Expanded(
child: Container(
height: 50,
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.15),
borderRadius: BorderRadius.circular(30),
border:
Border.all(color: Colors.white.withOpacity(0.15)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_buildNavItem(0, 'Live TV', Icons.tv),
_buildNavItem(1, 'Films', Icons.movie),
_buildNavItem(2, 'Séries', Icons.video_library),
_buildNavItem(3, 'Paramètres', Icons.settings),
],
),
),
),
],
),
),
),
),
// Main Content
Expanded(child: child),
],
@@ -65,7 +87,7 @@ class MobileScaffold extends ConsumerWidget {
Widget _buildNavItem(int index, String label, IconData icon) {
final isSelected = currentIndex == index;
return _AppleTVNavItem(
isSelected: isSelected,
icon: icon,
@@ -117,9 +139,11 @@ class _AppleTVNavItemState extends State<_AppleTVNavItem> {
@override
Widget build(BuildContext context) {
// Selected OR Focused = black text (white bg), Normal = white70 text
final Color textColor = (widget.isSelected || _isFocused) ? Colors.black : Colors.white70;
final Color iconColor = (widget.isSelected || _isFocused) ? Colors.black : Colors.white70;
final Color textColor =
(widget.isSelected || _isFocused) ? Colors.black : Colors.white70;
final Color iconColor =
(widget.isSelected || _isFocused) ? Colors.black : Colors.white70;
return Focus(
focusNode: _focusNode,
onKeyEvent: (node, event) {
@@ -142,9 +166,11 @@ class _AppleTVNavItemState extends State<_AppleTVNavItem> {
margin: const EdgeInsets.symmetric(horizontal: 2, vertical: 4),
decoration: BoxDecoration(
// White pill when selected OR focused
color: widget.isSelected
? Colors.white
: (_isFocused ? Colors.white.withOpacity(0.9) : Colors.transparent),
color: widget.isSelected
? Colors.white
: (_isFocused
? Colors.white.withOpacity(0.9)
: Colors.transparent),
borderRadius: BorderRadius.circular(25),
// Strong glow when focused
boxShadow: _isFocused
@@ -166,7 +192,8 @@ class _AppleTVNavItemState extends State<_AppleTVNavItem> {
widget.label,
style: TextStyle(
color: textColor,
fontWeight: widget.isSelected ? FontWeight.w700 : FontWeight.w400,
fontWeight:
widget.isSelected ? FontWeight.w700 : FontWeight.w400,
fontSize: 13,
),
),