flutter - 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);
}
解决方案
弄清楚了。 Dart 类型转换错误
我不得不将is
类型检查更改为:
final state = Provider.of<SettingsProvider>(context).state;
if (state is EntityLoaded<Settings>) {
print(state.entity);
}
然后我可以.entity
毫无警告地访问。
推荐阅读
- rust-cargo - 节点模板构建错误
- firefox - WebRTC:Firefox 经常选择最差的 ICE 候选者?
- javascript - 如何在预期的动画之前停止 css 旋转回面对面?
- java - 如何从可能是与给定 id 匹配的父级或子级之一的列表中获取对象
- f# - 反馈 F# 成语和风格,做什么;; 意思等
- r - 堆叠数据集
- javascript - 收到承诺{
错误节点 - excel - Excel VBA IE 自动化 - VBA 在 Window.confirm 弹出后停止
- python - 如何使用数组找到前 n 个负整数
- css - 如何阻止 flex 行的第二行出现在页面中间?