Skip to content

Commit 47ac2c2

Browse files
committed
fix(useExpansibleController): add dispose
1 parent 352aeb3 commit 47ac2c2

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

packages/flutter_hooks/lib/src/expansion_tile_controller.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,17 @@ class _ExpansibleControllerHook extends Hook<ExpansibleController> {
2727

2828
class _ExpansibleControllerHookState
2929
extends HookState<ExpansibleController, _ExpansibleControllerHook> {
30-
final controller = ExpansibleController();
30+
final _controller = ExpansibleController();
3131

3232
@override
3333
String get debugLabel => 'useExpansibleController';
3434

3535
@override
36-
ExpansibleController build(BuildContext context) => controller;
36+
ExpansibleController build(BuildContext context) => _controller;
37+
38+
@override
39+
void dispose() {
40+
_controller.dispose();
41+
super.dispose();
42+
}
3743
}

packages/flutter_hooks/test/use_expansible_controller_test.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,33 @@ void main() {
7878
controller.collapse();
7979
expect(controller.isExpanded, false);
8080
});
81+
82+
testWidgets('check ExpansibleController gets disposed', (tester) async {
83+
late ExpansibleController controller;
84+
await tester.pumpWidget(MaterialApp(
85+
home: Scaffold(
86+
body: HookBuilder(builder: (context) {
87+
controller = useExpansibleController();
88+
return ExpansionTile(
89+
controller: controller,
90+
title: const Text('Expansion Tile'),
91+
);
92+
}),
93+
),
94+
));
95+
96+
await tester.pumpWidget(const SizedBox());
97+
98+
expect(
99+
() => controller.addListener(() {}),
100+
throwsA(
101+
isFlutterError.having(
102+
(e) => e.message,
103+
'message',
104+
contains('disposed'),
105+
),
106+
),
107+
);
108+
});
81109
});
82110
}

0 commit comments

Comments
 (0)