【问题标题】:Flutter Null-Safety Question: mismatch type issueFlutter Null-Safety 问题:不匹配类型问题
【发布时间】:2021-06-05 14:48:14
【问题描述】:

这是我的函数 typedef:

typedef Widget ItemBuilder<T>(T item);

这是我的班级财产:

final ItemBuilder<T>? itemBuilder;

这就是我将它传递给我的对象的方式:

itemBuilder: (Color color) => Container(height: 100.0, color: color)

这是我得到的错误:

type '(Color) => Container' is not a subtype of type '((Color?) => Widget)?'

你能帮我解决这个问题吗?

【问题讨论】:

    标签: flutter dart dart-null-safety


    【解决方案1】:

    这里的类型错误是itemBuilder 属性的类型为ItemBuilder&lt;Color?&gt;?,而您正在传递ItemBuilder&lt;Color&gt;? 的实例。

    区别是微妙的,但是,您期望一个非空的Color,而参数期望一个回调,期望一个可能为空的Color?


    有两种方法可以解决此问题。

    期望不可为空的参数

    如果这是可能的和有意的,你应该将你的泛型类型参数T 调整为Color 而不是Color?,这样你最终会得到:

    final ItemBuilder<Color>? itemBuilder;
    

    使用可空参数传递回调

    或者,您可以相应地调整您传递的回调:

    itemBuilder: (Color? color) => Container(height: 100.0, color: color)
    

    【讨论】:

    • 我正在尝试将我的包迁移到空安全,并且我使用了迁移工具。 (如果您需要更多上下文,这里是包:github.com/figengungor/easy_dialogs/blob/master/lib/…)第一个选项是不可能的,因为它应该是 T。我不太明白这是如何解释的:final ItemBuilder?项目生成器; ------------ ItemBuilder?
    • @FigenGüngör 因为TColor?。您需要确保TColor
    • 关键部分是 T 设置为 Color? 从代码中使用你的SingleChoiceConfirmationDialog 类(你还没有向我们展示@ 987654339@正在被实例化)。它可能是从initialValueitems 推断出来的。
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2010-10-07
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多