@@ -159,6 +159,8 @@ class WebsocketResponseView extends ConsumerStatefulWidget {
159
159
160
160
class _WebsocketResponseViewState extends ConsumerState <WebsocketResponseView > {
161
161
final ScrollController _controller = ScrollController ();
162
+ bool _isAtTop = true ;
163
+ List <WebSocketFrameModel > _pausedFrames = [];
162
164
163
165
@override
164
166
void initState () {
@@ -172,17 +174,13 @@ class _WebsocketResponseViewState extends ConsumerState<WebsocketResponseView> {
172
174
);
173
175
}
174
176
});
175
- // _controller.addListener(() {
176
- // if (_controller.position.atEdge && _controller.position.pixels != 0) {
177
- // setState(() {
178
- // _controller.jumpTo(_controller.position.maxScrollExtent);
179
- // });
180
- // }else{
181
- // setState(() {
182
- // _controller.jumpTo(_controller.offset);
183
- // });
184
- // }
185
- // });
177
+ _controller.addListener (() {
178
+ if (_controller.hasClients) {
179
+ setState (() {
180
+ _isAtTop = _controller.position.atEdge == true ;
181
+ });
182
+ }
183
+ });
186
184
}
187
185
188
186
@override
@@ -197,13 +195,19 @@ class _WebsocketResponseViewState extends ConsumerState<WebsocketResponseView> {
197
195
final frames = ref.watch (selectedRequestModelProvider
198
196
.select ((value) => value? .webSocketResponseModel? .frames)) ??
199
197
< WebSocketFrameModel > [];
198
+
199
+ if (_isAtTop) {
200
+ _pausedFrames = List .from (frames);
201
+ }
202
+
203
+ final displayFrames = _isAtTop ? frames : _pausedFrames;
200
204
return ListView .builder (
201
205
controller: _controller,
202
206
//physics: const BouncingScrollPhysics(),
203
- itemCount: frames .length,
207
+ itemCount: displayFrames .length,
204
208
itemBuilder: (context, index) {
205
209
return WebsocketFrame (
206
- websocketFrame: frames[frames .length- index- 1 ],
210
+ websocketFrame: displayFrames[displayFrames .length- index- 1 ],
207
211
ref: ref,
208
212
);
209
213
},
0 commit comments