首页 > 解决方案 > Dart:如果动态是一种类型,那么使用智能感知访问?

问题描述

我是 OOP 和飞镖的新手。我在下面发布了“有效”的代码,但智能感知不适用于它。

问题: getterstate是动态的,因为settings.state.entity如果返回类型是EntityState. 我认为if (settings.state is EntityLoaded<Settings>)类型检查将允许我访问.entity.,但我想这不是它的工作方式。

如何让智能感知再次工作?

abstract class EntityState {}

class EntityEmpty extends EntityState {}

class EntityLoaded<T> extends EntityState {
  final T entity;
  EntityLoaded(this.entity);
}
class SettingsProvider extends ChangeNotifier {
  // ----------------------------------> _state could be either EntityEmpty or EntityLoaded<T>
  EntityState _state = EntityEmpty();

  SettingsProvider(this._state);

  // EntityState get state => _state --> doesn't let me access .entity code block below.
  get state => _state; // -------------> works without intellisense
}
final settings = Provider.of<SettingsProvider>(context);
if (settings.state is EntityLoaded<Settings>) {
  print(settings.state.entity);
}

标签: flutterdart

解决方案


弄清楚了。 Dart 类型转换错误

我不得不将is类型检查更改为:

final state = Provider.of<SettingsProvider>(context).state;
if (state is EntityLoaded<Settings>) {
  print(state.entity);
}

然后我可以.entity毫无警告地访问。


推荐阅读