Update to latest grpc-go api

This change makes go-sourcegraph work with the newer grpc-go API. It is tested to work with these commits:
<EMAIL_ADDRESS>github.com/gogo/protobuf@200875106f3bf0eb01eb297dae30b250a25ffc84
google.golang.org/grpc@f7d1653e300d6ad9f019bce7a5f5ab3b4821f637
Also, the dependency github.com/sqs/grpccache is moved to github.com/sourcegraph/grpccache.

Left some comments, otherwise LGTM.


Error When installing Anchor using avm install latest

error[E0282]: type annotations needed for Box<_>
--> /home/ht0k/.cargo/registry/src/index.crates.io-6f17d22bba15001f/time-0.3.29/src/format_description/parse/mod.rs:83:9
|
83 |     let items = format_items
|         ^^^^^
...
86 |     Ok(items.into())
|              ---- type must be known at this point
|
= note: this is an inference error on crate time caused by an API change in Rust 1.80.0; update time to version >=0.3.35 by calling cargo update
Compiling solana-security-txt v1.1.1
Compiling unicode-segmentation v1.10.1
Compiling heck v0.3.3
Compiling console v0.15.8
Compiling solana-vote-program v1.18.17
For more information about this error, try rustc --explain E0282.
error: could not compile time (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error: failed to compile anchor-cli v0.30.1 (https://github.com/coral-xyz/anchor?tag=v0.30.1#e6d7dafe), intermediate artifacts can be found at /tmp/cargo-installswRPCY.

@acheroncrypto please, help me out here

Take a look at https://github.com/coral-xyz/anchor/issues/3236


Book

This is mostly just the history and some justification of why the book exists. And a warning to future services that want to take it's place.
If someone disagrees with my analysis that the README does a good enough job how the book works please let me know.

Oh of course why wifi draft got pulled into here. that's what I get for not branching from master


Response body string is null for KO sessions in ExtraInfoExtractor

I'm currently writing support to generate an HTTPArchive from the ExtraInfoExtractor.  In order to extract the response body, I do:
val responseBody = Content(info.response.bodyLength.toLong, -1, "", Option(info.response.body.string).getOrElse(""))

where info is the ExtraInfo passed into the function. On the scenarios, we employ checks like status.is(201). What I can observe so far is that the response body is null for all interactions that were declared KO as a result of these checks, but it is set for all OK interactions.
Is this a know restriction or am I doing something wrong? I'm using Gatling 2.1.7.

http://gatling.io/docs/2.1.7/http/http_protocol.html#response-chunks-discarding
Please use our Google Group for questions.


feat: Swap to Codecov SvelteKit plugin

Swapping to use @codecov/sveltekit-plugin, which offers support for both client and server bundles.

thanks - will send a PR rn to test

it works! Thanks a ton


[urgent] cURL error happen

When i use link api of sample guzzle is OK
but when i test on uri https://jsonplaceholder.typicode.com/ so it have error.
cURL error 35: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
I access on browser is OK
why please?

Check if you have properly installed cURL and you have the CA certificates in place. It's not a Guzzle problem. If you need further help, please ask on Stack Overflow.


[Flutter Web] NotificationListener ScrollNotification is bugged with SingleChildScrollView (All possible ScrollNotifications registering on each frame)

I am trying to track the ScrollNotification within a SingleChildScrollView in order to implement some behavior when reaching the bottom of the widget and for some reason I am getting all possible ScrollNotification states on every frame.
This is the structure of the application.
Scaffold(
          body: NotificationListener(
            onNotification: (scrollNotification) {
              print(scrollNotification); // Error can be noticed with this line
              return true; // needed to return bool. does not change result
            },
            child: SingleChildScrollView(
              child: Column(
                children:
                    [
                      // widgets
                    ],
              ),
            ),
          ),
        ),

On the first line of the function that is located at the onNotification property, I am printing out the scroll notification in order to track when the SingleChildScrollView updates and when it reaches the bottom of the widget when scrolling.
Instead of printing one ScrollEndNotification when reaching the bottom of the SingleChildScrollView, what happens instead is that all possible states of the ScrollNotification are printed on each frame.
This is what logs to the console:
ScrollStartNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0))
ScrollUpdateNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0), scrollDelta: 0.8181512605042371)
ScrollEndNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(204.0..[998.0]..761.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(204.0..[998.0]..761.4), scrollDelta: 119)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(204.0..[998.0]..761.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(223.0..[998.0]..742.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(223.0..[998.0]..742.4), scrollDelta: 19)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(223.0..[998.0]..742.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(323.0..[998.0]..642.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(323.0..[998.0]..642.4), scrollDelta: 100)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(323.0..[998.0]..642.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(351.0..[998.0]..614.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(351.0..[998.0]..614.4), scrollDelta: 28)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(351.0..[998.0]..614.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(397.0..[998.0]..568.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(397.0..[998.0]..568.4), scrollDelta: 46)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(397.0..[998.0]..568.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(414.0..[998.0]..551.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(414.0..[998.0]..551.4), scrollDelta: 17)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(414.0..[998.0]..551.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(429.0..[998.0]..536.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(429.0..[998.0]..536.4), scrollDelta: 15)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(429.0..[998.0]..536.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(448.0..[998.0]..517.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(448.0..[998.0]..517.4), scrollDelta: 19)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(448.0..[998.0]..517.4))
ScrollStartNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0))
ScrollUpdateNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0), scrollDelta: 0.8181512605042371)
ScrollEndNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(474.0..[998.0]..491.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(474.0..[998.0]..491.4), scrollDelta: 26)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(474.0..[998.0]..491.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(480.0..[998.0]..485.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(480.0..[998.0]..485.4), scrollDelta: 6)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(480.0..[998.0]..485.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(488.0..[998.0]..477.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(488.0..[998.0]..477.4), scrollDelta: 8)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(488.0..[998.0]..477.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(489.0..[998.0]..476.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(489.0..[998.0]..476.4), scrollDelta: 1)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(489.0..[998.0]..476.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(502.0..[998.0]..463.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(502.0..[998.0]..463.4), scrollDelta: 13)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(502.0..[998.0]..463.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(511.0..[998.0]..454.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(511.0..[998.0]..454.4), scrollDelta: 9)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(511.0..[998.0]..454.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(545.0..[998.0]..420.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(545.0..[998.0]..420.4), scrollDelta: 34)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(545.0..[998.0]..420.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(586.0..[998.0]..379.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(586.0..[998.0]..379.4), scrollDelta: 41)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(586.0..[998.0]..379.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(630.0..[998.0]..335.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(630.0..[998.0]..335.4), scrollDelta: 44)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(630.0..[998.0]..335.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(650.0..[998.0]..315.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(650.0..[998.0]..315.4), scrollDelta: 20)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(650.0..[998.0]..315.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(686.0..[998.0]..279.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(686.0..[998.0]..279.4), scrollDelta: 36)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(686.0..[998.0]..279.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(793.0..[998.0]..172.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(793.0..[998.0]..172.4), scrollDelta: 107)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(793.0..[998.0]..172.4))
ScrollStartNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0))
ScrollUpdateNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0), scrollDelta: 0.8181512605042371)
ScrollEndNotification(depth: 2 (remote), FixedScrollMetrics(0.8..[337.6]..0.0))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(957.0..[998.0]..8.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(957.0..[998.0]..8.4), scrollDelta: 164)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(957.0..[998.0]..8.4))
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(965.4..[998.0]..0.0))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(965.4..[998.0]..0.0), scrollDelta: 8.365546218487225)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(965.4..[998.0]..0.0))

Instead I should be seeing something like this when at the beginning of the widget:
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(// misc)
followed by this when scrolling:
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(// misc)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(// misc)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(// misc)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(// misc)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(// misc)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(// misc)
...

followed by this when the bottom is reached:
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(//)
This widget tree is also within a stateful widget and I am currently experiencing this when using Flutter Web.

Here is a sample app for you to test and confirm this bug.
`import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(
title: 'See console for scrolling bug after scrolling the list'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: NotificationListener(
onNotification: (scrollNotification) {
print(
scrollNotification); // prints all scroll Notification states for each frame
return false;
},
child: SingleChildScrollView(
child: Column(
children: List.filled(30, null)
.map(
(elem) => Container(
margin: EdgeInsets.all(20),
height: 100,
decoration: BoxDecoration(
border: Border.all(color: Colors.red, width: 1.5),
borderRadius:
const BorderRadius.all(Radius.circular(4.0)),
),
child: Center(
child: Text('Hello'),
),
),
)
.toList(),
),
),
),
);
}
}
`

Hi @khari998
could you please provide your updated  flutter doctor -v?
Thank you

flutter doctor -v
[✓] Flutter (Channel master, v1.11.1-pre.49, on Mac OS X 10.15.1 19B88, locale en-US)
• Flutter version 1.11.1-pre.49 at /Users/Khari/Documents/Dev_Projects/flutter
• Framework revision c90d64b619 (6 hours ago), 2019-11-14 01:16:17 -0500
• Engine revision 7c2a4ec97f
• Dart version 2.7.0
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.1)
• Android SDK at /Users/Khari/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.1
• ANDROID_HOME = /Users/Khari/Library/Android/sdk
• ANDROID_SDK_ROOT = /Users/Khari/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 11.2.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 11.2.1, Build version 11B500
• CocoaPods version 1.8.4
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 3.4)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 37.1.1
• Dart plugin version 183.6270
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
[✓] VS Code (version 1.40.0)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.6.0
[✓] Connected device (2 available)
• Chrome     • chrome     • web-javascript • Google Chrome 78.0.3904.97
• Web Server • web-server • web-javascript • Flutter Tools
flutter run --verbose
[  +28 ms] executing: [/Users/Khari/Documents/Dev_Projects/flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[  +38 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] c90d64b619d674bdca955b94058db01906781819
[        ] executing: [/Users/Khari/Documents/Dev_Projects/flutter/] git describe --match v*.. --first-parent --long --tags
[  +25 ms] Exit code 0 from: git describe --match v*.. --first-parent --long --tags
[        ] v1.11.0-49-gc90d64b61
[   +8 ms] executing: [/Users/Khari/Documents/Dev_Projects/flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[   +6 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/master
[        ] executing: [/Users/Khari/Documents/Dev_Projects/flutter/] git ls-remote --get-url origin
[   +5 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[  +51 ms] executing: [/Users/Khari/Documents/Dev_Projects/flutter/] git rev-parse --abbrev-ref HEAD
[   +6 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] master
[  +10 ms] executing: sw_vers -productName
[  +15 ms] Exit code 0 from: sw_vers -productName
[        ] Mac OS X
[        ] executing: sw_vers -productVersion
[  +14 ms] Exit code 0 from: sw_vers -productVersion
[        ] 10.15.1
[        ] executing: sw_vers -buildVersion
[  +15 ms] Exit code 0 from: sw_vers -buildVersion
[        ] 19B88
[  +28 ms] executing: /usr/bin/xcode-select --print-path
[   +7 ms] Exit code 0 from: /usr/bin/xcode-select --print-path
[        ] /Applications/Xcode.app/Contents/Developer
[   +1 ms] executing: /usr/bin/xcodebuild -version
[ +116 ms] Exit code 0 from: /usr/bin/xcodebuild -version
[   +3 ms] Xcode 11.2.1
Build version 11B500
[  +66 ms] executing: /Users/Khari/Library/Android/sdk/platform-tools/adb devices -l
[   +6 ms] Exit code 0 from: /Users/Khari/Library/Android/sdk/platform-tools/adb devices -l
[        ] List of devices attached
[  +17 ms] executing: /Users/Khari/Documents/Dev_Projects/flutter/bin/cache/artifacts/libimobiledevice/idevice_id -h
[  +71 ms] /usr/bin/xcrun simctl list --json devices
[ +141 ms] More than one device connected; please specify a device with the '-d ' flag, or use '-d all' to act on all devices.
[ +314 ms] Chrome     • chrome     • web-javascript • Google Chrome 78.0.3904.97
[   +1 ms] Web Server • web-server • web-javascript • Flutter Tools
[  +14 ms] "flutter run" took 852ms.
#0      throwToolExit (package:flutter_tools/src/base/common.dart:28:3)
#1      RunCommand.validateCommand (package:flutter_tools/src/commands/run.dart:289:7)

#2      FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:582:11)

#3      FlutterCommand.run. (package:flutter_tools/src/runner/flutter_command.dart:507:33)

#4      AppContext.run. (package:flutter_tools/src/base/context.dart:146:29)

#5      _rootRun (dart:async/zone.dart:1124:13)
#6      _CustomZone.run (dart:async/zone.dart:1021:19)
#7      _runZoned (dart:async/zone.dart:1516:10)
#8      runZoned (dart:async/zone.dart:1463:12)
#9      AppContext.run (package:flutter_tools/src/base/context.dart:145:18)

#10     FlutterCommand.run (package:flutter_tools/src/runner/flutter_command.dart:497:20)
#11     CommandRunner.runCommand (package:args/command_runner.dart:197:27)

#12     FlutterCommandRunner.runCommand. (package:flutter_tools/src/runner/flutter_command_runner.dart:416:21)

#13     AppContext.run. (package:flutter_tools/src/base/context.dart:146:29)

#14     _rootRun (dart:async/zone.dart:1124:13)
#15     _CustomZone.run (dart:async/zone.dart:1021:19)
#16     _runZoned (dart:async/zone.dart:1516:10)
#17     runZoned (dart:async/zone.dart:1463:12)
#18     AppContext.run (package:flutter_tools/src/base/context.dart:145:18)

#19     FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:367:19)

#20     CommandRunner.run. (package:args/command_runner.dart:112:25)
#21     new Future.sync (dart:async/future.dart:222:31)
#22     CommandRunner.run (package:args/command_runner.dart:112:14)
#23     FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:251:18)
#24     run.. (package:flutter_tools/runner.dart:63:22)

#25     _rootRun (dart:async/zone.dart:1124:13)
#26     _CustomZone.run (dart:async/zone.dart:1021:19)
#27     _runZoned (dart:async/zone.dart:1516:10)
#28     runZoned (dart:async/zone.dart:1500:12)
#29     run. (package:flutter_tools/runner.dart:61:18)

#30     AppContext.run. (package:flutter_tools/src/base/context.dart:146:29)

#31     _rootRun (dart:async/zone.dart:1124:13)
#32     _CustomZone.run (dart:async/zone.dart:1021:19)
#33     _runZoned (dart:async/zone.dart:1516:10)
#34     runZoned (dart:async/zone.dart:1463:12)
#35     AppContext.run (package:flutter_tools/src/base/context.dart:145:18)

#36     runInContext (package:flutter_tools/src/context_runner.dart:65:24)

#37     run (package:flutter_tools/runner.dart:50:10)
#38     main (package:flutter_tools/executable.dart:65:9)

#39     main (file:///Users/Khari/Documents/Dev_Projects/flutter/packages/flutter_tools/bin/flutter_tools.dart:8:3)
#40     _startIsolate. (dart:isolate-patch/isolate_patch.dart:303:32)
#41     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)

Has anyone been able to replicate this with the sample app provided?

Hi @khari998
for me works well,
please try this sample code.
This platform is not met for assistance on personal code.
Please see https://flutter.dev/community for resources for asking questions like this,
you may also get some help if you post it on Stack Overflow.
Closing, as this isn't an issue with Flutter itself,
if you disagree please write in the comments and I will reopen it
Thank you

No. That code does not produce the error at all. I am not checking notification.metrics.viewportDimension.
I am checking whether the notification itself is either ScrollStartNotification, ScrollUpdateNotification, or ScrollEndNotification
In order to get the app to perform a behavior when reaching the end of scrolling, I need to check for when ScrollEndNotification occurs. So ScrollEndNotification should only occur when reaching the bottom of the list. If you look at my provided sample code, you will notice that instead of ScrollEndNotification occurring when reaching the bottom of the list, all three states occur at each frame when scrolling. Please go through example code and error description again to see what I am referring to. This can be observed in the code you provided by changing notification.metrics.viewportDimension to just notification.

To illustrate my point further, I will make a slight modification to the code you provided
If you were to scroll through the list, the following code should only print true once when reaching the end of the list.
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) => MaterialApp(
    home: MyHomePage(),
  );
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  static bool _onEndScroll(ScrollNotification notification) {
    if (notification is ScrollEndNotification ) {
      print(true); // should only print true once when reaching the end of the list
    }
    return true;
  }

  @override
  Widget build(BuildContext context) => Scaffold(
    body: NotificationListener<ScrollNotification>(
      onNotification: (ScrollNotification notification) => _onEndScroll(notification),
      child: SingleChildScrollView(
        child:  Column(
          children: List.filled(30, null)
            .map((_) => Container(
              margin: EdgeInsets.all(20),
              height: 100,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.red, width: 1.5),
                borderRadius:
                const BorderRadius.all(Radius.circular(4.0)),
              ),
              child: Center(
                child: Text('Hello'),
              ),
          ),).toList(),
  ),),),);
}

instead of the code above only printing true once when the bottom of the list is reached, you can see that it prints the following to the console:
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true
true

This is because the Notification is producing all states on each frame instead of producing the right state at the appropriate point in the scrolling. ScrollStartNotification should only be produced in the beginning, ScrollUpdateNotification should only be produced when scrolling up or down, and ScrollEndNotification should only be produced when reaching the end of the list. Please see first post in this thread for more detail.

Hi again @khari998
  static bool _onEndScroll(ScrollEndNotification notification) {
    if(notification.dragDetails==null) print('end');
    return true;
  }
  }

    body: NotificationListener<ScrollEndNotification>(
      onNotification: (ScrollEndNotification notification) => _onEndScroll(notification),

do these changes fix the issue?

No it does not. Even that example prints "end" multiple times in the console because the notification is registered improperly on each frame. Please see original post for details of all states being registered on each frame in stead of when they should be registered..

hi @khari998
I'm not experiencing the behavior you are describing,
on what device are you testing the code?
thank you

I am testing it in chrome.
Launching lib/main.dart on Chrome in debug mode...
Building application for the web...                                13.5s
Attempting to connect to browser instance..                         4.0s

Warning: Flutter's support for web development is not stable yet and hasn't
been thoroughly tested in production environments.
For more information see https://flutter.dev/web

🔥  To hot restart changes while running, press "r". To hot restart (and refresh the browser), press "R".
For a more detailed help message, press "h". To quit, press "q".
Debug service listening on ws://<IP_ADDRESS>:57798/EVK6lTYTsWk=
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end

While it seems to be a bug related to chrome, I am also noticing something that may be a contributing factor while looking at this when built for iOS. When testing print(notification) with iOS, ScrollEndNotification is logged to the console whenever you stop scrolling and not when you reach the bottom of the scrollable list. I do not know if this is correct behavior. I am looking to get a notification when the bottom of the list is reached and not when scrolling stops. This may be the root of the cause in chrome as it does not consider scrolling continuous in the same manner.
However, I am also noticing that on iOS, ScrollUpdateNotification seems to log to the console properly while scrolling in either direction. I am getting this which is expected behavior:
flutter: ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(0.0..[707.6]..3492.4), scrollDelta: 2.842170943040401e-14)
flutter: ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(0.0..[646.3]..3553.7), scrollDelta: -61.32350092910855)
flutter: ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(0.0..[620.6]..3579.4), scrollDelta: -25.735544148645147)
flutter: ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(0.0..[617.1]..3582.9), scrollDelta: -3.436929214146744)
flutter: ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(0.0..[627.1]..3572.9), scrollDelta: 9.987340129891663)

