Flutter 如何避免小部件构造函数中的冗余类型和类型实例?
我正在创建一个包含两个参数的包装器:一个模型和一个屏幕 此包装在内部使用Flutter 如何避免小部件构造函数中的冗余类型和类型实例?,flutter,dart,Flutter,Dart,我正在创建一个包含两个参数的包装器:一个模型和一个屏幕 此包装在内部使用ChangeNotifierProvider,T作为模型类型 此时调用此包装器小部件如下所示: notifierRapper(Preferences(),PreferencesScreen()); 上面的方法是可行的,但它冗长、冗余,而且坦率地说是糟糕的API设计 这是包装器小部件: class NotifierRapper扩展了无状态小部件{ 最终T_模型; 最终屏幕; NotifierRapper(此._型号,此._屏
ChangeNotifierProvider
,T
作为模型类型
此时调用此包装器小部件如下所示:
notifierRapper(Preferences(),PreferencesScreen());
上面的方法是可行的,但它冗长、冗余,而且坦率地说是糟糕的API设计
这是包装器小部件:
class NotifierRapper扩展了无状态小部件{
最终T_模型;
最终屏幕;
NotifierRapper(此._型号,此._屏幕);
@凌驾
小部件构建(上下文){
返回ChangeNotifierProvider(
建筑商:()=>型,
孩子:_屏幕
);
}
}
我希望此API看起来像:
notifierRapper(Preferences(),PreferencesScreen());
但这不起作用,因为ChangeNotifierProvider
需要一个类型。我可以从T
的实例向ChangeNotifierProvider
提供一个类型吗
类似的东西(和变体)会失败:
/。。。
类型T=\u model.runtimeType;
返回ChangeNotifierProvider(
// ...
否则
notifierRapper(PreferencesScreen());
从类型派生构造函数
/。。。
返回ChangeNotifierProvider(
建造商:()=>T()
// ...
如果我担心这些都不可能,那么在这种情况下,我如何提供一个合理的API设计呢
告诉我有一种方法可以避免同时提供type
Preferences
和Preferences()
的实例!你能澄清一下当你使用notifierrapper(Preferences(),PreferencesScreen());
时会发生什么吗?我希望T
是从首选项()推断出来的
argument.@jamesdlin你说得对,行得通!我不确定我在测试中是怎么搞混的,并认为它不起作用。谢谢!实际上,它不起作用。在我上面的评论中,我进行了检查,没有编译错误,但在运行时失败,出现了“在这个首选项屏幕小部件上方找不到正确的提供程序”。当我通过notifierrapper(…)
指定类型时,它在应用程序中确实正常工作。使用notifierrapper(Preferences(),…)时,静态键入的好处是…)
,构建的通知说话者的实际类型是什么?@jamesdlin它是通知说话者
,我不明白为什么变更通知说话者
没有“注册”为变更通知说话者