Skip to content

Scrolling closes menuAnchor widget #122168

Closed

Description

@whiskeyPeak
Screencast.from.2023-03-08.04-54-02.webm

Happens on both stable and master

flutter doctor:

[!] Flutter (Channel master, 3.9.0-1.0.pre.92, on Fedora Linux 37 (Workstation Edition) 6.1.11-200.fc37.x86_64, locale en_GB.UTF-8)
    • Flutter version 3.9.0-1.0.pre.92 on channel master at /home/henryr/Dev/Github/Flutter/flutter
    ! Upstream repository https://github.com/whiskeyPeak/flutter.git is not a standard remote.
      Set environment variable "FLUTTER_GIT_URL" to https://github.com/whiskeyPeak/flutter.git to dismiss this error.
    • Framework revision 5a279edc23 (3 hours ago), 2023-03-07 21:24:23 -0500
    • Engine revision 694a14ca6e
    • Dart version 3.0.0 (build 3.0.0-308.0.dev)
    • DevTools version 2.22.2
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks
      and upgrades.

[!] Android toolchain - develop for Android devices (Android SDK version 33.0.2)
    • Android SDK at /home/henryr/Android/Sdk
    • Platform android-33-ext4, build-tools 33.0.2
    • Java binary at: /home/henryr/Dev/SDK/Android Studio/android-studio/jbr/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses

[✓] Chrome - develop for the web
    • Chrome at google-chrome

[✓] Linux toolchain - develop for Linux desktop
    • clang version 15.0.7 (Fedora 15.0.7-1.fc37)
    • cmake version 3.25.2
    • ninja version 1.10.2
    • pkg-config version 1.8.0

[✓] Android Studio (version 2022.1)
    • Android Studio at /home/henryr/Dev/SDK/Android Studio/android-studio
    • Flutter plugin version 72.0.2
    • Dart plugin version 221.6096
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] Connected device (2 available)
    • Linux (desktop) • linux  • linux-x64      • Fedora Linux 37 (Workstation Edition) 6.1.11-200.fc37.x86_64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 110.0.5481.100

[✓] Network resources
    • All expected network resources are available.


Repro code:

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
          //colorScheme: const ColorScheme.dark(),
          ),
      home: const Directionality(
          textDirection: TextDirection.ltr,
          child: MyHomePage(title: 'Flutter Demo Home Page')),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(MediaQuery.of(context).size.height.toString()),
        centerTitle: true,
      ),
      body: const Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          Column(
            children: [
              ButtonAnchorExample(),
              Expanded(child: SizedBox()),
            ],
          ),
          Column(
            children: [
              Expanded(child: SizedBox()),
              ButtonAnchorExample(),
            ],
          ),
        ],
      ),
    );
  }
}

class ButtonAnchorExample extends StatelessWidget {
  const ButtonAnchorExample({super.key});

