flutter - 如何避免小部件构造函数中的冗余类型和类型实例?
问题描述
我正在创建一个带有两个参数的包装器:模型和屏幕。
这个包装器在ChangeNotifierProvider<T>
内部使用,T
作为模型类型。
现在调用这个包装器小部件看起来像这样:
NotifierWrapper<Preferences>(Preferences(), PreferencesScreen());
上面的方法可行,但它是冗长和冗余的,坦率地说是糟糕的 API 设计。
这是包装小部件:
class NotifierWrapper<T extends ChangeNotifier> extends StatelessWidget {
final T _model;
final _screen;
NotifierWrapper(this._model, this._screen);
@override
Widget build(context) {
return ChangeNotifierProvider<T>(
builder: (_) => _model,
child: _screen
);
}
}
我希望这个 API 看起来像:
NotifierWrapper(Preferences(), PreferencesScreen());
但这不适用于ChangeNotifierProvider<T>
需要类型。我可以ChangeNotifierProvider
从 的实例中提供类型T
吗?
像这样的东西(和变体)失败了:
// ...
Type<ChangeNotifier> T = _model.runtimeType;
return ChangeNotifierProvider<T>(
// ...
或其他
NotifierWrapper<Preferences>(PreferencesScreen());
从类型派生构造函数?
// ...
return ChangeNotifierProvider<T>(
builder: (_) => T()
// ...
如果我担心这些都不可能,那么在这种情况下,我该如何提供合理的 API 设计?
告诉我有一种方法可以避免同时提供类型Preferences
和实例Preferences()
!
解决方案
推荐阅读
- java - JAVA-ANDROID STUDIO - 我应该使用什么参数来运行这个方法?
- flutter - 来自firebase firestore的颤振查询(where + order by)返回错误
- matlab - 我应该如何在 MATLAB 中将 syms 与求解命令一起使用?
- c# - 从本地驱动器上存储的 Outllok 邮件中读取
- android - 如何设置背景图像,适合 ios 初始屏幕版本的颤动屏幕?
- android - 圆角在材质按钮中不起作用
- javascript - 通过输入表单更改字体粗细值时出现奇怪的字体行为
- modelica - 警告:该组件被多次声明,无法验证是否与其他同名声明相同 - Modelica
- webpack - HMR - 更新失败:SyntaxError: Unexpected token < in JSON at position 0
- python - 如何在没有密钥文件的情况下授予 Cloud Run 服务访问服务帐号凭据的权限?