Ali*_*min 2 architecture dart flutter
例如,我试图一次获取多个流发出的数据,但是其中两个或多个流发出相同类型的数据,比如说一个字符串。
我的问题是,是否可以使用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);
},
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
MultiProvider还是不改变任何东西。如果两个提供程序共享同一类型,则最深的提供程序将覆盖该值。
无法从不是给定类型的最接近祖先的提供程序获取值。
如果您需要独立访问所有这些值,则每个值都应具有唯一的类型。
例如,代替:
Provider<int>(
value: 42,
child: Provider<int>(
value: 84,
child: <something>
),
)
Run Code Online (Sandbox Code Playgroud)
你可以做:
class Root {
Root(this.value);
final int value;
}
class Leaf {
Root(this.value);
final int value;
}
Provider<Root>(
value: Root(42),
child: Provider<Leaf>(
value: Leaf(84),
child: <something>
),
)
Run Code Online (Sandbox Code Playgroud)
这允许使用以下方法独立获取每个值:
Provider.of<Root>(context)
Provider.of<Leaf>(context);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2623 次 |
| 最近记录: |