我正在尝试使用继承的小部件在所有屏幕上共享相同的服务。
这是我的继承小部件的代码:
class GlobalValues extends InheritedWidget {
final AudioProvider audioProvider;
GlobalValues({Key key, Widget child, this.audioProvider}) : super(key: key, child: child);
static AudioProvider of(BuildContext context){
return (context.dependOnInheritedWidgetOfExactType<GlobalValues>()).audioProvider;
}
@override
bool updateShouldNotify(InheritedWidget oldWidget) {
return false;
}
}
因此,我在主屏幕中对其进行了初始化:
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
return GlobalValues(
audioProvider: AudioProvider(),
child: StreamBuilder<MapEntry<Position, List<MuseumCard>>>(...)
);
}
最后我想从后续屏幕访问它:
@override
Widget build(BuildContext context) {
super.build(context);
AudioProvider audioProvider = GlobalValues.of(context);
Return Scaffold(...);
}
但是当最后一个屏幕被构建时,我收到了这个错误消息:
在 null 上调用了 getter 'audioProvider'。接收方:null 尝试调用:audioProvider
我注意到,如果我在 main.dart 中初始化小部件,则错误不会出现并且一切正常:
@override
Widget build(BuildContext context) {
return GlobalValues(
audioProvider: AudioProvider(),
child: MaterialApp(...),);
}
但我想让它只在小部件子树的某个部分可用,但不知道为什么它不起作用。
可能是由于屏幕之间的路由吗?或者还有什么其他原因?
谢谢