-
-
Notifications
You must be signed in to change notification settings - Fork 67
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Version
1.25.0
Platforms
Android
Device Model
Poco F6
flutter info
• Flutter version 3.24.3 on channel stable at D:\Dev\FlutterSDK\3.22.3
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 2663184aa7 (5 months ago), 2024-09-11 16:27:48 -0500
• Engine revision 36335019a8
• Dart version 3.5.3
• DevTools version 2.37.3How to reproduce?
Sometimes there are wrong observe results, when i have a list with small amount of items (let's say 50 items) and when currently i near end of the list, and trying to scroll REALLY fast so that it reaches end almost immediatly, I expect last item to have index 49, but in reality it is 41 because of how quick it reached the end of the list.
I managed to fix this by wrapping this line
| handleContexts( |
So I'm proposing to wrap this line in WidgetsBinding.instance.addPostFrameCallback like you do on Web OR adding bool var "immediate" to ObserverWidget constructor that defaults to true to simulate old behaviour, and wrap it with addPostFrameCallback when it is false.
Logs
I/flutter (31017): First visible: 0
I/flutter (31017): Last visible: 41Example code (optional)
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:scrollview_observer/scrollview_observer.dart';
void main() {
runApp(const TestApp());
}
class TestApp extends StatelessWidget {
const TestApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const MainApp(),
scrollBehavior: kIsWeb ? _WebScrollBehavior() : null,
);
}
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListViewObserver(
triggerOnObserveType: ObserverTriggerOnObserveType.directly,
onObserve: (result) {
print('First visible: ${result.firstChild?.index}');
print(
'Last visible: ${result.displayingChildModelList.lastOrNull?.index}');
},
child: ListView.builder(
itemCount: 50,
itemBuilder: (context, index) => Text('$index'),
),
),
),
);
}
}
class _WebScrollBehavior extends MaterialScrollBehavior {
@override
Set<PointerDeviceKind> get dragDevices =>
{PointerDeviceKind.touch, PointerDeviceKind.mouse};
}Contact
No response
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working