【问题标题】:Unable to initialize an Inherited widget in Flutter无法在 Flutter 中初始化 Inherited 小部件
【发布时间】:2020-10-04 02:52:58
【问题描述】:

我正在尝试使用 Inherited Widget 在所有屏幕上共享相同的服务。

这是我的继承小部件的代码

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(...),);
  }

但我想让它仅在小部件子树的某个部分可用,但不知道为什么它不起作用。

可能是由于屏幕之间的路由?还是其他什么原因?

谢谢

【问题讨论】:

    标签: flutter dart inherited-widget


    【解决方案1】:

    访问时更改您的代码,如下所示。你错过了给班级成员audioProvider打电话。

      @override
      Widget build(BuildContext context) {
        super.build(context);
        AudioProvider audioProvider = GlobalValues.of(context).audioProvider;
        Return Scaffold(...);
      }
    

    【讨论】:

    • 不,GlobalValues.of(context) 已经返回了该类的 audioprovider 成员。
    • 不,它会返回 GlobalValues 类型。您必须访问它的 audioprovider 成员。
    • 我什至无法访问 audioprovider 成员,而是可以访问类 audioprovider 的所有方法和成员,因为正如我定义的静态方法 of 一样,GlobalValues。 of(context) 已经是 audioprovider。
    • 现在可以用了吗?
    • 不,不幸的是,我处于同样的境地
    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多