【问题标题】:Why can't dynamically-typed function in Flutter return the correct type?为什么 Flutter 中的动态类型函数不能返回正确的类型?
【发布时间】:2020-03-04 08:23:24
【问题描述】:

我有这个功能:

U on<T, U> (T value, T defaultValue, U Function (T value) builder) => builder(value ?? defaultValue);

如果我这样使用它:

var a = "Hello";
var b = "World";
final result = on(a, b, (value) => Text(value))

在构建器回调参数中,值类型始终是动态的。为什么它不能和参数a和b有相同的类型?

【问题讨论】:

  • 需要澄清:为什么将“Hello”分配给整数类型变量?你应该改用 var a="Hellow";
  • @Darish 已修复。我一开始使用的是 int 示例,但后来中途切换到 string 以便更容易提供给 Text 小部件。
  • 事件虽然类型是动态的,但它不会给你带来任何问题。您可以将其转换为实际类型,例如 String。你面临什么问题?
  • final result = on&lt;String, Text&gt;(a, b, (value) =&gt; Text(value)); 将解决问题
  • @Darish 问题是类型转换失败。 (无法将动态转换为字符串或类似的东西,这就是我问这个的原因)

标签: function flutter types parameters


【解决方案1】:

Dart 目前不支持参数列表中的推理。正在跟踪此问题,但是 #731

现在您需要明确输入:

final result = on(a, b, (String value) => Text(value))

这至少强制 a bbuilder 共享同一类型。

随着即将推出的implicit-dynamic 分析器规则,此类事情将更容易被发现,增加的维护开销有望让 dart 语言维护人员重新考虑推理问题的优先级。

【讨论】:

  • 哦,好吧,我不知道你可以为接收到的值强制一个类型。谢谢!
猜你喜欢
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
相关资源
最近更新 更多