Flutter MaterialApp生成器错误:未找到覆盖小部件
我在构建navigationDrawer时出错,tootlip小部件需要materialApp作为祖先 错误是这样说的:Flutter MaterialApp生成器错误:未找到覆盖小部件,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我在构建navigationDrawer时出错,tootlip小部件需要materialApp作为祖先 错误是这样说的: I/flutter ( 5780): _TooltipState#bc79e(ticker inactive)): I/flutter ( 5780): No Overlay widget found. I/flutter ( 5780): Tooltip widgets require an Overlay widget ancestor for correct opera
I/flutter ( 5780): _TooltipState#bc79e(ticker inactive)):
I/flutter ( 5780): No Overlay widget found.
I/flutter ( 5780): Tooltip widgets require an Overlay widget ancestor for correct operation.
I/flutter ( 5780): The most common way to add an Overlay to an application is to include a MaterialApp or Navigator
I/flutter ( 5780): widget in the runApp() call.
I/flutter ( 5780): The specific widget that failed to find an overlay was:
I/flutter ( 5780): Tooltip
I/flutter ( 5780):
I/flutter ( 5780): The relevant error-causing widget was:
I/flutter ( 5780): AppBar
我的main.dart代码
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
... //basic info title & theme
builder: (context, child) => LayoutTemplate(child: child),
initialRoute:"/home",
... //Routing stuff like generate route & navigator key
);
}
}
布局模板小部件
class LayoutTemplate extends StatelessWidget {
final Widget child;
const LayoutTemplate({Key key, this.child}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("home"))
drawer: NavDrawer()
body: Column(
children: <Widget>[
//NavigationBar(),
Expanded(
child: child,
)
],
),
);
}
}
class LayoutTemplate扩展了无状态小部件{
最后一个孩子;
const LayoutTemplate({Key-Key,this.child}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“主页”))
出票人:NavDrawer()
正文:专栏(
儿童:[
//导航栏(),
扩大(
孩子:孩子,
)
],
),
);
}
}
很抱歉添加了太多代码。我不确定是什么导致了这个问题。可能是MaterialApp
中的builder
导致了它
谢谢您的帮助。我通过使用home而不是builder参数解决了这个问题
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
... //basic info title & theme
home: LayoutTemplate(child: child),
initialRoute:"/home",
... //Routing stuff like generate route & navigator key
);
}
}
相反,在每个路线中使用
LayoutTemplate
小部件:
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
//…基本信息标题和主题
初始路由:“/home”,
路线:[
“/home”:(上下文)=>LayoutTemplate(子级:Text('home')),
//等其他路线
],
);
}
}
builder参数最适合用于“在
导航器
上方插入[widgets],或者-当使用WidgetsApp.router
构造函数时-在路由器
上方但在WidgetsApp
小部件创建的其他小部件下方插入[widgets],或者完全替换导航器
/路由器
。”(文件)
例如,从传递给此方法的BuildContext
中,方向性
,本地化
,DefaultTextStyle
,MediaQuery
,等等都是可用的。它们也可以以影响导航器或路由器中所有路由的方式被覆盖
(文件)始终发布一个最小的可复制代码,我们可以在本地运行,我们如何知道您的
sl
,NavigationService
,sizingInformation
,Routes.clientList
,等等。几乎每一行代码都使用项目中定义的字段,您没有共享。您差不多6岁了,所以st是一个最小的可复制代码,其他人可以运行。我已尝试删除不必要的代码。请检查更新的问题谢谢,您还可以修改initialRoute
、onGenerateRoute
和NavigatorWorkey
?我遇到了一个与文本字段而不是工具提示非常类似的问题。您找到了解决方案吗?我想我们遵循相同的教程!使用生成器(…)是构建页面的有效方法,如果要将AppBar添加到在该生成器中创建的脚手架中,则不会失败。