【发布时间】:2018-04-17 16:46:44
【问题描述】:
我正在尝试使用类似于 Scaffold.of() 函数的 .of() 方法获取我的应用程序的顶级状态。这是(精简的)代码:
class IApp extends StatefulWidget {
@override
IAppState createState() => new IAppState();
static IAppState of(BuildContext context) =>
context.ancestorStateOfType(const TypeMatcher<IAppState>());
}
应用程序使用 runApp(new IApp) 启动
这个小部件创建一个主页:
@override
Widget build(BuildContext context) {
return new MaterialApp(
// ommitted: some localization and theming details
home: new HomePage(),
);
}
然后,我尝试从 HomePage(StatefulWidget 本身)访问 State:
@override
Widget build(BuildContext context) {
return new Scaffold(
// ommited: some Scaffold properties such as AppBar
// runtimeType not actual goal, but just for demonstration purposes
body: new Text(IApp.of(context).runtimeType.toString()),
);
}
奇怪的是,当我将 HomePage 的代码放在与 IApp 相同的文件 中时,代码仍然有效,但只是作为一个额外的类。但是,当我将 HomePage 放在单独的文件中(main.dart 和 homepage.dart 相互导入)时,IApp.of(context) 的返回值为 null。
这是什么原因造成的?我该如何解决?
【问题讨论】:
-
愚蠢的问题,这可能无关紧要,但是在导入文件时,您使用的是相对路径(“./homepage.dart”)还是绝对路径(“package:my_package/homepage.dart”) ?
-
我使用的是绝对路径,比如 package:my_package/etc/file.dart
-
我很久以前有过类似的错误,我不确定但使用相对路径解决了它,或者它是别的东西^^
-
这确实解决了它,非常感谢!我仍在等待“正确”的答复(至于是什么原因造成的,以及为什么相对进口会修复它),所以我还没有将问题标记为已回答。不过还是谢谢!