【发布时间】:2018-09-03 22:54:54
【问题描述】:
我决定尝试一下flutter,偶然发现了以下问题:
在我的应用程序中,我希望在 AppBar 中有一个按钮,可以将用户带到另一个屏幕。但是,每当我尝试在任何 IconButtons 的 onPressed 处理程序中调用 Navigator 时,都会收到以下错误:
使用不包含导航器的上下文请求导航器操作。 用于从导航器推送或弹出路由的上下文必须是小部件的上下文,该小部件是 Navigator 小部件的后代。
这是我的 main.dart(减去导入):
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
var service = new ProjectService();
return new MaterialApp(
theme: new ThemeData(
primaryColor: Colors.deepOrange,
),
home: new Scaffold(
appBar: new AppBar(
title: new Text("My App Title"),
actions:
<Widget>[
new IconButton(
icon: new Icon(Icons.add),
onPressed: () =>
Navigator.of(context).pushNamed("/projects/add")) //<-- Here's where I get the exception
],
elevation: 0.0),
body: new Center(child: new ProjectList(projects: service.toList())), //<-- Exactly the same code runs fine here
drawer: new AppDrawer(),
),
routes: <String, WidgetBuilder>{
'/projects/add': (BuildContext context) => new ProjectAddScreen(),
'/projects/test': (BuildContext context) => new ProjectAddScreen(),
'/settings': (BuildContext context) => new AppSettingsScreen(),
'/about': (BuildContext context) => new AboutScreen()
});
}
}
这是构建应用实例的唯一地方,AppBar 是标准的AppBar,与flutter/material 包捆绑在一起。
我的flutter doctor 输出(如果有任何相关性)
[√] Flutter (Channel master, v0.2.5-pre.41, on Microsoft Windows [Version 10.0.16299.309], locale en-US)
[!] Android toolchain - develop for Android devices (Android SDK 26.0.2)
X Android license status unknown. // I use the SDK manager from Visual Studio
[!] Android Studio (version 3.0)
X Unable to determine bundled Java version. //I use the SDK manager from Visual Studio so I have no need in Android Studio
[√] VS Code, 64-bit edition (version 1.21.1)
[√] Connected devices (1 available)
【问题讨论】:
-
@rémi-rousselet,感谢您指出这一点。从概念上讲,我的问题确实似乎是该线程的副本,但是那里发布的代码有所不同。此外,我所见过的关于颤振的官方指南都没有显示通过
Builder实例化Scaffold或AppBar,所以我没有给予足够的关注。