Skip to content

Commit d2d0014

Browse files
committed
dispose of scrollbars thoughtfully
1 parent b86a7e9 commit d2d0014

File tree

2 files changed

+94
-14
lines changed

2 files changed

+94
-14
lines changed

lib/views/dex/simple/form/maker/maker_form_layout.dart

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,33 @@ class _MakerFormLayoutState extends State<MakerFormLayout> {
101101
}
102102
}
103103

104-
class _MakerFormDesktopLayout extends StatelessWidget {
104+
class _MakerFormDesktopLayout extends StatefulWidget {
105105
const _MakerFormDesktopLayout();
106106

107+
@override
108+
State<_MakerFormDesktopLayout> createState() => _MakerFormDesktopLayoutState();
109+
}
110+
111+
class _MakerFormDesktopLayoutState extends State<_MakerFormDesktopLayout> {
112+
late final ScrollController _mainScrollController;
113+
late final ScrollController _orderbookScrollController;
114+
115+
@override
116+
void initState() {
117+
super.initState();
118+
_mainScrollController = ScrollController();
119+
_orderbookScrollController = ScrollController();
120+
}
121+
122+
@override
123+
void dispose() {
124+
_mainScrollController.dispose();
125+
_orderbookScrollController.dispose();
126+
super.dispose();
127+
}
128+
107129
@override
108130
Widget build(BuildContext context) {
109-
final scrollController = ScrollController();
110131
return Row(
111132
mainAxisSize: MainAxisSize.max,
112133
mainAxisAlignment: MainAxisAlignment.center,
@@ -119,11 +140,11 @@ class _MakerFormDesktopLayout extends StatelessWidget {
119140
Flexible(
120141
flex: 6,
121142
child: DexScrollbar(
122-
scrollController: scrollController,
143+
scrollController: _mainScrollController,
123144
isMobile: isMobile,
124145
child: SingleChildScrollView(
125146
key: const Key('maker-form-layout-scroll'),
126-
controller: scrollController,
147+
controller: _mainScrollController,
127148
child: ConstrainedBox(
128149
constraints:
129150
BoxConstraints(maxWidth: theme.custom.dexFormWidth),
@@ -144,7 +165,7 @@ class _MakerFormDesktopLayout extends StatelessWidget {
144165
child: Padding(
145166
padding: const EdgeInsets.only(left: 20),
146167
child: SingleChildScrollView(
147-
controller: ScrollController(),
168+
controller: _orderbookScrollController,
148169
child: const MakerFormOrderbook(),
149170
),
150171
),
@@ -154,14 +175,33 @@ class _MakerFormDesktopLayout extends StatelessWidget {
154175
}
155176
}
156177

157-
class _MakerFormMobileLayout extends StatelessWidget {
178+
class _MakerFormMobileLayout extends StatefulWidget {
158179
const _MakerFormMobileLayout();
159180

181+
@override
182+
State<_MakerFormMobileLayout> createState() => _MakerFormMobileLayoutState();
183+
}
184+
185+
class _MakerFormMobileLayoutState extends State<_MakerFormMobileLayout> {
186+
late final ScrollController _scrollController;
187+
188+
@override
189+
void initState() {
190+
super.initState();
191+
_scrollController = ScrollController();
192+
}
193+
194+
@override
195+
void dispose() {
196+
_scrollController.dispose();
197+
super.dispose();
198+
}
199+
160200
@override
161201
Widget build(BuildContext context) {
162202
return SingleChildScrollView(
163203
key: const Key('maker-form-layout-scroll'),
164-
controller: ScrollController(),
204+
controller: _scrollController,
165205
child: ConstrainedBox(
166206
constraints: BoxConstraints(maxWidth: theme.custom.dexFormWidth),
167207
child: const Stack(

lib/views/market_maker_bot/market_maker_bot_form.dart

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,33 @@ class MarketMakerBotForm extends StatelessWidget {
5555
}
5656
}
5757

58-
class _MakerFormDesktopLayout extends StatelessWidget {
58+
class _MakerFormDesktopLayout extends StatefulWidget {
5959
const _MakerFormDesktopLayout();
6060

61+
@override
62+
State<_MakerFormDesktopLayout> createState() => _MakerFormDesktopLayoutState();
63+
}
64+
65+
class _MakerFormDesktopLayoutState extends State<_MakerFormDesktopLayout> {
66+
late final ScrollController _mainScrollController;
67+
late final ScrollController _orderbookScrollController;
68+
69+
@override
70+
void initState() {
71+
super.initState();
72+
_mainScrollController = ScrollController();
73+
_orderbookScrollController = ScrollController();
74+
}
75+
76+
@override
77+
void dispose() {
78+
_mainScrollController.dispose();
79+
_orderbookScrollController.dispose();
80+
super.dispose();
81+
}
82+
6183
@override
6284
Widget build(BuildContext context) {
63-
final scrollController = ScrollController();
6485
return Row(
6586
mainAxisSize: MainAxisSize.max,
6687
mainAxisAlignment: MainAxisAlignment.center,
@@ -73,11 +94,11 @@ class _MakerFormDesktopLayout extends StatelessWidget {
7394
Flexible(
7495
flex: 6,
7596
child: DexScrollbar(
76-
scrollController: scrollController,
97+
scrollController: _mainScrollController,
7798
isMobile: isMobile,
7899
child: SingleChildScrollView(
79100
key: const Key('maker-form-layout-scroll'),
80-
controller: scrollController,
101+
controller: _mainScrollController,
81102
child: ConstrainedBox(
82103
constraints:
83104
BoxConstraints(maxWidth: theme.custom.dexFormWidth),
@@ -101,7 +122,7 @@ class _MakerFormDesktopLayout extends StatelessWidget {
101122
child: Padding(
102123
padding: const EdgeInsets.only(left: 20),
103124
child: SingleChildScrollView(
104-
controller: ScrollController(),
125+
controller: _orderbookScrollController,
105126
child: const MarketMakerBotOrderbook(),
106127
),
107128
),
@@ -111,14 +132,33 @@ class _MakerFormDesktopLayout extends StatelessWidget {
111132
}
112133
}
113134

114-
class _MakerFormMobileLayout extends StatelessWidget {
135+
class _MakerFormMobileLayout extends StatefulWidget {
115136
const _MakerFormMobileLayout();
116137

138+
@override
139+
State<_MakerFormMobileLayout> createState() => _MakerFormMobileLayoutState();
140+
}
141+
142+
class _MakerFormMobileLayoutState extends State<_MakerFormMobileLayout> {
143+
late final ScrollController _scrollController;
144+
145+
@override
146+
void initState() {
147+
super.initState();
148+
_scrollController = ScrollController();
149+
}
150+
151+
@override
152+
void dispose() {
153+
_scrollController.dispose();
154+
super.dispose();
155+
}
156+
117157
@override
118158
Widget build(BuildContext context) {
119159
return SingleChildScrollView(
120160
key: const Key('maker-form-layout-scroll'),
121-
controller: ScrollController(),
161+
controller: _scrollController,
122162
child: ConstrainedBox(
123163
constraints: BoxConstraints(maxWidth: theme.custom.dexFormWidth),
124164
child: Column(

0 commit comments

Comments
 (0)