【发布时间】:2020-07-20 18:40:05
【问题描述】:
应用程序在flutter run 下正常运行
使用flutter drive --target=test_driver/main.dart,对dependOnInheritedWidgetOfExactType 的调用返回null
一些相关代码:
class TimerServiceProvider extends InheritedWidget {
const TimerServiceProvider({Key key, this.service, Widget child})
: super(key: key, child: child);
final TimerService service;
@override
bool updateShouldNotify(TimerServiceProvider old) => service != old.service;
}
在 MyApp 中,小部件树以 TimerServiceProvider 开头
final timerService = TimerService();
@override
Widget build(BuildContext context) {
return TimerServiceProvider(
// provide timer service to all widgets of your app
service: timerService,
...
在其中一个页面上
timerService = TimerService.of(context);
在函数TimerService.of 中,dependOnInheritedWidgetOfExactType 返回null。这在正常的应用程序执行期间工作正常,如果从 flutter driver 运行则返回 null。
static TimerService of(BuildContext context) {
var provider =
context.dependOnInheritedWidgetOfExactType<TimerServiceProvider>();
return provider.service;
}
颤抖的医生
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.17.5, on Mac OS X 10.15.5 19F101, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.1)
[✓] Xcode - develop for iOS and macOS (Xcode 11.6)
[✓] Android Studio (version 3.5)
[✓] VS Code (version 1.47.2)
[✓] Connected device (1 available)
• No issues found!
【问题讨论】:
-
这段代码没问题。您的问题可能出在其他地方,例如将
TimerServiceProvider放在Home中,但尝试以不同的路径访问它 -
TimerServiceProvider 位于小部件树的顶部。在主(主页)页面之后,使用 Navigator.push 访问所有其他页面
-
我会考虑打印你的小部件树和你的上下文,看看你的 TimerServiceProvider 是否是上下文的祖先。很可能是错误。
-
我试图理解为什么这会在普通的
flutter run中起作用,但在flutter driver中不起作用。 -
您的小部件树可能具有不同的结构。
标签: flutter flutter-test