  @override
  Widget build(BuildContext context) {
    return MenuAnchor(
      style: const MenuStyle(
        //maximumSize: MaterialStateProperty.all(const Size(500, 200)),
        visualDensity: VisualDensity.compact,
        //alignment: AlignmentDirectional.topEnd
      ),
      // This offset is not correct when menu direction is reversed
      alignmentOffset: const Offset(0, 10),
      builder: (context, controller, child) {
        return FilledButton.tonal(
          onPressed: () {
            if (controller.isOpen) {
              controller.close();
            } else {
              controller.open();
            }
          },
          child: const Text('Show menu'),
        );
      },
      menuChildren: [
        MenuItemButton(
          leadingIcon: const Icon(Icons.people_alt_outlined),
          child: const Text('Item 1'),
          onPressed: () {},
        ),
        MenuItemButton(
          leadingIcon: const Icon(Icons.remove_red_eye_outlined),
          child: const Text('Item 2'),
          onPressed: () {},
        ),
        MenuItemButton(
          leadingIcon: const Icon(Icons.refresh),
          onPressed: () {},
          child: const Text('Item 3'),
        ),
        SubmenuButton(
          trailingIcon: const Icon(Icons.add),
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                SubmenuButton(
                  menuStyle: const MenuStyle(
                    visualDensity: VisualDensity.compact,
                  ),
                  alignmentOffset: const Offset(8, 0),
                  menuChildren: [
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.people_alt_outlined),
                      child: const Text('Item 1'),
                      onPressed: () {},
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                      child: const Text('Item 2'),
                      onPressed: () {},
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.refresh),
                      onPressed: () {},
                      child: const Text('Item 3'),
                    ),
                  ],
                  child: const Text("SubMenuButton"),
                ),
                SubmenuButton(
                  menuStyle: const MenuStyle(
                    visualDensity: VisualDensity.compact,
                  ),
                  alignmentOffset: const Offset(8, 0),
                  menuChildren: [
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.people_alt_outlined),
                      child: const Text('Item 1'),
                      onPressed: () {},
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                      child: const Text('Item 2'),
                      onPressed: () {},
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.refresh),
                      onPressed: () {},
                      child: const Text('Item 3'),
                    ),
                  ],
                  child: const Text("SubMenuButton"),
                ),
                SubmenuButton(
                  menuStyle: const MenuStyle(
                    visualDensity: VisualDensity.compact,
                  ),
                  alignmentOffset: const Offset(8, 0),
                  menuChildren: [
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.people_alt_outlined),
                      child: const Text('Item 1'),
                      onPressed: () {},
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                      child: const Text('Item 2'),
                      onPressed: () {},
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.refresh),
                      onPressed: () {},
                      child: const Text('Item 3'),
                    ),
                  ],
                  child: const Text("SubMenuButton"),
                ),
                SubmenuButton(
                  menuStyle: const MenuStyle(
                    visualDensity: VisualDensity.compact,
                  ),
                  alignmentOffset: const Offset(8, 0),
                  menuChildren: [
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.people_alt_outlined),
                      child: const Text('Item 1'),
                      onPressed: () {},
                    ),
                    SubmenuButton(
                      menuStyle: const MenuStyle(
                        visualDensity: VisualDensity.compact,
                      ),
                      alignmentOffset: const Offset(8, 0),
                      menuChildren: [
                        MenuItemButton(
                          leadingIcon: const Icon(Icons.people_alt_outlined),
                          child: const Text('Item 1'),
                          onPressed: () {},
                        ),
                        MenuItemButton(
                          leadingIcon:
                              const Icon(Icons.remove_red_eye_outlined),
                          child: const Text('Item 2'),
                          onPressed: () {},
                        ),
                        MenuItemButton(
                          leadingIcon: const Icon(Icons.refresh),
                          onPressed: () {},
                          child: const Text('Item 3'),
                        ),
                      ],
                      child: const Text("SubMenuButton"),
                    ),
                    SubmenuButton(
                      menuStyle: const MenuStyle(
                        visualDensity: VisualDensity.compact,
                      ),
                      alignmentOffset: const Offset(8, 0),
                      menuChildren: [
                        MenuItemButton(
                          leadingIcon: const Icon(Icons.people_alt_outlined),
                          child: const Text('Item 1'),
                          onPressed: () {},
                        ),
                        MenuItemButton(
                          leadingIcon:
                              const Icon(Icons.remove_red_eye_outlined),
                          child: const Text('Item 2'),
                          onPressed: () {},
                        ),
                        MenuItemButton(
                          leadingIcon: const Icon(Icons.refresh),
                          onPressed: () {},
                          child: const Text('Item 3'),
                        ),
                      ],
                      child: const Text("SubMenuButton"),
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                      child: const Text('Item 2'),
                      onPressed: () {},
                    ),
                    MenuItemButton(
                      leadingIcon: const Icon(Icons.refresh),
                      onPressed: () {},
                      child: const Text('Item 3'),
                    ),
                  ],
                  child: const Text("SubMenuButton"),
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
            SubmenuButton(
              menuStyle: const MenuStyle(
                visualDensity: VisualDensity.compact,
              ),
              alignmentOffset: const Offset(8, 0),
              menuChildren: [
                MenuItemButton(
                  leadingIcon: const Icon(Icons.people_alt_outlined),
                  child: const Text('Item 1'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.remove_red_eye_outlined),
                  child: const Text('Item 2'),
                  onPressed: () {},
                ),
                MenuItemButton(
                  leadingIcon: const Icon(Icons.refresh),
                  onPressed: () {},
                  child: const Text('Item 3'),
                ),
              ],
              child: const Text("SubMenuButton"),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
        SubmenuButton(
          menuStyle: const MenuStyle(
            visualDensity: VisualDensity.compact,
          ),
          alignmentOffset: const Offset(8, 0),
          menuChildren: [
            MenuItemButton(
              leadingIcon: const Icon(Icons.people_alt_outlined),
              child: const Text('Item 1'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.remove_red_eye_outlined),
              child: const Text('Item 2'),
              onPressed: () {},
            ),
            MenuItemButton(
              leadingIcon: const Icon(Icons.refresh),
              onPressed: () {},
              child: const Text('Item 3'),
            ),
          ],
          child: const Text("SubMenuButton"),
        ),
      ],
    );
  }
}


