[READ ONLY MIRROR] Open Source TikTok alternative built on AT Protocol github.com/sprksocial/client
flutter atproto video dart
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix video not pausing when going to another screen (#28)

authored by

Davi Rodrigues and committed by
GitHub
5383f5ab 56b1c5ba

+22 -3
+22 -3
lib/screens/home_screen.dart
··· 5 5 import 'package:video_player/video_player.dart'; 6 6 import 'package:visibility_detector/visibility_detector.dart'; 7 7 8 + import '../main.dart'; 8 9 import '../services/feed_settings_service.dart'; 9 10 import '../utils/app_colors.dart'; 10 11 import '../widgets/feed/feed_selector.dart'; ··· 24 25 int _selectedTabIndex = 0; 25 26 List<FeedOption> _currentFeedOptions = []; 26 27 List<Widget> _feedScreens = []; 28 + late final NavigationProvider _navProvider; 29 + bool _isHomeScreenActive = true; 27 30 bool _isHomeScreenVisible = true; 28 31 29 32 @override 30 33 void initState() { 31 34 super.initState(); 35 + _navProvider = Provider.of<NavigationProvider>(context, listen: false); 36 + _isHomeScreenActive = _navProvider.currentIndex == 0; 37 + _navProvider.addListener(_onNavIndexChanged); 38 + 32 39 _initializeScreen(); 33 40 _feedSettings.addListener(_onFeedSettingsChanged); 34 41 } 35 42 43 + /// Pause or resume media when home tab selection changes. 44 + void _onNavIndexChanged() { 45 + final isActive = _navProvider.currentIndex == 0; 46 + if (isActive != _isHomeScreenActive) { 47 + setState(() { 48 + _isHomeScreenActive = isActive; 49 + _buildFeedScreens(); 50 + }); 51 + } 52 + } 53 + 36 54 @override 37 55 void dispose() { 56 + _navProvider.removeListener(_onNavIndexChanged); 38 57 _pageController.removeListener(_onPageChanged); 39 58 _feedSettings.removeListener(_onFeedSettingsChanged); 40 59 _pageController.dispose(); ··· 112 131 int feedIndex = 0; 113 132 114 133 if (_feedSettings.followingFeedEnabled) { 115 - final bool isVisible = _isHomeScreenVisible && (_selectedTabIndex == feedIndex); 134 + final bool isVisible = _isHomeScreenActive && _isHomeScreenVisible && (_selectedTabIndex == feedIndex); 116 135 options.add(const FeedOption(label: 'Following', value: 0)); 117 136 screens.add( 118 137 ChangeNotifierProvider<FeedSettingsService>.value( ··· 125 144 } 126 145 127 146 if (_feedSettings.forYouFeedEnabled) { 128 - final bool isVisible = _isHomeScreenVisible && (_selectedTabIndex == feedIndex); 147 + final bool isVisible = _isHomeScreenActive && _isHomeScreenVisible && (_selectedTabIndex == feedIndex); 129 148 options.add(const FeedOption(label: 'For You', value: 1)); 130 149 screens.add( 131 150 ChangeNotifierProvider<FeedSettingsService>.value( ··· 138 157 } 139 158 140 159 if (_feedSettings.latestFeedEnabled) { 141 - final bool isVisible = _isHomeScreenVisible && (_selectedTabIndex == feedIndex); 160 + final bool isVisible = _isHomeScreenActive && _isHomeScreenVisible && (_selectedTabIndex == feedIndex); 142 161 options.add(const FeedOption(label: 'Latest', value: 2)); 143 162 screens.add( 144 163 ChangeNotifierProvider<FeedSettingsService>.value(