【发布时间】:2021-05-08 01:28:38
【问题描述】:
我有四个提供者,它们都向同一个小部件提供挑战类的实例。 它们是不同的挑战,但我不知道如何区分提供者,所以我想知道是否可以为提供者命名。
【问题讨论】:
我有四个提供者,它们都向同一个小部件提供挑战类的实例。 它们是不同的挑战,但我不知道如何区分提供者,所以我想知道是否可以为提供者命名。
【问题讨论】:
其实不能,这是provider最大的缺点,你可以用riverpod代替,同一个作者,但是比普通provider有一些优势。
这就是 provider 和 riverpod 的作者所说的。
它使提供者模式更加灵活,从而允许支持常见请求的功能,例如: 能够拥有多个相同类型的提供者。
【讨论】:
没有。虽然您可以让多个提供者共享同一类型,但小部件将只能获取其中一个:最近的祖先。
相反,您必须明确地为这两个提供者指定不同的类型。
代替:
Provider<Challenge>(
create: (_) => 'Something',
child: Provider<Challenge>(
create: (_) => 'SomethingElse',
child: ...,
),
),
喜欢:
MultiProvider(
providers: [
Provider<ChallengeOne>(create: (_) => Something()),
Provider<ChallengeTwo>(create: (_) => SomethingElse()),
Provider<ChallengeThree>(create: (_) => AnotherThing()),
],
child: someWidget,
)
【讨论】: