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

2024-01-01

例如,我试图同时获取多个流发出的数据,但其中 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