gpt4 book ai didi

Flutter - MultiProvider 如何与相同类型的提供者一起工作?

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

例如,我试图同时获取为多个流发出的数据,但是这些流中有 2 个或更多发出相同类型的数据,比如说一个字符串。

我的问题是,是否可以同时使用相同类型的 MultiProvider 和多个 StreamProvider(或任何提供者,但我对这种情况感兴趣)能够访问他们每个人发出的数据?

一个解决方案是在使用常见数据类型时使用 StreamBuilder,但我真的很喜欢 MultiProvider 提供的更简洁的代码。

示例:

class MyScreen extends StatelessWidget {
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<String>(stream: Observable.just("stream1")),
StreamProvider<String>(stream: Observable.just("stream2")),
StreamProvider<String>(stream: Observable.just("stream3"))
],
child: Builder(
builder: (BuildContext context) {
AsyncSnapshot<String> snapshot =
Provider.of<AsyncSnapshot<String>>(context);
String data = snapshot.data;
return Text(data);
},
),
);
}
}

最佳答案

MultiProvider 与否不会改变任何东西。如果两个提供者共享同一类型,则最深的那个会覆盖该值。

无法从不是给定类型最近祖先的提供者处获取值。

如果您需要独立访问所有这些值,每个值都应该有一个唯一的类型。

例如,代替:

Provider<int>(
value: 42,
child: Provider<int>(
value: 84,
child: <something>
),
)

你可以这样做:

class Root {
Root(this.value);

final int value;
}

class Leaf {
Leaf(this.value);

final int value;
}


Provider<Root>(
value: Root(42),
child: Provider<Leaf>(
value: Leaf(84),
child: <something>
),
)

这允许使用以下方法独立获取每个值:

Provider.of<Root>(context)
Provider.of<Leaf>(context);

关于Flutter - MultiProvider 如何与相同类型的提供者一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505413/

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