Hello @Behache , j’espère que tu vas bien !
Il semblerait que les dernières version de Flutter ai mis un coup dans l’aile de la méthode qui marchait bien jusqu’à présent …
Quand je mets une NavigationBar dans le bottomnavigationbar du Scafold voilà ce que j’obtiens comme erreur. Dans le body je laisse le Navigator comme proposait.
En faisant quelques recherches je suis tombé sur cet article mais j’ai du mal à voir quelle est la démarche à suivre pour corriger ca :
opened 12:45PM - 14 May 24 UTC
closed 05:11PM - 13 Jun 24 UTC
c: regression
framework
a: error message
has reproducible steps
r: solved
team-framework
found in release: 3.22
found in release: 3.23
### Steps to reproduce
When hovering over a tooltip, i get the following assert… ion:
```
flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following assertion was thrown building Tooltip("Close", dirty, dependencies: [_InheritedTheme,
flutter: _LocalizationsScope-[GlobalKey#e4586]], state: TooltipState#85ae0):
flutter: No Overlay widget found.
flutter: Tooltip widgets require an Overlay widget ancestor within the closest LookupBoundary.
flutter: An overlay lets widgets float on top of other widget children.
flutter: To introduce an Overlay widget, you can either directly include one, or use a widget that contains
flutter: an Overlay itself, such as a Navigator, WidgetApp, MaterialApp, or CupertinoApp.
flutter: The specific widget that could not find a Overlay ancestor was:
flutter: Tooltip
flutter: The ancestors of this widget were:
flutter: ...
flutter: Semantics
flutter: Align
flutter: Padding
flutter: IconTheme
flutter: Builder
flutter: ...
flutter:
flutter: The relevant error-causing widget was:
flutter: Scaffold
```
Currently the tree looks like this:

This indicates that there are currently 2 Material widgets present that could provide a Overlay.
The error is triggered at the following level:

I can't find any reason why this assertion pops up.
This issue started after i upgraded to flutter 3.22 (latest) from 3.19.x
### Expected results
No error like flutter 3.19.x
### Actual results
I get an error when trying to click/hover over a button that has a toolTip in it.
### Code sample
/
### Screenshots or Video