Is there any way to be notified when the beginning or end of a scrollable widget is reached? ScrollStartNotification and ScrollEndNotification only seem to register when the act of scrolling either begins or ends regardless of the position in the widget. Please let me know.
This does not change the fact that this is still bugged in Chrome because instead of getting a series of ScrollUpdateNotifications on each frame as occurs on iOS, you get ScrollStart, ScrollUpdate and ScrollEnd Notification on each frame.

What kind of device are you using for scrolling? If it is wheel events, which includes touchpads, these have "inertia". When you fling using a scroll wheel or a trackpad the device will continue sending events even after you reach the end of the scrollable area.

/cc @gspencergoog

I am using a macbook and testing on chrome. I would assume its related to what you're saying because I am using my trackpad

This is expected. However, there's still the issue of intermediate "end" events, and you only expect to see one. Is that correct?

Yes, there should be one start and one end event while scrolling. What I am getting instead is all 3 states at once on each frame. See reference above for the pattern I am getting back.

@khari998
does the issue persist?
With your code sample https://github.com/flutter/flutter/issues/44732#issuecomment-557527071 on dev 1.18.0-10.0.pre I can see single ScrollStartNotification and ScrollEndNotification for each drag movement

@khari998
does the issue persist?
With your code sample #44732 (comment) on dev 1.18.0-10.0.pre I can see single ScrollStartNotification and ScrollEndNotification for each drag movement

