Dart中对泛型的类型推断

时间:2020-05-29 07:45:24

标签: flutter generics dart flutter-provider

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

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

我的代码如下。


class BaseState extends ChangeNotifier {
  static T of<T>(BuildContext context, {bool listen = true}) 
         => Provider.of<T>(context, listen: listen);

  static Future<T> dispatcher<E extends BaseEvent<T>, T extends BaseState>(BuildContext context, E event) 
         => of<T>(context, listen: false).dispatch<E, T>(event);

...
}

我想这样称呼它:

var newState = await BaseState.dispatcher(context, LoginToggleEvent());
print(newState.isLoggedIn);

事件LoginToggleEvent的类定义为

abstract class AppEvent extends BaseEvent<AppState> {}
class LogginToggleEvent extends AppEvent {
 ...
}

AppStateBaseState的子类。

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

  • 如果我将var newState更改为AppState newState,它将起作用。
  • 如果我明确地将其强制转换为AppState,它将起作用。
  • 如果我为调度程序(dispatcher<AppEvent, AppState>(..)添加显式值,它将起作用。

希望有人可以指引我正确的方向,或者告诉我这不可能完成。

0 个答案:

没有答案