context.dependOnInheritedWidgetOfExactType<_ModelBindingScope>() 返回 null

Vin*_*ann 5 dart flutter

因此,我尝试从 flutter 示例“Shrine”中调整登录页面,但是,当按原样使用登录页面时,我收到一个奇怪的空值错误。

我没有丝毫暗示我在这里做错了什么,以及我应该改变什么。是的,我尝试用调试器查看它,但我仍然没有任何线索。

错误似乎发生的确切位置(我认为)在这里:

static GalleryOptions of(BuildContext context) {
  final scope =
      context.dependOnInheritedWidgetOfExactType<_ModelBindingScope>()!;
  return scope.modelBindingState.currentModel;
}
Run Code Online (Sandbox Code Playgroud)

对于那些感兴趣的人,代码位于我的 GitHub 上: https: //github.com/vguttmann/betterchips/tree/dev

那么,这是怎么回事?我如何解决它?最初为什么会发生这种情况?

yur*_*ish 3

从代码中可以清楚地看出,一些小部件正在尝试从其构建上下文中访问您尚未提供的 GalleryOptions。

查看原始图库应用程序 ( main.dart )的小部件树根,整个应用程序包装在具有一些预定义值的 ModelBinding 小部件中:

@override
  Widget build(BuildContext context) {
    return ModelBinding(
      initialModel: GalleryOptions(
        themeMode: ThemeMode.system,
        textScaleFactor: systemTextScaleFactorOption,
        customTextDirection: CustomTextDirection.localeBased,
        locale: null,
        timeDilation: timeDilation,
        platform: defaultTargetPlatform,
        isTestMode: isTestMode,
      ),
      child: Builder(
        builder: (context) {
Run Code Online (Sandbox Code Playgroud)

您复制的某些组件期望在其祖先行中的某个位置具有 ModelBinding 小部件。如果找不到,该函数将返回 null,并且由于它被标记为不可为 null(表达式后面有 bang 运算符),因此它会立即引发运行时错误。

如果您是 flutter 新手,我建议您只需复制他们所做的事情并使用 ModelBinding 小部件包装整个应用程序 (MaterialApp)。