Yes I just checked and this issue does persist. It is only present when testing on Flutter Web and not mobile. I still get
ScrollEndNotification
ScrollStartNotification
ScrollUpdateNotification

On every frame while scrolling.
Flutter doctor -v :
[✓] Flutter (Channel master, 1.19.0-2.0.pre.34, on Mac OS X 10.15.4 19E287, locale en-US)
• Flutter version 1.19.0-2.0.pre.34 at /Users/Khari/Documents/Dev_Projects/flutter
• Framework revision 610dc170d9 (6 hours ago), 2020-05-14 00:37:02 +0800
• Engine revision b59e3e9c39
• Dart version 2.9.0 (build 2.9.0-8.0.dev 2bf3259005)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.1)
• Android SDK at /Users/Khari/Library/Android/sdk
• Platform android-29, build-tools 29.0.1
• ANDROID_HOME = /Users/Khari/Library/Android/sdk
• ANDROID_SDK_ROOT = /Users/Khari/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 11.4)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 11.4, Build version 11E146
• CocoaPods version 1.8.4
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 3.4)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 37.1.1
• Dart plugin version 183.6270
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
[✓] VS Code (version 1.45.0)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.10.1
[✓] Connected device (3 available)
• iPhone 11 Pro Max • FAFB4B6E-D712-4D1C-8A74-C5CFE4D56A54 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-13-4 (simulator)
• Web Server        • web-server                           • web-javascript • Flutter Tools
• Chrome            • chrome                               • web-javascript • Google Chrome 81.0.4044.138
• No issues found!

Yes, I'm experiencing this when scrolling with touchpad or mouse (start-update-end on every mouse wheel tick).
(With dragging it's fine - start on mouse down, updates on dragging, end on mouse up).

Yes, I'm experiencing this when scrolling with touchpad or mouse (start-update-end on every mouse wheel tick).
(With dragging it's fine - start on mouse down, updates on dragging, end on mouse up).

Yes I am using my touch pad with my laptop to scroll

Hi! I have this strange problem and I thought it might be related. I couldn't read all of the comments here in detail, sorry for that.
Summary:
This is a WebApp. If I scroll by mouse wheel or by a two-finger gesture by touchpad, it works well.
If I scroll the listview with the left click and mouse drag, it gives "Invalid argument: Maximum call stack size exceeded"
### The problem is:
I am writing a complex WebApp and I've been also building a custom Google Sheet kinda widget which I call AdvancedTable.
So, I have separate ScrollControllers and ListView.builder() widgets for each data column to be shown in the table.
I was using LinkedScrollController package-widget for syncing separate scrollable widgets. It caused some problems regarding swapping data columns, freezing data columns, etc. (Global key issues)
So I decided to create my own scroll sync-er. The below .syncControllers(position) method syncs the controllers so everything scrolls together.

Seems to be the same issue because its getting your e value on every frame from the onNotification function

Issue is replicable using latest master. Scrolling through the list prints all states of the Scroll as below:

 console log
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(0.0..[546.4]..3653.6), DragStartDetails(Offset(497.7, 75.8)))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(0.0..[546.4]..3653.6), direction: ScrollDirection.reverse)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(1.2..[546.4]..3652.4), scrollDelta: 1.1666666666666667, DragUpdateDetails(Offset(0.0, -3.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(6.1..[546.4]..3647.5), scrollDelta: 4.953125, DragUpdateDetails(Offset(0.0, -5.0)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(10.4..[546.4]..3643.2), scrollDelta: 4.284374237060548, DragUpdateDetails(Offset(0.0, -4.3)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(14.2..[546.4]..3639.4), scrollDelta: 3.8125, DragUpdateDetails(Offset(0.0, -3.8)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(15.7..[546.4]..3637.9), scrollDelta: 1.4781265258789062, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(22.0..[546.4]..3631.6), scrollDelta: 6.331249237060547, DragUpdateDetails(Offset(0.0, -6.3)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(25.0..[546.4]..3628.6), scrollDelta: 2.956249237060547, DragUpdateDetails(Offset(0.0, -3.0)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(28.3..[546.4]..3625.3), scrollDelta: 3.2718734741210938, DragUpdateDetails(Offset(0.0, -3.3)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(29.8..[546.4]..3623.8), scrollDelta: 1.5062522888183594, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(31.0..[546.4]..3622.6), scrollDelta: 1.2124977111816406, DragUpdateDetails(Offset(0.0, -1.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(32.5..[546.4]..3621.1), scrollDelta: 1.506252288818363, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(34.0..[546.4]..3619.6), scrollDelta: 1.5062484741210938, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(35.5..[546.4]..3618.1), scrollDelta: 1.5062522888183594, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(37.0..[546.4]..3616.6), scrollDelta: 1.5062484741210938, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(38.5..[546.4]..3615.1), scrollDelta: 1.5062484741210938, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(39.4..[546.4]..3614.2), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(39.8..[546.4]..3613.8), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(40.3..[546.4]..3613.3), scrollDelta: 0.41562461853027344, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(40.7..[546.4]..3612.9), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(41.8..[546.4]..3611.8), scrollDelta: 1.1281242370605469, DragUpdateDetails(Offset(0.0, -1.1)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(42.2..[546.4]..3611.4), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(42.6..[546.4]..3611.0), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(42.9..[546.4]..3610.7), scrollDelta: 0.20937347412109375, DragUpdateDetails(Offset(0.0, -0.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(43.5..[546.4]..3610.1), scrollDelta: 0.65625, DragUpdateDetails(Offset(0.0, -0.7)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(44.4..[546.4]..3609.2), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(45.3..[546.4]..3608.3), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(46.3..[546.4]..3607.3), scrollDelta: 0.9187488555908203, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.2..[546.4]..3606.4), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.6..[546.4]..3606.0), scrollDelta: 0.4187488555908203, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(48.0..[546.4]..3605.6), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(48.0..[546.4]..3605.6), direction: ScrollDirection.forward)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), scrollDelta: -0.18437576293945312, DragUpdateDetails(Offset(0.0, 0.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.6..[546.4]..3606.0), scrollDelta: -0.19687461853027344, DragUpdateDetails(Offset(0.0, 0.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), scrollDelta: -0.20624923706054688, DragUpdateDetails(Offset(0.0, 0.2)))
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), DragEndDetails(Velocity(0.0, 0.0)))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), scrollDelta: 0.3999999999999986)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6), scrollDelta: 1.2000000000000028)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0), scrollDelta: 1.6000000000000014)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4), scrollDelta: 1.6000000000000014)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4), scrollDelta: 2)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4), scrollDelta: 2)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0), scrollDelta: 2.3999999999999986)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(61.4..[546.4]..3592.2))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(61.4..[546.4]..3592.2), scrollDelta: 2.799999999999997)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(61.4..[546.4]..3592.2))

