我正在尝试查看是否可以添加一些围绕我的应用程序传递的常规导航行为,并且我发现InheritedWidget是避免在小部件树周围传递特定回调的理想选择,但是我越来越注意到为了使InheritedWidget模式正常工作,只具有特定类类型的InheritedWidget,我想知道是否有一种方法可以将InheritedWidget用作mixin,或者是否有更好的选择。

我的应用看起来像这样,它在树上传递了一个回调

dart - 是否可以将InheritedWidget用作mixin?-LMLPHP

我现在有3个导航器,我需要介绍相同的方法,但现在要对其进行操作,我需要创建3个InheritedWidget导航器,但是问题在于,树下的任何小部件都必须要做
NavigatorA.of(context).pushWidget()
但是我更喜欢它是否是一个通用的GenericNavigator.of(context).pushWidget(),这样我的叶子小部件甚至不需要知道导航器对象的正确值,恐怕要实现这一点,我将需要能够使用InheritedWidget作为混合

这是所需的流程,未传递任何回调

dart - 是否可以将InheritedWidget用作mixin?-LMLPHP

这是正确的策略还是有更好的方法?
如何将InheritedWidget用作混合?

最佳答案

不,您不能将InheritedWidget用作mixin。
但是,您可以创建一个通用的InheritedWidget:

class Provider<T> extends InheritedWidget {
  Provider({Key key, this.value, Widget child}) : super(key: key, child: child);

  static T of<T>(BuildContext context) {
    Provider<T> provider = context.dependOnInheritedWidgetOfExactType<T>();
    return provider?.value;
  }

  final T value;

  @override
  bool updateShouldNotify(Provider<T> oldWidget) {
    return value != oldWidget.value;
  }
}

关于dart - 是否可以将InheritedWidget用作mixin?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54281618/

10-11 09:13