如果难以理解为什么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 {
...
}
AppState
是BaseState
的子类。
问题是,如果我这样设置,dart会说返回类型是BaseState
,而我希望它是AppState
。因为事件E是AppEvent<AppState>
。
var newState
更改为AppState newState
,它将起作用。dispatcher<AppEvent, AppState>(..)
添加显式值,它将起作用。希望有人可以指引我正确的方向,或者告诉我这不可能完成。