Also, it prints true while scrolling as mentioned https://github.com/flutter/flutter/issues/44732#issuecomment-557527071

flutter doctor -v

[✓] Flutter (Channel master, 1.26.0-13.0.pre.229, on Mac OS X 10.15.4 19E2269
    darwin-x64, locale en-IN)
    • Flutter version 1.26.0-13.0.pre.229 at
      /Users/dhs/documents/Fluttersdk/flutter
    • Framework revision 650b240634 (5 hours ago), 2021-01-27 21:39:06 -0800
    • Engine revision 68cd4c42b5
    • Dart version 2.12.0 (build 2.12.0-267.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin
        code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see
      https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.16.0

[✓] Connected device (4 available)
    • SM A260G (mobile)            • 5200763ebcfa861f • android-arm    • Android
      8.1.0 (API 27)
    • AOSP on IA Emulator (mobile) • emulator-5554    • android-x86    • Android
      9 (API 28) (emulator)
    • macOS (desktop)              • macos            • darwin-x64     • Mac OS
      X 10.15.4 19E2269 darwin-x64
    • Chrome (web)                 • chrome           • web-javascript • Google
      Chrome 88.0.4324.96

! Doctor found issues in 1 category.

Issue is replicable using latest master. Scrolling through the list prints all states of the Scroll as below:

 console log
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(0.0..[546.4]..3653.6), DragStartDetails(Offset(497.7, 75.8)))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(0.0..[546.4]..3653.6), direction: ScrollDirection.reverse)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(1.2..[546.4]..3652.4), scrollDelta: 1.1666666666666667, DragUpdateDetails(Offset(0.0, -3.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(6.1..[546.4]..3647.5), scrollDelta: 4.953125, DragUpdateDetails(Offset(0.0, -5.0)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(10.4..[546.4]..3643.2), scrollDelta: 4.284374237060548, DragUpdateDetails(Offset(0.0, -4.3)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(14.2..[546.4]..3639.4), scrollDelta: 3.8125, DragUpdateDetails(Offset(0.0, -3.8)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(15.7..[546.4]..3637.9), scrollDelta: 1.4781265258789062, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(22.0..[546.4]..3631.6), scrollDelta: 6.331249237060547, DragUpdateDetails(Offset(0.0, -6.3)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(25.0..[546.4]..3628.6), scrollDelta: 2.956249237060547, DragUpdateDetails(Offset(0.0, -3.0)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(28.3..[546.4]..3625.3), scrollDelta: 3.2718734741210938, DragUpdateDetails(Offset(0.0, -3.3)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(29.8..[546.4]..3623.8), scrollDelta: 1.5062522888183594, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(31.0..[546.4]..3622.6), scrollDelta: 1.2124977111816406, DragUpdateDetails(Offset(0.0, -1.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(32.5..[546.4]..3621.1), scrollDelta: 1.506252288818363, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(34.0..[546.4]..3619.6), scrollDelta: 1.5062484741210938, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(35.5..[546.4]..3618.1), scrollDelta: 1.5062522888183594, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(37.0..[546.4]..3616.6), scrollDelta: 1.5062484741210938, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(38.5..[546.4]..3615.1), scrollDelta: 1.5062484741210938, DragUpdateDetails(Offset(0.0, -1.5)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(39.4..[546.4]..3614.2), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(39.8..[546.4]..3613.8), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(40.3..[546.4]..3613.3), scrollDelta: 0.41562461853027344, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(40.7..[546.4]..3612.9), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(41.8..[546.4]..3611.8), scrollDelta: 1.1281242370605469, DragUpdateDetails(Offset(0.0, -1.1)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(42.2..[546.4]..3611.4), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(42.6..[546.4]..3611.0), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(42.9..[546.4]..3610.7), scrollDelta: 0.20937347412109375, DragUpdateDetails(Offset(0.0, -0.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(43.5..[546.4]..3610.1), scrollDelta: 0.65625, DragUpdateDetails(Offset(0.0, -0.7)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(44.4..[546.4]..3609.2), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(45.3..[546.4]..3608.3), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(46.3..[546.4]..3607.3), scrollDelta: 0.9187488555908203, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.2..[546.4]..3606.4), scrollDelta: 0.9187507629394531, DragUpdateDetails(Offset(0.0, -0.9)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.6..[546.4]..3606.0), scrollDelta: 0.4187488555908203, DragUpdateDetails(Offset(0.0, -0.4)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(48.0..[546.4]..3605.6), scrollDelta: 0.4187507629394531, DragUpdateDetails(Offset(0.0, -0.4)))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(48.0..[546.4]..3605.6), direction: ScrollDirection.forward)
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), scrollDelta: -0.18437576293945312, DragUpdateDetails(Offset(0.0, 0.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.6..[546.4]..3606.0), scrollDelta: -0.19687461853027344, DragUpdateDetails(Offset(0.0, 0.2)))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), scrollDelta: -0.20624923706054688, DragUpdateDetails(Offset(0.0, 0.2)))
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), DragEndDetails(Velocity(0.0, 0.0)))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.4..[546.4]..3606.2), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), scrollDelta: 0.3999999999999986)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(47.8..[546.4]..3605.8), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6), scrollDelta: 1.2000000000000028)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(49.0..[546.4]..3604.6), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0), scrollDelta: 1.6000000000000014)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(50.6..[546.4]..3603.0), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4), scrollDelta: 1.6000000000000014)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(52.2..[546.4]..3601.4), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4), scrollDelta: 2)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(54.2..[546.4]..3599.4), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4), scrollDelta: 2)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(56.2..[546.4]..3597.4), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0), scrollDelta: 2.3999999999999986)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0))
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0), direction: ScrollDirection.idle)
UserScrollNotification(depth: 0 (local), FixedScrollMetrics(58.6..[546.4]..3595.0), direction: ScrollDirection.reverse)
ScrollStartNotification(depth: 0 (local), FixedScrollMetrics(61.4..[546.4]..3592.2))
ScrollUpdateNotification(depth: 0 (local), FixedScrollMetrics(61.4..[546.4]..3592.2), scrollDelta: 2.799999999999997)
ScrollEndNotification(depth: 0 (local), FixedScrollMetrics(61.4..[546.4]..3592.2))

Also, it prints true while scrolling as mentioned https://github.com/flutter/flutter/issues/44732#issuecomment-557527071

flutter doctor -v