### Logs
<details open><summary>Logs</summary>
```console
flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following assertion was thrown building Tooltip("Close", dirty, dependencies: [_InheritedTheme,
flutter: _LocalizationsScope-[GlobalKey#e4586]], state: TooltipState#a606f):
flutter: No Overlay widget found.
flutter: Tooltip widgets require an Overlay widget ancestor within the closest LookupBoundary.
flutter: An overlay lets widgets float on top of other widget children.
flutter: To introduce an Overlay widget, you can either directly include one, or use a widget that contains
flutter: an Overlay itself, such as a Navigator, WidgetApp, MaterialApp, or CupertinoApp.
flutter: The specific widget that could not find a Overlay ancestor was:
flutter: Tooltip
flutter: The ancestors of this widget were:
flutter: ...
flutter: Semantics
flutter: Align
flutter: Padding
flutter: IconTheme
flutter: Builder
flutter: ...
flutter:
flutter: The relevant error-causing widget was:
flutter: Scaffold
flutter:
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0 debugCheckHasOverlay.<anonymous closure>
flutter: #1 debugCheckHasOverlay
flutter: #2 TooltipState.build
flutter: #3 StatefulElement.build
flutter: #4 ComponentElement.performRebuild
flutter: #5 StatefulElement.performRebuild
flutter: #6 Element.rebuild
flutter: #7 ComponentElement._firstBuild
flutter: #8 StatefulElement._firstBuild
flutter: #9 ComponentElement.mount
flutter: ... Normal element mounting (193 frames)
flutter: #202 Element.inflateWidget
flutter: #203 MultiChildRenderObjectElement.inflateWidget
flutter: #204 MultiChildRenderObjectElement.mount
flutter: #205 Element.inflateWidget
flutter: #206 MultiChildRenderObjectElement.inflateWidget
flutter: #207 MultiChildRenderObjectElement.mount
flutter: ... Normal element mounting (234 frames)
flutter: #441 Element.inflateWidget
flutter: #442 MultiChildRenderObjectElement.inflateWidget
flutter: #443 Element.updateChild
flutter: #444 Element.updateChildren
flutter: #445 MultiChildRenderObjectElement.update
flutter: #446 Element.updateChild
flutter: #447 ComponentElement.performRebuild
flutter: #448 Element.rebuild
flutter: #449 ProxyElement.update
flutter: #450 Element.updateChild
flutter: #451 ComponentElement.performRebuild
flutter: #452 StatefulElement.performRebuild
flutter: #453 Element.rebuild
flutter: #454 StatefulElement.update
flutter: #455 Element.updateChild
flutter: #456 ComponentElement.performRebuild
flutter: #457 StatefulElement.performRebuild
flutter: #458 Element.rebuild
flutter: #459 StatefulElement.update
flutter: #460 Element.updateChild
flutter: #461 ComponentElement.performRebuild
flutter: #462 Element.rebuild
flutter: #463 ProxyElement.update
flutter: #464 Element.updateChild
flutter: #465 ComponentElement.performRebuild
flutter: #466 StatefulElement.performRebuild
flutter: #467 Element.rebuild
flutter: #468 StatefulElement.update
flutter: #469 Element.updateChild
flutter: #470 SingleChildRenderObjectElement.update
flutter: #471 Element.updateChild
flutter: #472 ComponentElement.performRebuild
flutter: #473 Element.rebuild
flutter: #474 ProxyElement.update
flutter: #475 Element.updateChild
flutter: #476 SingleChildRenderObjectElement.update
flutter: #477 Element.updateChild
flutter: #478 ComponentElement.performRebuild
flutter: #479 StatefulElement.performRebuild
flutter: #480 Element.rebuild
flutter: #481 StatefulElement.update
flutter: #482 Element.updateChild
flutter: #483 ComponentElement.performRebuild
flutter: #484 StatefulElement.performRebuild
flutter: #485 Element.rebuild
flutter: #486 StatefulElement.update
flutter: #487 Element.updateChild
flutter: #488 ComponentElement.performRebuild
flutter: #489 Element.rebuild
flutter: #490 ProxyElement.update
flutter: #491 Element.updateChild
flutter: #492 ComponentElement.performRebuild
flutter: #493 Element.rebuild
flutter: #494 ProxyElement.update
flutter: #495 Element.updateChild
flutter: #496 ComponentElement.performRebuild
flutter: #497 Element.rebuild
flutter: #498 ProxyElement.update
flutter: #499 Element.updateChild
flutter: #500 ComponentElement.performRebuild
flutter: #501 StatefulElement.performRebuild
flutter: #502 Element.rebuild
flutter: #503 StatefulElement.update
flutter: #504 Element.updateChild
flutter: #505 ComponentElement.performRebuild
flutter: #506 Element.rebuild
flutter: #507 ProxyElement.update
flutter: #508 Element.updateChild
flutter: #509 ComponentElement.performRebuild
flutter: #510 StatefulElement.performRebuild
flutter: #511 Element.rebuild
flutter: #512 BuildOwner.buildScope
flutter: #513 WidgetsBinding.drawFrame
flutter: #514 RendererBinding._handlePersistentFrameCallback
flutter: #515 SchedulerBinding._invokeFrameCallback
flutter: #516 SchedulerBinding.handleDrawFrame
flutter: #517 SchedulerBinding._handleDrawFrame
flutter: #521 _invoke (dart:ui/hooks.dart:314:10)
flutter: #522 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5)
flutter: #523 _drawFrame (dart:ui/hooks.dart:283:31)
flutter: (elided 3 frames from dart:async)
flutter:
flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
```
</details>
### Flutter Doctor output
<details open><summary>Doctor output</summary>
```console
[√] Flutter (Channel stable, 3.22.0, on Microsoft Windows [Version 10.0.19045.4291], locale nl-BE)
• Flutter version 3.22.0 on channel stable at C:\Users\xxx\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 5dcb86f68f (5 days ago), 2024-05-09 07:39:20 -0500
• Engine revision f6344b75dc
• Dart version 3.4.0
• DevTools version 2.34.3
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.2)
• Android SDK at C:\Users\xxx\AppData\Local\Android\sdk
• Platform android-34, build-tools 33.0.2
• Java binary at: C:\Users\xxx\AppData\Local\Programs\Android Studio\jbr\bin\java
• Java version OpenJDK Runtime Environment (build 17.0.7+0-b2043.56-10550314)
• All Android licenses accepted.
[√] Chrome - develop for the web
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.9.5)
• Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
• Visual Studio Community 2022 version 17.9.34723.18
• Windows 10 SDK version 10.0.22000.0
[√] Android Studio (version 2022.1)
• Android Studio at C:\Program Files\Android\Android Studio
• 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 17.0.7+0-b2043.56-10550314)
[√] Android Studio (version 2023.1)
• Android Studio at C:\Users\spe\AppData\Local\Programs\Android Studio
• 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 17.0.7+0-b2043.56-10550314)
[√] VS Code, 64-bit edition (version 1.89.1)
• VS Code at C:\Program Files\Microsoft VS Code
• Flutter extension version 3.89.20240501
[√] Connected device (3 available)
• SM T575 (mobile) • R52W30B3CKY • android-arm64 • Android 13 (API 33)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.19045.4291]
• Chrome (web) • chrome • web-javascript • Google Chrome 124.0.6367.158
[√] Network resources
• All expected network resources are available.
• No issues found!
```
</details>
« This is working as intended because you’re not including an Overlay widget in the tree and the close button of the snackbar (showCloseIcon: true
) requires an Overlay to be present so it can show itself if necessary.
By default, MaterialApp introduces a Navigator, which includes an Overlay. However, MaterialApp.builder
is a hook to wrap the Navigator (provided as child
to MaterialApp.builder
) with other widgets and therefore the context
passed to MaterialApp.builder
does not include an Overlay. If you want to use this context
for anything that needs an Overlay (like showing a snackbar with a close button that has a tooltip) you’ll have to introduce the Overlay yourself (or use a context
that is a descendant of the Navigator
introduced by MaterialApp).
This didn’t crash in 3.19.5 because the tooltip for the close button of the snack bar was only introduced in #143934 as an accessibility fix. Not having the tooltip was a bug that made the snackbar less accessible. »
Pas exactement le même problème mais j’ai l’impression que ca s’en rapproche. As tu rencontré ce problème quand tu as fait une maj de ton app qui utilisais la méthode que tu proposais ?