Skip to content

Commit 4a561b5

Browse files
committed
refactor(settings): make expansion tiles mutually exclusive
- Convert _SettingsView from StatelessWidget to StatefulWidget - Add ExpansionTileController for each expansion tile - Implement onExpansionChanged to collapse other tiles when one is expanded - Ensure proper disposal of controllers
1 parent 4c8d498 commit 4a561b5

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

lib/settings/view/settings_page.dart

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,30 @@ class SettingsPage extends StatelessWidget {
2727
}
2828
}
2929

30-
class _SettingsView extends StatelessWidget {
30+
class _SettingsView extends StatefulWidget {
3131
const _SettingsView();
3232

33+
@override
34+
State<_SettingsView> createState() => _SettingsViewState();
35+
}
36+
37+
class _SettingsViewState extends State<_SettingsView> {
38+
late List<ExpansionTileController> _mainTileControllers;
39+
40+
@override
41+
void initState() {
42+
super.initState();
43+
_mainTileControllers = List.generate(2, (index) => ExpansionTileController());
44+
}
45+
46+
@override
47+
void dispose() {
48+
for (final controller in _mainTileControllers) {
49+
controller.dispose();
50+
}
51+
super.dispose();
52+
}
53+
3354
@override
3455
Widget build(BuildContext context) {
3556
final l10n = AppLocalizationsX(context).l10n;
@@ -112,7 +133,17 @@ class _SettingsView extends StatelessWidget {
112133
padding: const EdgeInsets.all(AppSpacing.lg),
113134
children: [
114135
ExpansionTile(
136+
controller: _mainTileControllers[0],
115137
title: Text(l10n.appearanceSettingsLabel),
138+
onExpansionChanged: (isExpanded) {
139+
if (isExpanded) {
140+
for (var i = 0; i < _mainTileControllers.length; i++) {
141+
if (i != 0) {
142+
_mainTileControllers[i].collapse();
143+
}
144+
}
145+
}
146+
},
116147
childrenPadding: const EdgeInsets.symmetric(
117148
horizontal: AppSpacing.xxl,
118149
),
@@ -263,7 +294,17 @@ class _SettingsView extends StatelessWidget {
263294
],
264295
),
265296
ExpansionTile(
297+
controller: _mainTileControllers[1],
266298
title: Text(l10n.languageSettingsLabel),
299+
onExpansionChanged: (isExpanded) {
300+
if (isExpanded) {
301+
for (var i = 0; i < _mainTileControllers.length; i++) {
302+
if (i != 1) {
303+
_mainTileControllers[i].collapse();
304+
}
305+
}
306+
}
307+
},
267308
childrenPadding: const EdgeInsets.symmetric(
268309
horizontal: AppSpacing.xxl,
269310
),

0 commit comments

Comments
 (0)