Activity

  1. whiskeyPeak commented on Mar 8, 2023

    @whiskeyPeak
    ContributorAuthor

    In menu_anchor.dart line 465

    void _handleScroll() {
        // If an ancestor scrolls, and we're a top level or root anchor, then close
        // the menus. Don't just close it on *any* scroll, since we want to be able
        // to scroll menus themselves if they're too big for the view.
        if (_isTopLevel || _isRoot) {
          _root._close();
        }
      }
    

    @gspencergoog Could you explain to me what the use of this functions is? As things are right now, any kind of scrolling on the topLevel menu will automatically close it which is a little jarring and may seem like a bug to users.

    Completely removing this function makes the UI behave the exact same way as if we only closed the menus after having checked for _isRoot being true. IMO this can probably be removed since it introduces a "bug" and doesn't really change the behaviour of the UI.

    wdyt?

  2. changed the title [-]Scrolling with touchpad closes menuAnchor widget[/-] [+]Scrolling closes menuAnchor widget[/+] on Mar 8, 2023
  3. danagbemava-nc commented on Mar 8, 2023

    @danagbemava-nc
    Member

    The issue is reproducible using the code sample provided above.

    Steps to reproduce

    • Run the code sample provided above on desktop
    • Resize the window so that the menu items when opened can be scrolled
    • Click either of the show menu buttons
    • Attempt to scroll on the top-level menu using the trackpad/touchpad
    • Observe that the menu is closed

    This issue is not limited to desktop platforms only. The bug also reproduces when you make the mobile screen small enough and attempt to scroll. On android, you can achieve this by using the split screen feature.

    recording on android
    telegram-cloud-document-4-5782736726019543174.mp4
    flutter doctor -v
    [✓] Flutter (Channel stable, 3.7.6, on macOS 13.2.1 22D68 darwin-arm64, locale en-GB)
        • Flutter version 3.7.6 on channel stable at /Users/nexus/dev/sdks/flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision 12cb4eb7a0 (7 days ago), 2023-03-01 10:29:26 -0800
        • Engine revision ada363ee93
        • Dart version 2.19.3
        • DevTools version 2.20.1
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
        • Android SDK at /Users/nexus/Library/Android/sdk
        • Platform android-33, build-tools 33.0.0
        • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9477386/Android Studio.app/Contents/jbr/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 14.2)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Build 14C18
        • CocoaPods version 1.11.3
    
    [✓] Chrome - develop for the web
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Android Studio (version 2022.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 11.0.15+0-b2043.56-8887301)
    
    [✓] Android Studio (version 2022.1)
        • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9477386/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.15+0-b2043.56-8887301)
    
    [✓] IntelliJ IDEA Community Edition (version 2022.3.2)
        • IntelliJ at /Applications/IntelliJ IDEA CE.app
        • Flutter plugin version 72.1.4
        • Dart plugin version 223.8617.8
    
    [✓] VS Code (version 1.76.0)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.60.0
    
    [✓] Connected device (3 available)
        • Nexus (mobile)  • 00008020-001875E83A38002E • ios            • iOS 16.3.1 20D67
        • macOS (desktop) • macos                     • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm64
        • Chrome (web)    • chrome                    • web-javascript • Google Chrome 111.0.5563.64
        ! Error: Nexus is busy: Fetching debug symbols for Nexus. Xcode will continue when Nexus is finished. (code -10)
    
    [✓] HTTP Host Availability
        • All required HTTP hosts are available
    
    • No issues found!
    
    [!] Flutter (Channel master, 3.9.0-1.0.pre.92, on macOS 13.2.1 22D68 darwin-arm64, locale en-GB)
        • Flutter version 3.9.0-1.0.pre.92 on channel master at /Users/nexus/dev/sdks/flutters
        ! Warning: `flutter` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
        ! Warning: `dart` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision 5a279edc23 (6 hours ago), 2023-03-07 21:24:23 -0500
        • Engine revision 694a14ca6e
        • Dart version 3.0.0 (build 3.0.0-308.0.dev)
        • DevTools version 2.22.2
        • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.
    
    [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
        • Android SDK at /Users/nexus/Library/Android/sdk
        • Platform android-33, build-tools 33.0.0
        • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9477386/Android Studio.app/Contents/jbr/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 14.2)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Build 14C18
        • CocoaPods version 1.11.3
    
    [✓] Chrome - develop for the web
        • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [✓] Android Studio (version 2022.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 11.0.15+0-b2043.56-8887301)
    
    [✓] Android Studio (version 2022.1)
        • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9477386/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.15+0-b2043.56-8887301)
    
    [✓] IntelliJ IDEA Community Edition (version 2022.3.2)
        • IntelliJ at /Applications/IntelliJ IDEA CE.app
        • Flutter plugin version 72.1.4
        • Dart plugin version 223.8617.8
    
    [✓] VS Code (version 1.76.0)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.60.0
    
    [✓] Connected device (2 available)
        • macOS (desktop) • macos  • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm64
        • Chrome (web)    • chrome • web-javascript • Google Chrome 111.0.5563.64
    
    [✓] Network resources
        • All expected network resources are available.
    
    ! Doctor found issues in 1 category.
    
    
  4. added
    frameworkflutter/packages/flutter repository. See also f: labels.
    p: material_uimaterial_ui package in flutter/packages
    f: scrollingViewports, list views, slivers, etc.
    has reproducible stepsThe issue has been confirmed reproducible and is ready to work on
    and removed
    in triagePresently being triaged by the triage team
    on Mar 8, 2023
  5. self-assigned this
    on Mar 15, 2023
  6. moved this from To do to In progress in Nevercodeon Mar 15, 2023
  7. bleroux commented on Mar 15, 2023

    @bleroux
    Contributor

    @whiskeyPeak Many thanks for the detailed report!
    I filed a PR, #122696. After investigation, I reached the same conclusion that you did: "As things are right now, any kind of scrolling on the topLevel menu will automatically close it " (from #122168 (comment))

  8. moved this from In progress to PR submitted in Nevercodeon Mar 15, 2023
  9. moved this from PR submitted to Done (PR merged) in Nevercodeon Mar 15, 2023
  10. added
    r: fixedIssue is closed as already fixed in a newer version
    on Mar 15, 2023
  11. github-actions commented on Mar 29, 2023

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  12. locked as resolved and limited conversation to collaborators on Mar 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

f: scrollingViewports, list views, slivers, etc.found in release: 3.7Found to occur in 3.7found in release: 3.9Found to occur in 3.9frameworkflutter/packages/flutter repository. See also f: labels.has reproducible stepsThe issue has been confirmed reproducible and is ready to work onp: material_uimaterial_ui package in flutter/packagesr: fixedIssue is closed as already fixed in a newer version

Type

No type

Projects

  • Status
    Done (PR merged)

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions