@@ -12,43 +12,78 @@ import 'package:waves/features/explore/models/trending_tag_model.dart';
1212import 'package:waves/features/explore/presentation/controller/explore_controller.dart' ;
1313import 'package:waves/features/explore/presentation/widgets/thread_type_dropdown.dart' ;
1414
15- class ExploreView extends StatelessWidget {
15+ class ExploreView extends StatefulWidget {
1616 const ExploreView ({super .key});
1717
18+ @override
19+ State <ExploreView > createState () => _ExploreViewState ();
20+ }
21+
22+ class _ExploreViewState extends State <ExploreView >
23+ with SingleTickerProviderStateMixin {
24+ late final TabController _tabController;
25+ late final ExploreController _exploreController;
26+
27+ @override
28+ void initState () {
29+ super .initState ();
30+ _exploreController = ExploreController ();
31+ _tabController = TabController (length: 2 , vsync: this );
32+ _tabController.addListener (_onTabChange);
33+ }
34+
35+ @override
36+ void dispose () {
37+ _tabController.removeListener (_onTabChange);
38+ _tabController.dispose ();
39+ _exploreController.dispose ();
40+ super .dispose ();
41+ }
42+
43+ void _onTabChange () {
44+ if (! _tabController.indexIsChanging && _tabController.index == 1 ) {
45+ _exploreController.loadAuthorsIfNeeded ();
46+ }
47+ }
48+
1849 @override
1950 Widget build (BuildContext context) {
20- return DefaultTabController (
21- length: 2 ,
22- child: ChangeNotifierProvider (
23- create: (_) => ExploreController (),
24- child: Consumer <ExploreController >(
25- builder: (context, controller, _) {
26- return Scaffold (
27- appBar: AppBar (
28- title: ThreadTypeDropdown (
29- value: controller.threadType,
30- onChanged: controller.onChangeThreadType,
31- ),
32- bottom: TabBar (
33- tabs: [
34- Tab (text: LocaleText .tags),
35- Tab (text: LocaleText .users),
36- ],
37- ),
51+ return ChangeNotifierProvider .value (
52+ value: _exploreController,
53+ child: Consumer <ExploreController >(
54+ builder: (context, controller, _) {
55+ return Scaffold (
56+ appBar: AppBar (
57+ title: ThreadTypeDropdown (
58+ value: controller.threadType,
59+ onChanged: (type) {
60+ controller.onChangeThreadType (type);
61+ if (_tabController.index == 1 ) {
62+ controller.loadAuthorsIfNeeded ();
63+ }
64+ },
3865 ),
39- body: SafeArea (
40- top: false ,
41- bottom: false ,
42- child: TabBarView (
43- children: [
44- _TagsTab (),
45- _UsersTab (),
46- ],
47- ),
66+ bottom: TabBar (
67+ controller: _tabController,
68+ tabs: [
69+ Tab (text: LocaleText .tags),
70+ Tab (text: LocaleText .users),
71+ ],
4872 ),
49- );
50- },
51- ),
73+ ),
74+ body: SafeArea (
75+ top: false ,
76+ bottom: false ,
77+ child: TabBarView (
78+ controller: _tabController,
79+ children: [
80+ _TagsTab (),
81+ _UsersTab (),
82+ ],
83+ ),
84+ ),
85+ );
86+ },
5287 ),
5388 );
5489 }
0 commit comments