首页 > 解决方案 > 如何避免小部件构造函数中的冗余类型和类型实例?

问题描述

我正在创建一个带有两个参数的包装器:模型和屏幕。

这个包装器在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()

标签: flutterdart

解决方案


推荐阅读