参数 'pageController' 的值不能为 'null',因为它的类型,但隐含的默认值是 'null'

Posted

技术标签:

【中文标题】参数 \'pageController\' 的值不能为 \'null\',因为它的类型,但隐含的默认值是 \'null\'【英文标题】:The parameter 'pageController' can't have a value of 'null' because of its type, but the implicit default value is 'null'参数 'pageController' 的值不能为 'null',因为它的类型,但隐含的默认值是 'null' 【发布时间】:2021-11-12 15:43:33 【问题描述】:

我从 github 复制了这段代码,但出现错误:

BubbleIndicatorPainter(
  this.dxTarget = 125.0,
    this.dxEntry = 25.0,
    this.radius = 21.0,
    this.dy = 25.0,
    this.pageController)
  : super(repaint: pageController) 
painter = Paint()
  ..color = CustomTheme.white
  ..style = PaintingStyle.fill;

特别是,BubbleIndicatorPainter 获得:

必须初始化不可为空的实例字段“painter”。

并且 pageController 得到:

参数'pageController'因其类型不能有'null'的值,但隐含的默认值为'null'。

我认为它们是相关的,但我不知道如何解决,并且将 required 添加到 this.pageController 并没有解决问题。 感谢您的回答

【问题讨论】:

能把全班的代码加进去吗? 【参考方案1】:

没有看到您的其余代码 - 您是否向 BubbleIndicatorPainter() 传递了一个有效的 PageController() 对象?

您的来源似乎是from here?

如果您使用 null 安全性进行编译,则可以为 null 的变量将具有带有“?”的声明后缀。从上面的链接中,pageController 被定义为不可为空。

 final PageController pageController;

如果它可以为 null,则声明将是:

final PageController? pageController;

查看链接源中的 build(),pageController.position 的访问没有进行 null 检查,因此您不能有 null pageController。

错误中的“默认”是声明中的默认值,如果未提供,则“隐式”为空。例如:

class MyClass 
    Color color;
    MyClass(this.color = Colors.white);

“color”的“隐式默认值”是“Colors.white” - 如果您不向 MyClass() 提供一个值,则分配的值,即:

MyClass myclass = MyClass(color: Colors.blue); //myclass.color will be Colors.blue
MyClass myclass = MyClass() // myclass.color will be Colors.white

如果 MyClass 是:

class MyClass 
    Color? color;
    MyClass(this.color);

color 的隐式默认值将是“null”,因为没有提供默认值(这是允许的,因为它是用“?”后缀声明的)。即:

MyClass myclass = MyClass(color: Colors.blue); //myclass.color will be Colors.blue
MyClass myclass = MyClass() // myclass.color will be null

查看 BubbleIndicatorPainter() 它没有为 this.pageController 提供默认值,这意味着隐式默认值为“null”(这是不允许的,因为它在类型后没有“?”。 )

【讨论】:

不是这个特定的存储库,但这个类是相同的。我尝试做你列出的事情,但错误刚刚改变。我通过复制画家的初始化并将其粘贴到构造函数之外来解决。我不知道为什么它会起作用,但它确实起作用了

以上是关于参数 'pageController' 的值不能为 'null',因为它的类型,但隐含的默认值是 'null'的主要内容,如果未能解决你的问题,请参考以下文章

该参数的值不能为“null”,因为它在 Dart 中的类型

ScrollView with PageControl 的几个问题

UIPageViewController 中包含的 PageControl 引用到哪里?

启动时可关闭的 PageControl

前后台页面跳转及参数传递

在 ViewController 上的 CollectionViewCell 中使用 PageControl