gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 07:12:40 25 4
gpt4 key购买 nike

我正在尝试查看是否可以添加一些在我的应用程序周围传递的通用导航行为,并且我发现 InheritedWidget 是避免在小部件树周围传递特定回调的绝佳选择,但是我越来越注意到我只能拥有特定类类型的 InheritedWidget 才能使 InheritedWidget 模式起作用,我想知道是否有办法使用 InheritedWidget 作为 mixin 或者是否有更好的选择。

我的应用看起来像这样,它向下传递一个回调

enter image description here

我现在有 3 个导航器,我需要呈现相同的方法,但现在要自己对其进行操作,我需要创建 3 个 InheritedWidget 导航器,但问题是树下的任何小部件都必须执行

NavigatorA.of(context).pushWidget()

但我更愿意它是一个通用的 GenericNavigator.of(context).pushWidget() 这样我的叶子小部件甚至不需要知道导航器对象,恐怕要实现这一点我需要能够将 InheritedWidget 用作混合

这是期望的流程,没有传递回调

enter image description here

这是正确的策略还是有更好的方法?如何将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com