[✓] Flutter (Channel master, 1.26.0-13.0.pre.229, on Mac OS X 10.15.4 19E2269
    darwin-x64, locale en-IN)
    • Flutter version 1.26.0-13.0.pre.229 at
      /Users/dhs/documents/Fluttersdk/flutter
    • Framework revision 650b240634 (5 hours ago), 2021-01-27 21:39:06 -0800
    • Engine revision 68cd4c42b5
    • Dart version 2.12.0 (build 2.12.0-267.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin
        code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see
      https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.16.0

[✓] Connected device (4 available)
    • SM A260G (mobile)            • 5200763ebcfa861f • android-arm    • Android
      8.1.0 (API 27)
    • AOSP on IA Emulator (mobile) • emulator-5554    • android-x86    • Android
      9 (API 28) (emulator)
    • macOS (desktop)              • macos            • darwin-x64     • Mac OS
      X 10.15.4 19E2269 darwin-x64
    • Chrome (web)                 • chrome           • web-javascript • Google
      Chrome 88.0.4324.96

! Doctor found issues in 1 category.

Hi, do we have any updates on this one? Since all possible states of the ScrollNotification are printed on each frame, I can't  detect actual scroll end notification on the Web. Hence I can't utilize the Router.navigate method. I want to create a browser entry each time the scrolling ends as suggested in this issue.

Also getting this, MacOS, stable.

reproducible on the latest stable and the master channel

Minimal reproducible code sample
import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      title: 'Trackpad Scroll Events on each Frame',
      theme: ThemeData.dark(),
      home: Scaffold(
        body: DefaultScrollView(),
      ),
    ),
  );
}

class DefaultScrollView extends StatelessWidget {
  const DefaultScrollView({
    Key? key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return NotificationListener<ScrollNotification>(
      onNotification: (scrollNotification) {
        if (scrollNotification is ScrollStartNotification) {
          print("START");
        } else if (scrollNotification is ScrollUpdateNotification) {
          print("Update");
        } else if (scrollNotification is ScrollEndNotification) {
          print("END");
        }
        return false;
      },
      child: SingleChildScrollView(
        child: Column(
          children: [
            for (int i = 0; i < 100; i++)
              Container(
                // width: 100,
                height: 100,
                color: (i % 2 == 0) ? Colors.blue : Colors.black,
                child: Center(
                  child: Text(
                    "$i",
                  ),
                ),
              ),
          ],
        ),
      ),
    );
  }
}

flutter doctor -v
[✓] Flutter (Channel stable, 2.2.3, on macOS 11.5.2 20G95 darwin-arm, locale en-GB)
    • Flutter version 2.2.3 at /Users/mahesh/Documents/flutter
    • Framework revision f4abaa0735 (6 weeks ago), 2021-07-01 12:46:11 -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5.1, Build version 12E507
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] VS Code (version 1.58.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.25.0

[✓] Connected device (4 available)
    • iPhone 12 Pro Max (mobile) • 5430F628-A903-402C-A635-D55D7E6EEFCA • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)            • macos                                • darwin-arm64   • macOS 11.5.2
      20G95 darwin-arm
    • Chrome (web)               • chrome                               • web-javascript • Google Chrome
      92.0.4515.131

• No issues found!

[✓] Flutter (Channel master, 2.5.0-7.0.pre.8, on macOS 11.5.2 20G95 darwin-arm, locale en-GB)
    • Flutter version 2.5.0-7.0.pre.8 at /Users/mahesh/Documents/flutter_master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 40e8620a27 (7 days ago), 2021-08-06 09:14:50 +0430
    • Engine revision 431ac604da
    • Dart version 2.14.0 (build 2.14.0-383.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5.1, Build version 12E507
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] VS Code (version 1.58.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.25.0

[✓] Connected device (4 available)
    • iPhone 12 Pro Max (mobile) • 5430F628-A903-402C-A635-D55D7E6EEFCA • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)            • macos                                • darwin-arm64   • macOS 11.5.2
      20G95 darwin-arm
    • Chrome (web)               • chrome                               • web-javascript • Google Chrome
      92.0.4515.131

• No issues found!

Hey @khari998 I am catching up on the history of this issue... can you confirm that the scrolling you are doing is a mouse scroll action?
Also, I noticed this comment earlier

So ScrollEndNotification should only occur when reaching the bottom of the list.

This is not necessarily true, a ScrollEndNotification does not represent the end of the list, it represents the end of the scrolling action. For mouse scrolling, scroll action is handled and ended constantly since we do not know if the user will scroll more. On mobile devices, we have contact with the device that help us distinguish a definitive start and end to the motion.
Could you instead check the ScrollMetrics of the notification you are receiving to validate if you are at the end of the list? The metrics should provide you with the current position (notification.metrics.pixels) and the position at the end of the list (notification.metrics.maxScrollExtent). I think this is working as expected, but please let me know if this resolves your issue.

Hey @khari998 I am catching up on the history of this issue... can you confirm that the scrolling you are doing is a mouse scroll action?

It was a mouse scroll action. So this is intended behavior?

Also, I noticed this comment earlier

So ScrollEndNotification should only occur when reaching the bottom of the list.

This is not necessarily true, a ScrollEndNotification does not represent the end of the list, it represents the end of the scrolling action. For mouse scrolling, scroll action is handled and ended constantly since we do not know if the user will scroll more. On mobile devices, we have contact with the device that help us distinguish a definitive start and end to the motion.
Could you instead check the ScrollMetrics of the notification you are receiving to validate if you are at the end of the list? The metrics should provide you with the current position (notification.metrics.pixels) and the position at the end of the list (notification.metrics.maxScrollExtent). I think this is working as expected, but please let me know if this resolves your issue.

I will try this thank you.

It was a mouse scroll action. So this is intended behavior?

Yes, I believe so, but please do let me know how that works for you. :)

I don't know this is correct or not.
I got the same issue with macOS/iOS on Flutter beta 2.5.0. Then I updated Flutter beta 2.6.0 - Flutter stable 2.5.1. It didn't work.
I keep checkout to Flutter 2.2.3. It was the same.
But after I checkout back to Flutter stable 2.5.1, then Flutter beta 2.6.0. It works!
You guys can try your luck 😄

I will try this thank you.

@khari998 did trying this comment work out for you?


Fixed Windows and created Release job

Fixed Windows build changing x32 to x64.
Created the common release stage for all builds.
Fixed an issue when two pipelines start when a TAG was created.

@sergregory please, take a look.


Zebra stops printing after one job

I am trying to setup my Zebra ZD220 with Cups 2.2.10 on Debian 10 (Virtual Machine, ESXI). I was able to print one page from Windows client, but after that it completely stopped, I can't even print a test page from Cups.
What I noticed that when I am trying to print I get usblp0: removed.
[Sun Jan 31 18:45:50 2021] usb 2-1: new high-speed USB device number 2 using ehci-pci
[Sun Jan 31 18:45:51 2021] usb 2-1: New USB device found, idVendor=0a5f, idProduct=0164, bcdDevice= 1.00
[Sun Jan 31 18:45:51 2021] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[Sun Jan 31 18:45:51 2021] usb 2-1: Product: ZTC ZD220-203dpi ZPL
[Sun Jan 31 18:45:51 2021] usb 2-1: Manufacturer: Zebra Technologies
[Sun Jan 31 18:45:51 2021] usb 2-1: SerialNumber: D4J193xxxxx
[Sun Jan 31 18:45:51 2021] usblp 2-1:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x0A5F pid 0x0164
[Sun Jan 31 18:45:51 2021] usbcore: registered new interface driver usblp
[Sun Jan 31 18:46:28 2021] usblp0: removed
[Sun Jan 31 18:46:28 2021] usblp 2-1:1.0: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x0A5F pid 0x0164
[Sun Jan 31 18:53:05 2021] usblp0: removed

First, I thought that I need to set no-reattach and unidir, but it is already set in org.cups.usb-quirks. I tried to set manually with lpadmin too, but the printer is acting the same.
I don't see any special in the logs, the jobs sometimes are showing up as completed, then after many trying unable to send data to printer.

$ lsusb
Bus 001 Device 004: ID 0a5f:0164 Zebra
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

$ lpinfo -v
network beh
file cups-brf:/
network ipp
network socket
network ipps
network https
network lpd
network http
direct hp
direct usb://Zebra%20Technologies/ZTC%20ZD220-203dpi%20ZPL?serial=D4J193400747
direct hpfax
network dnssd://Canon%20TS5100%20series._ipp._tcp.local/?uuid=00000000-0000-1000-8000-0018250f2b97
network dnssd://TS5100LAN%20%40%20ubuntu._ipp._tcp.local/cups?uuid=7e690bee-f040-3a1c-56e1-279733bb2273
network dnssd://Zebra%20Technologies%20ZTC%20ZD220-203dpi%20ZPL%20%40%20raspberrypi._ipp._tcp.local/cups?uuid=53a386dd-7cf6-37e3-5f02-fc5ae0a66626
network dnssd://Zebra%20Technologies%20ZTC%20ZD220-203dpi%20ZPL%20%40%20ubuntu._ipp._tcp.local/cups?uuid=0dd3189b-2215-3951-4bda-a0faa310f45d
network dnssd://hplaserjet._ipps._tcp.local/
network socket://<IP_ADDRESS>
network ipp://30D048000000.local:631/ipp/print

