Flutter Dart中泛型的类型推断

Flutter Dart中泛型的类型推断,flutter,generics,dart,flutter-provider,Flutter,Generics,Dart,Flutter Provider,如果难以理解为什么Dart类型推断无法理解泛型的这种结构 问题是:这是语言的限制还是我可以改进我的代码以便Dart理解返回变量的类型 我的代码如下 类BaseState扩展了ChangeNotifier{ 静态T of(BuildContext上下文,{bool listen=true}) =>Provider.of(上下文,listen:listen); 静态未来调度程序(BuildContext上下文,E事件) =>of(上下文,侦听:false)。分派(事件); ... } 我想这样称

如果难以理解为什么Dart类型推断无法理解泛型的这种结构

问题是:这是语言的限制还是我可以改进我的代码以便Dart理解返回变量的类型

我的代码如下


类BaseState扩展了ChangeNotifier{
静态T of(BuildContext上下文,{bool listen=true})
=>Provider.of(上下文,listen:listen);
静态未来调度程序(BuildContext上下文,E事件)
=>of(上下文,侦听:false)。分派(事件);
...
}
我想这样称呼它:

var newState=await BaseState.dispatcher(上下文,LoginToggleEvent());
印刷品(newState.isLoggedIn);
事件
LoginToggleEvent
的类定义为

抽象类AppEvent扩展BaseEvent{}
类LogginToggleEvent扩展AppEvent{
...
}
AppState
BaseState
的子类

问题是,如果我这样设置,dart会说返回类型是
BaseState
,我希望它是
AppState
。因为事件E是一个
事件

  • 如果我将
    var newState
    更改为
    AppState newState
    它将工作
  • 如果我显式地强制转换它(作为AppState),它将工作
  • 如果我为dispatcher(
    dispatcher(…)
    )添加显式值,它将工作

希望有人能给我指出正确的方向,或者告诉我这是不可能的。

您第一个明确指定
newState
类型
AppState
的解决方案是正确的。在本文中提到,当
类型
推理不能像您预期的那样工作时,显式指定
类型
。将
新闻状态
类型
精确指定为
应用状态
的第一个解决方案是正确的方法。在本文中提到,当
类型
推理无法按预期工作时,显式指定
类型