尽管 Scaffold 和 MaterialApp

问题描述

我在我的应用程序中使用 Riverpod 作为全局状态管理器;在这种情况下,我使用它来处理应用程序的启动:如果设备上有配置文件,它将根据用户的角色直接转到一个屏幕,如果没有这样的配置文件,它会将我们发送到登录屏幕。

给定一个持久用户,我得到了下一个错误

enter image description here

======== Exception caught by widgets library =======================================================
The following assertion was thrown building Tooltip("Open navigation menu",dirty,state: _TooltipState#4e2ac(ticker inactive)):
No Overlay widget found.

Tooltip widgets require an Overlay widget ancestor for correct operation.

The most common way to add an Overlay to an application is to include a MaterialApp or Navigator widget in the runApp() call.

The specific widget that Failed to find an overlay was: Tooltip
  "Open navigation menu"
The relevant error-causing widget was: 
  AppBar file:///home/luisalaguna/Projects/thesis_cancer/lib/core/presentation/widgets/header.dart:17:12
When the exception was thrown,this was the stack: 
#0      Overlay.of.<anonymous closure> (package:Flutter/src/widgets/overlay.dart:306:9)
#1      Overlay.of (package:Flutter/src/widgets/overlay.dart:309:6)
#2      _TooltipState.build (package:Flutter/src/material/tooltip.dart:457:20)
#3      StatefulElement.build (package:Flutter/src/widgets/framework.dart:4612:27)
#4      ComponentElement.performRebuild (package:Flutter/src/widgets/framework.dart:4495:15)

Header 是一个 AppBar 小部件;如果所有小部件都没有被 ScaffoldMaterialApp 小部件包裹,这个错误就不会奇怪了:

enter image description here

文件上的代码this

class CancerApp extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final _appRouter = AppRouter();
    final bool darkTheme = useProvider(darkThemeProvider);
    final launcherState = useProvider(launcherProvider);

    SystemChrome.setEnabledsystemUIOverlays([systemUIOverlay.bottom]);

    return MaterialApp.router(
      title: 'Thesis Cancer',theme: darkTheme ? ThemeData.dark() : ThemeData.light(),routerDelegate: _appRouter.delegate(),routeinformationParser: _appRouter.defaultRouteParser(),// home: SplashScreen()
      builder: (context,router) => launcherState.when(
          loading: () => SplashScreen(),needsProfile: () => LoginPage(),profileLoaded: () => MainScreen()),);
  }
}

关于启动器通知程序,您可以看到它here

在对这个工作流程进行 rafactoring 之后,我遇到了这个错误,当 profileLoaded 状态返回用户时我没有得到它(我遇到了另一个问题)。

可能是什么问题?

解决方法

在您的主题上添加 applyElevationOverlayColor: true,