mirror of
https://github.com/R0m1k3/xtremobile.git
synced 2026-10-24 15:48:14 +02:00
Phase 3: Architecture refactor - consolidate folders and extract patterns
- Consolidate lib/mobile/features/iptv → lib/features/iptv * Move all IPTV screens, models, services, widgets to unified location * Update imports in main.dart and affected files * Remove old mobile/features/iptv directory - Create lib/core/patterns/ for reusable implementations * HiveServiceBase: Template for Hive-based persistent storage * VideoPlayerWrapper: Abstraction for video player selection * StreamResolverPattern: IPTV stream resolution and validation - Router already simplified (no kIsWeb checks, Android-only) All changes maintain Android-only architecture and improve maintainability. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d0f0589d09
commit
cb1788be8a
16 files changed
+361
-5
No files matched your search
@@ -0,0 +1,61 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../../../../core/models/playlist_config.dart';
|
||||
import '../../../widgets/mobile_scaffold.dart';
|
||||
import '../../../theme/mobile_theme.dart';
|
||||
import '../widgets/mobile_live_tv_tab.dart';
|
||||
import '../widgets/mobile_movies_tab.dart';
|
||||
import '../widgets/mobile_series_tab.dart';
|
||||
import '../widgets/mobile_settings_tab.dart';
|
||||
import '../../../providers/mobile_xtream_providers.dart';
|
||||
|
||||
class MobileDashboardScreen extends ConsumerStatefulWidget {
|
||||
final PlaylistConfig playlist;
|
||||
|
||||
const MobileDashboardScreen({
|
||||
super.key,
|
||||
required this.playlist,
|
||||
});
|
||||
|
||||
@override
|
||||
ConsumerState<MobileDashboardScreen> createState() =>
|
||||
_MobileDashboardScreenState();
|
||||
}
|
||||
|
||||
class _MobileDashboardScreenState extends ConsumerState<MobileDashboardScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final currentIndex = ref.watch(mobileDashboardIndexProvider);
|
||||
|
||||
// Determine which tab to show
|
||||
Widget currentTab;
|
||||
switch (currentIndex) {
|
||||
case 0:
|
||||
currentTab = MobileLiveTVTab(playlist: widget.playlist);
|
||||
break;
|
||||
case 1:
|
||||
currentTab = MobileMoviesTab(playlist: widget.playlist);
|
||||
break;
|
||||
case 2:
|
||||
currentTab = MobileSeriesTab(playlist: widget.playlist);
|
||||
break;
|
||||
case 3:
|
||||
currentTab = const MobileSettingsTab();
|
||||
break;
|
||||
default:
|
||||
currentTab = MobileLiveTVTab(playlist: widget.playlist);
|
||||
}
|
||||
|
||||
return Theme(
|
||||
data: MobileTheme.darkTheme,
|
||||
child: MobileScaffold(
|
||||
currentIndex: currentIndex,
|
||||
onIndexChanged: (index) {
|
||||
ref.read(mobileDashboardIndexProvider.notifier).state = index;
|
||||
},
|
||||
child: currentTab,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user