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它是
通知说话者
,我不明白为什么
变更通知说话者
没有“注册”为
变更通知说话者