For the future:
In .vmx for ESXI guest need to set:
usb.quirks.device0 = "0x0a5f:0x0164 skip-reset, skip-refresh, skip-setconfig"


Not sure if the backpropagation here also follows pipeline

Cool project!
In the code, it uses queuing mechanisms to ensure the pipeline in forward propagation. But what I am not sure how it ensures the pipeline during backward propagation. If there is some mechanism, maybe you want to include it in the document.

That's a good question.
Backpropagation is performed by PyTorch's autograd engine automatically. We don't need to reimplement backpropagation. The only thing what we should care is to generate an autograd function graph with the correct dependency. A graph generated from GPipe.forward() looks like:
                 +-- [0][0] -- [1][0] --+
                 |                      |
input -- chunk --+                      +-- cat -- output
                 |                      |
                 +-- [0][1] -- [1][1] --+

* [i][j]: j-th micro-batch on i-th partition

The engine uses a thread for each device; 1 for CPU, n more for GPUs. In the case of the above example, cat, [1][0], and [1][1] are handled on the thread for cuda:1 while chunk, [0][0], and [0][1] are handled on the thread for cuda:0. Each thread can compute parallelly even though another thread is still computing. Therefore, the pipeline can be ensured during backpropagation:
cycle  cuda:0  cuda:1
-----  ------  ------
    1          output
    2          cat
    3          [1][1]
    4  [0][1]  [1][0]
    5  [0][0]
    6  chunk
    7  input

The implementation detail is not a spec. It might be changed for more efficiency. So I don't want to introduce it in the "Read the Docs" documentation. Instead, maybe we can write some article or a technical report. We already wrote an article in our blog but currently, it's written in only Korean.

@lynex May I close this issue?

@anxuthu I don't understand why you think the backpropagation does not follow GPipe. Can you explain it?

I was just not sure why the backpropagation would follow GPipe by making dependencies of micro-batches during the forward process. But I get it now :)

@anxuthu Thank you for the update.


[New game]: Bubble Game

🎮 Game Request
Game logic and basic description
Click on The Given number
https://github.com/kunjgit/GameZone/assets/158465309/38d2ec6c-dd83-417c-998e-6e04c80ea0e3
Point down the features
Game points

Hits will be shown and user will have to click on that number
Every Hit will score 10 marks
30 sec timer will be given every time

Select program in which you are contributing
GSSoC24
Code of Conduct

[X] I follow CONTRIBUTING GUIDELINE of this project.

Hey @katarianikita2003 !
Thank you for raising an issue 💗
You can self assign the issue by commenting /assign in comment 😀
Make sure you follow CODE OF CONDUCT and CONTRIBUTING GUIDELINES 🚀
Don’t Forget to ⭐ our GameZone🎮
Make sure you join our Discord🕹

Hey @katarianikita2003!
We are already having a similar game request in #4598 👀
Make sure you come up with a cool unique idea 😀
Waiting for your new game idea 💗.

Hey @katarianikita2003 ! Thank you so much for your raising the issue💗
It’s all yours, you can come anytime again and make some contributions! 🚀
Alone, we can do little, but together we can do so much! 😇


quickcheck selection functions on singleton lists

The thing I actually encountered in code was of the form
  x <- oneof [y]

(after some previous refactoring).
I guess the other hints, for elements etc., could also be encountered.

Thanks!


Merge changes correctly

Notice that several of my changes were deleted by @arthi-ramaniam in the commit 39d99dbac4da2520c7d1c6136bd326dd985703a1
Please exercise more caution when merging your changes.

Please follow this sequence: checkout, lock repository, view the result of merge in your local directory and resolve conflicts, verify, check-in, and then release the lock on the repository.
Please resolve ALL conflicts before check-in of your code.
Is there a list of tests that we could run (to ascertain correct regression) before pushing code into the repository?

Currently there are no tests.

Is it in view.py? Or admin.py also is affected?

We are presently using separate branches before merging. Closing this issue.


LNK1181	cannot open input file ..\Release\Universal Windows\Logging.lib

I have followed the instruction given in "https://github.com/Microsoft/WinObjC/wiki/Building-From-Source" i am getting ("cannot open input file" and MSB4062) issues in step 6 and step 8. I did install git lfs and confirm through git bash "git lfs initialized" that git lfs has installed already.

@Nambukarthy, could you copy/paste all the info from the VS Output window to help us better diagnose the error?
Also, please make sure your machine fulfils all the prerequisites of the Getting Started section, in particular VS Update 2 and Windows 10, build 10586 or higher.

@Nambukarthy , please reopen with more info if the issue persists with the latest release of the SDK.


[endpoint] All transactions

This endpoint represents all validated transactions. This endpoint can also be used in streaming mode. This makes it possible to use it to listen for new transactions as they get made in the Stellar network.
use stellar_client::endpoint::transaction::All;

https://www.stellar.org/developers/horizon/reference/endpoints/transactions-all.html

@kbacha I would like to take a stab at this over the weekend!


Add "Select all" for Slack channels.

Description
A customer is requesting the capability to "select all" searched Slack channel when adding which ones to synchronized.
For now the "Select all" button is gated under the "isSearchEnabled" flag because it's only possible when the search is enabled, which is for Slack only right now.
Screenshot

Risk

Deploy Plan

I have FUD on the expectation it might set that we will sync all future slack channels.

Should we add a mention here saying that all newly created channels won't be automatically indexed?


Make _comment node visible for syntax highlighting

https://github.com/nvim-treesitter/nvim-treesitter allows to use tree-sitter parser to enable syntax highlighting in Neovim. We would like to create some highlight queries to support highlighting for tree-sitter-latex. First, thank you for creating this robust and hierarchical grammar for LaTex!
I encountered two minor issue when creating the highlights

