我来自Typescript,在TypeScript中,我可以像这样定义对象的接口:
export interface Locale {
login: {
title: string;
actions: {
submit: string;
forgot: string;
}
}
}
我了解Dart删除了接口,相反,所有类都具有implicit interfaces
因此,我尝试通过编写以下代码来实现上述接口:
class BaseLoginActionsLocale {
final String submit;
final String forgot;
BaseLoginActionsLocale({this.submit, this.forgot});
}
class BaseLoginLocale {
final String title;
final BaseLoginActionsLocale actions;
BaseLoginLocale({this.title, this.actions});
}
class BaseLocale {
final BaseLoginLocale login;
BaseLocale({this.login});
}
...
final BaseLocale enLocale = BaseLocale(
login: BaseLoginLocale(
title: 'Login',
actions: BaseLoginActionsLocale(
submit: 'Login',
forgot: 'Forgot Password?'
)
)
);
但是我觉得这是太多样板了。
所以我的问题是,是否有更好的方法来实现int
答案 0 :(得分:0)
要传递BaseLocale的所有值,可以按以下方式实现它:
class BaseLoginActionsLocale {
final String submit;
final String forgot;
BaseLoginActionsLocale(this.submit, this.forgot);
}
class BaseLoginLocale {
final String title;
final BaseLoginActionsLocale actions;
BaseLoginLocale(this.title, submit, forgot) : actions = new BaseLoginActionsLocale(submit, forgot);
}
class BaseLocale {
final BaseLoginLocale login;
BaseLocale(title, submit, forgot) : login = new BaseLoginLocale(title, submit, forgot);
}
final BaseLocale enLocale = BaseLocale('Login', 'Login', 'Forgot Password?');
请注意,这种方法使BaseLocale
有责任了解其依赖项的属性(并通过扩展实现),并且可能被某些人视为反模式。