right now comments are hidden nodes. This means we cannot capture them by (comment). Which is very useful for syntax highlighting
the command: (_) ;; not visible in grammar field of section/subsection commands is not visible in the grammar as the children (\\subsection/`\section``) are defined by regexes and not a dedicated rule

Ref: https://github.com/nvim-treesitter/nvim-treesitter/pull/1106

Thanks for the report. The last two commits on the master branch should fix the issue.
Please let me know if there needs anything else to be done.

Works really nice! Thank you a lot!


build(main): release 1.6.3

:robot: I have created a release beep boop
1.6.3 (2024-10-04)
Documentation

Fix CHANGELOG.md (0344b9c)

This PR was generated with Release Please. See documentation.

:robot: Created releases:

v1.6.3
:sunflower:


feat: upgrade axum and other dependencies, use state instead extension

This PR aims to update Axum to its latest version, transitioning from using the Extension mechanism to the recommended State.
Changes

Axum Upgrade: The core of this update is moving to the latest version of Axum. This upgrade necessitates several changes in how we manage shared data across our request handlers.
Refactoring to Use State: Following the guidance in tokio-rs/axum#1830, I've refactored tests to replace Extension usage with State.
Axum Extractos instead of implementing, I use axum's built-in ones (I think it will not generate such big problems with axum updates, there is no point in reinventing the wheel + and may improve the readability of the handler): Path, Query, Json etc.
Nested Query Instead of overriding the Query implementation, I changed it to NestedQuery (instead of Query) so that I only use it when needed

Todo

[x] Fix Implement query string handling.
[x] Clean up code

one bug with axum state left: https://github.com/kstasik/schema-tools-templates/pull/52


Create 0000-01-02-sejal-patil-2112.md

layout: slide
title: "Welcome to our second slide!"
Your text
Use the left arrow to go back!

added

added message


Add support for displaying multiple servers

Also support the description field of server objects:
http://spec.openapis.org/oas/v3.0.3#server-object

Here's how this change affects the rendered site, with the multi-item server array also introduced in this PR for demonstration purposes (based on the multiple servers example from the OpenAPI 3.0.3 spec):
  "servers": [
    {
      "url": "http://petstore-dev.swagger.io/api",
      "description": "Development server"
    },
    {
      "url": "http://petstore.swagger.io/api",
      "description": "Production server"
    }
  ],

Before:

After:

Here's how this change affects the rendered site, with the multi-item server array also introduced in this PR for demonstration purposes (based on the multiple servers example from the OpenAPI 3.0.3 spec):
  "servers": [
    {
      "url": "http://petstore-dev.swagger.io/api",
      "description": "Development server"
    },
    {
      "url": "http://petstore.swagger.io/api",
      "description": "Production server"
    }
  ],

Before:

After:


go.mod: update kevinburke/ssh_config to v1.2.0

Previously if you tried to read a HostName in a config file that
looked like this:
Host github
    HostName github.com        # This is the host for code review

DefaultUserSettings.Get("HostName") would return "github.com        ",
which I think is unintuitive and unexpected.
This behavior is fixed in v1.2 which would return "github.com" in the
above example.

Hmm would be nice if https://github.com/go-git/go-git/pull/507 was merged soon(so we can update go-git as a whole and don't update indirect dependencies ourselves). But seems to be rather non-breaking change, approving.

Yeah, I'm submitting to most of the dependencies because I don't know if/when go-git will get updated.

Their last update was nine updates ago and last activity was over a month so 🤷🏽.

Codecov Report

:exclamation: No coverage uploaded for pull request base (main@420851c). Click here to learn what that means.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main   #19286   +/-   ##
=======================================
  Coverage        ?   47.41%
=======================================
  Files           ?      939
  Lines           ?   131127
  Branches        ?        0
=======================================
  Hits            ?    62178
  Misses          ?    61471
  Partials        ?     7478

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 420851c...e1a7c00. Read the comment docs.


In 2.1, accumulo shell exhibits unexpected copy/paste behavior

Describe the bug
In prior versions of Accumulo, the user could copy and paste a newline-separated list of commands into the shell and have them be executed in sequence. In 2.1, this seems to be no longer possible. When the user attempts to execute the pasted commands, it seems that nothing is actually executed. A workaround is to place the commands in a file and to have the shell execute the file, but since the copy/paste scenario is a common use case for us, it seemed worth reporting here.
A secondary observation is that, when any text is pasted into the shell, the text is automatically highlighted (background and foreground colors inverted), as if the user had click+drag-selected the text with the mouse.
Versions (OS, Maven, Java, and others, as appropriate):

Affected version(s) of this project: 2.1.0
OS: CentOS 7.5, RHEL 8

To Reproduce

Copy/paste valid newline-separated commands into the shell
Observe that the command text is automatically highlighted
Hit ENTER
Observe that none of the commands are executed

Expected behavior
The list of commands is executed in order, as with the 1.x shell
Screenshots
Commands copied/pasted...

After hitting ENTER...

I was able to reproduce your issue. IIRC the jline dependency was upgraded and looking at their documentation, issues, and user list, I'm guessing this is the issue. I did notice two things:

When you press a key on the keyboard, the highlighting goes away.
If you paste a single line and hit enter, it works.

So, I think the issue is only with dealing the pasting of multiple lines (and the newline after them).

Reading through some of the issues and comments on the user list, it looks like we might need to create out own parser.

Thanks @dlmarion !


v1.9.3

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

Still need to grab the checksum once the release is officially made:
curl -sL https://github.com/leeping/forcebalance/archive/refs/tags/1.9.3.tar.gz | sha256sum

Hi! This is the friendly automated conda-forge-linting service.
I wanted to let you know that I linted all conda-recipes in your PR (recipe) and found some lint.
Here's what I've got...
For recipe:

Non noarch packages should have python requirement without any version constraints.
Non noarch packages should have python requirement without any version constraints.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

So, for the 1.9.2 release, all tests passed with permutations of {pypy, cpython}{py3.7, 3.8, 3.9}{linux, osx}.
The current test matrix is checking for py3.10, which we don't realistically expect to support (?) because there aren't openmm/rdkit packages going that high.

@conda-forge-admin please rerender

On the last commit, the Python 3.10 and Pypy builds are failing, but the others are passing. Unfortunate but diagnostically useful.

I'm not seeing any new files: https://anaconda.org/conda-forge/forcebalance/files


UWP NavigationView.PaneFooter Rollover Issues

Hi,
Im not sure if this is an issue OR a limitation with NavigationView itself. Essentailly, the PaneFooter is having issues with the Rollover effects within the latest update. I believe this also affects earlier versions.
I have linked my StackOverflow discussion to further clarify the issue at hand:

As the image/post suggest, I cannot seem to find a way to make the rollover effects stretch across the entire span of the Navigation View when bound to the Footer. Theres no issues with standard NavViewItems except when they are placed inside the PaneFooter.
Is there any way to correct this. My current workaround is to use a Textblock within a stack panel and a Button. Its a horrible workaround that just doesnt look nice.
Ideally the PaneFooter should copy the same rollover effect/formatting as the settings option at the bottom of NavView.

This appears to be a platform issue rather than an issue with the sample itself. I've asked the feature team to investigate, but it is not a sample issue. I'll update this issue with any response from the feature team, but the issue itself is closed as "not a sample issue".


Add GObject Introspection support

Add GObject Introspection support to generate .gir file to support multi-program language
https://gi.readthedocs.io/en/latest/index.html

I would need some help with that.
Can you write a test scenario for this (e.g. in Python something that writes to a file and the reads it again)?

Here are two python examples for testing:
import xlsxio
xlsxio_reader = xlsxio.XlsxioReader('file.xlsx')
sheet = xlsxio_reader.get_sheet()
data = sheet.read_data()
sheet.close()
xlsxio_reader.close()

print(data)

import xlsxio
import datetime

types = [str, str, float, int, bool, datetime.datetime]
with xlsxio.XlsxioReader('file.xlsx') as reader:
    with reader.get_sheet('hello', types=types) as sheet:
        header = sheet.read_header()
        only_active = []
        for row in sheet.iter_rows():
            if row[4]:
                only_active.append(row)
print(only_active)

Example project with GObject introspection support:
https://github.com/libical/libical/blob/master/CMakeLists.txt


Local page is working, but unable to upload on github

Description

Environment

Minimal Mistakes version: 4.11.2
Ruby gem or remote theme version: 2.7.6
Jekyll version: 3.8.2
Git repository URL:
Operating system: Windows
GitHub Pages hosted (if yes provide URL to site): vtoliveira.github.io

Expected behavior
I configured jekyll and minimal mistake to use on my machine locally, and everything went ok. I uncommented the theme line in _config, and have the following structure in main.scss:
main.scss:
@charset "utf-8";

@import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin
@import "minimal-mistakes"; // main partials

Steps to reproduce the behavior
However, when I push the files to github,  I am not able to upload my page. I receive the following e-mail:

The page build failed for the master branch with the following error:
Your SCSS file minimal-mistakes-master/assets/css/main.scss has an error on line 2: File to import not found or unreadable: minimal-mistakes. Load path: /hoosegow/.bundle/ruby/2.4.0/gems/jekyll-theme-minimal-0.1.1/_sass. For more information, see https://help.github.com/articles/page-build-failed-invalid-sass-or-scss/.

I have tried to change in _config to remote_theme, as instructed in the Quick Start Tutorial. Also, changed the Gemfiles to get things directly from minimal mistakes github, but I am still unable to do it. Can someone please, help me?

Since you're hosting on GitHub Pages follow the "remote theme" instructions.
https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/#github-pages-method
Also I noticed that in your repo you have everything stashed in a subfolder which may be confusing GitHub. I would move everything /minimal-mistakes-master to the root of your repo next to _config.yml.
You also don't need _layouts, _includes, _sass, assets/css, etc. These are all bundled with the theme and are copied over on demand when using the theme as a remote theme or Ruby gem. This is another reason why you may be getting the error as it's getting confused trying to find Sass partials that aren't in the path it expects.

Yes, it worked. Thank you very much.
Sorry for bothering you with this simple question, thanks again and nice work, I really loved your templates!


System Status Colors

New Feature:

Make it possible to mark systems as unknown (grey), friendly (blue), occupied (orange), hostile (red)
Marked systems have the respective border color
Instead of visualizing a selected system by border color use a white glow
system status should be persisted even after the system gets deleted from the map

I already started development on this feature ;)

i already have it done to about 90% will finish tomorrow
On Sat, 2 Dec 2023, 22:44 pfh59, @.***> wrote:

@rdymade https://github.com/rdymade, how can you work on it?
I can work on it next week if you don't have enough time.
It will be a quick feature with a result next week.
—
Reply to this email directly, view it on GitHub
https://github.com/pfh59/eve-whmapper/issues/175#issuecomment-1837260818,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABSV4P7T7KCQDZLNYI3LTRDYHOOMLAVCNFSM6AAAAABADK6LHOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMZXGI3DAOBRHA
.
You are receiving this because you were mentioned.Message ID:
@.***>


Test Explorer - Give frameworks full control over test explorer layout

I assume that the test explorer view in IDEs is driven by the TestMethodIdentifierProperty on TestNodes?
This provides no way to show parameter types or argument types.
In data driven testing, I'd say it's not uncommon to inject in different objects that inherit from a base, and then want to run only those particular tests. This doesn't seem to be possible currently.
For example, consider a multi-tenanted application, and you want to run tests against a particular tenant you'd made changes for.
In pseudo code, the test is set up like this:
class TenantBase { ... }
class Tenant1 : TenantBase { ... }
class Tenant2 : TenantBase { ... }
class Tenant3 : TenantBase { ... }
[Inject<Tenant1>]
[Inject<Tenant2>]
[Inject<Tenant3>]
class MyTestClass(TenantBase tenant)

Meaning it is repeated for each tenant, with a different object being passed in.
Because the test explorer / test node properties have no visibility of the parameter types, or more importantly, the argument types, there is no way for it to display this in a nice way.
For example, in VSTest in NUnit, I could set up a test like this, and I'd get in the test explorer:
> MyTestClass
    > MyTestClass(MyNamespace.Tenant1)
    > MyTestClass(MyNamespace.Tenant2)
    > MyTestClass(MyNamespace.Tenant3)

This makes it super easy to selectively run the tests that I want.

I have tried this in my own framework.
Code
new TestMethodIdentifierProperty
(
...
TypeName: testDetails.ClassType.Name,
...
)

[ClassDataSource(typeof(Derived1))]
[ClassDataSource(typeof(Derived2))]
public class ClassDataSourceDrivenTests2
{
    private readonly Base _base;

    public ClassDataSourceDrivenTests2(Base @base)
    {
        _base = @base;
    }

    [Test]
    public void Base_Derived1()
    {
        // Dummy method
    }

    [Test]
    public void Base_Derived2()
    {
        // Dummy method
    }

    public class Base {}
    public class Derived1 : Base {}
    public class Derived2 : Base {}
}

Text explorer view:

So you can see that it makes it very difficult - I don't actually know which one I'm running.
Also, this would technically affect the test methods too - While they have the parameter types, there's no way to pass in the argument types, so we wouldn't be able to differentiate. Of course, we can mitigate this with a custom display name, but this isn't something we can do for the class itself.

Here's a current VSTest NUnit repro:
[TestFixtureSource(typeof(Base), nameof(Base.All))]
public class ClassDataSourceDrivenTests2
{
    private readonly Base _base;

    public ClassDataSourceDrivenTests2(Base @base)
    {
        _base = @base;
    }

    [Test]
    public void Base_Derived1()
    {
        Console.WriteLine(_base.GetType());
    }

    [Test]
    public void Base_Derived2()
    {
        Console.WriteLine(_base.GetType());
    }

    public class Base
    {
        public static IEnumerable<Base> All()
        {
            yield return new Derived1();
            yield return new Derived2();
        }
    }

    public class Derived1 : Base {}
    public class Derived2 : Base {}
}

Displayed Test Explorer:
Rider:

Visual Studio:

I've tried setting the TypeName in TestMethodIdentifierProperty to more of a display name. That sort of works, but doesn't give you the same level of organisation of being able to group by class WITHOUT params and then WITH.
E.g.:
> MyClass
    > MyClass(Tenant1)
        - Test1
        - Test2
        - etc...
    > MyClass(Tenant2)
        - Test1
        - Test2
        - etc...
    > MyClass(Tenant3)
        - Test1
        - Test2
        - etc...

Thinking about this further, it'd be good to allow the framework to have full control over how tests display in test explorers. I think the best way to allow this would be a property that if provided, takes precedence over anything else (and simply falls back to existing behaviour if not provided)
That property can simply take a collection of paths. If any except the final path (because that evaluates to a single runnable test so then can't be expanded) are duplicated, then they will combine together in the test explorer.
For example:
public class TestExplorerDisplayProperty : IProperty
{
    public TestExplorerDisplayProperty(params string[] paths)
    {
        // ...
    }
}

And then in my data driven test, I could do:
new TestExplorerDisplayProperty
(
  [
    Test.Namespace,
    Test.BasicClassName,
    Test.ClassNameWithArgument,
    Test.BasicMethodName,
    Test.MethodNameWithArgument
  ]
)

Which would cause
> MyNamespace
  > MyClass
    > MyClass(Type1)
      > Test1
          Test1(Value1)
          Test2(Value2)
    > MyClass(Type2)
      > Test1
          Test1(Value1)
          Test2(Value2)

And for non-data driven tests I can just pass in fewer, more basic paths:
new TestExplorerDisplayProperty
(
  [
    Test.Namespace,
    Test.BasicClassName,
    Test.BasicMethodName,
  ]
)

Which would cause
> MyNamespace
  > MyClass
      Test1

In the existing NUnit example above, there's also differences between how Rider and Visual Studio display these. I think it's better to give this control to the testing framework rather than the IDE itself. (I know the IDE can obviously implement this behaviour however they like, but if there's a mechanism for the framework to control the layout it'd make sense for them to use it I think.) So this would fix differences/discrepencies between using different IDEs.

Thanks @thomhurst! This is something @MarcoRossignoli and I are trying to push since the inception of the new platform. Sadly Test Explorer is owned by a different team with different vision and priorities.

Feel free to send them this ticket if it'll help persuade them!
Currently the test explorer makes assumptions about how to organise tests. Different frameworks may have different intentions so giving that control can give a better experience for the user.
Heck, you could then even possibly allow users to group by test category or something in the test explorer. It could make things really interesting!

Currently the test explorer makes assumptions about how to organise tests. Different frameworks may have different intentions so giving that control can give a better experience for the user.

Entirely! Current Test Explorer enforces the shape and structure of everything when it should offer a common set of features but give flexibility to frameworks. The 4 levels is a huge limitation to me and I would like to be able to express my tests as it's done in F# Expecto where each group level is a "simple string" which leaves the user possibility to group tests functionally. This would also simplify things like BDD (e.g. SpecFlow).

Thanks for replying @Evangelink ! Completely agree with you. Hoping @MarcoRossignoli can throw some weight here too and maybe make this a possibility.
At work we have a multi-tenanted solution, and being able to run tests specifically for an injected class type (the tenant) would be a need for us. Much so that it went couldn't do it in the new world we'd just stick to existing VSTest NUnit. Hopefully that means something that there is a want for it and if we want to improve testing and give a framework that supports everything we need, the test explorer is part of that!

Definitely not a requirement but for us to be approved to work on something that doesn't benefit to our products is another story :)

Don't suppose there was any discussions with the test explorer team since the last comment? cc. @MarcoRossignoli

There was some discussion but no move/change. We will be quite busy until the end of the month but I will bring back the discussion to the table after that.

We have the same issue, and the UX in test explorer should definitely be improved.

Just to provide more scenarios/context:
Namespace > Class > Inner Class > Inner Inner Class > Test
Maybe not the most conventional but a clear example of a use case that can be very real, but also unsupported by the current limitations of the text explorer.
I honestly think it would be super simple to introduce a property called something like TestExplorerSectionsProperty and that can include every expandable group, and then the final node in the tree will be the TestNode display name.
Example:
new TestNode
{
    DisplayName = "MyTest",
    Properties =
    [
        new TestExplorerSectionsProperty
        (
        [
            "Namespace",
            "Class",
            "Inner Class",
            "Inner Inner Class",
        ]
        ),
    ]
}

I know it would need to be implemented by all the relevant IDEs, but the hardest part is surely implementing the UI and structure etc? Determining the hierarchy just sounds like dictionaries that can also contain dictionaries.
For example, if I had:
public class MyTests : TestBase
{
    [Test]
    public void Test()
    {
        ...
    }

    public class InnerClass2
    {
        [Test]
        public void Test()
        {
            ....
        }
    }

        public class InnerClass3
        {
            [Test]
            public void Test()
            {
                ....
            }
        }
}

This could make sense to a user to be able to organise sub-tests, or tests relating to a single feature, but with the limitations of the test explorer they wouldn't all be listed together.
Of course this still relies on the test framework to set the relevant properties, but at least I could look at the full class name and split them on the + character. And then imagine they were grouped by MyTests then InnerClass and then InnerClass2. That makes things so much cleaner/simpler for the user!
This is also just one example of how to structure them.
I could also expose an attribute to allow users to control their own structure. I think that allows a greater and more personalised testing experience based on user needs.
Currently we're assuming and enforcing one single way/structure of testing. That isn't the case. And different users and different frameworks might test in different ways, so that one structure doesn't make sense to not be changeable.